Языковой идентификаторCompatible with Milvus v2.5.15+

language_identifier - это специализированный токенизатор, предназначенный для расширения возможностей текстового поиска в Milvus путем автоматизации процесса анализа языка. Его основная функция заключается в определении языка текстового поля и последующем динамическом применении предварительно настроенного анализатора, наиболее подходящего для этого языка. Это особенно ценно для приложений, работающих с различными языками, поскольку избавляет от необходимости вручную определять язык для каждого ввода.

Интеллектуально направляя текстовые данные на соответствующий конвейер обработки, language_identifier упрощает ввод многоязычных данных и обеспечивает точную токенизацию для последующих операций поиска и извлечения.

Рабочий процесс определения языка

Устройство language_identifier выполняет ряд шагов для обработки текстовой строки, и этот процесс очень важен для пользователей, чтобы понять, как правильно его настроить.

Language Detection Workflow Рабочий процесс обнаружения языка

  1. Вход: Рабочий процесс начинается с ввода текстовой строки.

  2. Определение языка: Эта строка сначала передается механизму определения языка, который пытается определить язык. Milvus поддерживает два механизма: whatlang и lingua.

  3. Выбор анализатора:

    • Успех: Если язык успешно обнаружен, система проверяет, есть ли у обнаруженного названия языка соответствующий анализатор, настроенный в вашем словаре analyzers. Если совпадение найдено, система применяет указанный анализатор к вводимому тексту. Например, обнаруженный текст "Mandarin" будет направлен на токенизатор jieba.

    • Обратное действие: Если обнаружение не удалось, или если язык был успешно обнаружен, но вы не указали для него конкретный анализатор, система по умолчанию переходит к предварительно настроенному анализатору по умолчанию. Это очень важный момент: анализатор default является запасным вариантом как при неудачном обнаружении, так и при отсутствии подходящего анализатора.

После выбора подходящего анализатора текст токенизируется и обрабатывается, завершая рабочий процесс.

Доступные механизмы обнаружения языков

Milvus предлагает выбор между двумя механизмами обнаружения языков:

Выбор зависит от конкретных требований к производительности и точности вашего приложения.

Движок

Скорость

Точность

Формат вывода

Лучший для

whatlang

Быстрый

Хорошо подходит для большинства языков

Названия языков (например, "English", "Mandarin", "Japanese")

Ссылка: Колонка "Язык" в таблице поддерживаемых языков

Приложения реального времени, для которых важна скорость

lingua

Медленнее

Более высокая точность, особенно для коротких текстов

Имена на английском языке (например, "English", "Chinese", "Japanese")

Ссылка: Список поддерживаемых языков

Приложения, в которых точность важнее скорости

Важнейшим моментом является соглашение о присвоении имен. Хотя оба движка возвращают названия языков на английском языке, они используют разные термины для некоторых языков (например, whatlang возвращает Mandarin, а lingua возвращает Chinese). Ключ анализатора должен точно совпадать с именем, возвращаемым выбранным механизмом обнаружения.

Конфигурация

Чтобы правильно использовать токенизатор language_identifier, необходимо выполнить следующие шаги по определению и применению его конфигурации.

Шаг 1: Выбор языков и анализаторов

Суть настройки language_identifier заключается в настройке анализаторов на конкретные языки, которые вы планируете поддерживать. Система работает, сопоставляя обнаруженный язык с соответствующим анализатором, поэтому этот шаг очень важен для точной обработки текста.

Ниже приведено рекомендуемое сопоставление языков с подходящими анализаторами Milvus. Эта таблица служит связующим звеном между выходными данными системы обнаружения языков и наилучшим инструментом для работы.

Язык (выходной сигнал детектора)

Рекомендуемый анализатор

Описание

English

type: english

Токенизация стандартного английского языка с фильтрацией стоп-слов и стемминга.

Mandarin (через whatlang) или Chinese (через lingua)

tokenizer: jieba

Сегментация китайских слов для текста, не разделенного пробелами.

Japanese

tokenizer: icu

Надежный токенизатор для сложных шрифтов, включая японский.

French

type: standard, filter: ["lowercase", "asciifolding"]

Пользовательская конфигурация для работы с французскими акцентами и символами.

  • Ключевым моментом является соответствие: Название вашего анализатора должно точно соответствовать языку, на котором работает механизм обнаружения. Например, если вы используете whatlang, ключ для китайского текста должен быть Mandarin.

  • Лучшие практики: В таблице выше приведены рекомендуемые конфигурации для нескольких распространенных языков, но это не исчерпывающий список. Более подробное руководство по выбору анализаторов см. в разделе Выбор правильного анализатора для вашего случая использования.

  • Выходные данные детектора: Полный список названий языков, возвращаемых механизмами обнаружения, приведен в таблице поддерживаемых языков Whatlang и в списке поддерживаемых языков Lingua.

Шаг 2: Определите параметры анализатора (analyzer_params)

Чтобы использовать токенизатор language_identifier в Milvus, создайте словарь, содержащий эти ключевые компоненты:

Необходимые компоненты:

  • analyzers config set - словарь, содержащий все конфигурации анализатора, которые должны включать:

    • default - Резервный анализатор, используемый при неудачном определении языка или при отсутствии подходящего анализатора.

    • Языковые анализаторы - каждый из них определяется как <analyzer_name>: <analyzer_config>, где:

      • analyzer_name соответствует выбранному вами механизму обнаружения (например, "English", "Japanese")

      • analyzer_config соответствует стандартному формату параметров анализатора (см. Обзор анализаторов).

Необязательные компоненты:

  • identifier - Указывает, какой движок обнаружения языка использовать (whatlang или lingua). По умолчанию используется whatlang, если не указано.

  • mapping - Создает пользовательские псевдонимы для ваших анализаторов, позволяя вам использовать описательные имена вместо точного формата вывода движка обнаружения.

Токенайзер работает, сначала определяя язык входного текста, а затем выбирая соответствующий анализатор из вашей конфигурации. Если обнаружение не удается или подходящего анализатора не существует, он автоматически возвращается к вашему анализатору default.

Имена ваших анализаторов должны точно совпадать с результатами выбранного вами механизма определения языка. Такой подход проще и позволяет избежать возможной путаницы.

Для whatlang и lingua используйте названия языков, указанные в соответствующей документации:

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",  # Must be `language_identifier`
        "identifier": "whatlang",  # or `lingua`
        "analyzers": {  # A set of analyzer configs
            "default": {
                "tokenizer": "standard"  # fallback if language detection fails
            },
            "English": {  # Analyzer name that matches whatlang output
                "type": "english"
            },
            "Mandarin": {  # Analyzer name that matches whatlang output
                "tokenizer": "jieba"
            }
        }
    }
}

Альтернативный подход: Пользовательские имена с отображением

Если вы предпочитаете использовать собственные имена анализаторов или вам необходимо сохранить совместимость с существующими конфигурациями, вы можете использовать параметр mapping. Он создает псевдонимы для ваших анализаторов - будут работать как оригинальные имена движка обнаружения, так и ваши пользовательские имена.

analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua",
        "analyzers": {
            "default": {
                "tokenizer": "standard"
            },
            "english_analyzer": {  # Custom analyzer name
                "type": "english"
            },
            "chinese_analyzer": {  # Custom analyzer name
                "tokenizer": "jieba"
            }
        },
        "mapping": {
            "English": "english_analyzer",   # Maps detection output to custom name
            "Chinese": "chinese_analyzer"
        }
    }
}

Определив analyzer_params, вы можете применить их к полю VARCHAR при определении схемы коллекции. Это позволит Milvus обрабатывать текст в этом поле с помощью указанного анализатора для эффективной токенизации и фильтрации. Подробнее см. в разделе Пример использования.

Примеры

Здесь приведены некоторые готовые конфигурации для распространенных сценариев. Каждый пример включает в себя конфигурацию и проверочный код, чтобы вы могли сразу же протестировать настройку.

Обнаружение английского и китайского языков

from pymilvus import MilvusClient

# Configuration
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "whatlang",
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "Mandarin": {"tokenizer": "jieba"}
        }
    }
}

# Test the configuration
client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

# English text
result_en = client.run_analyzer("The Milvus vector database is built for scale!", analyzer_params)
print("English:", result_en)
# Output: 
# English: ['The', 'Milvus', 'vector', 'database', 'is', 'built', 'for', 'scale']

# Chinese text  
result_cn = client.run_analyzer("Milvus向量数据库专为大规模应用而设计", analyzer_params)
print("Chinese:", result_cn)
# Output: 
# Chinese: ['Milvus', '向量', '数据', '据库', '数据库', '专', '为', '大规', '规模', '大规模', '应用', '而', '设计']

Европейские языки с нормализацией акцента

# Configuration for French, German, Spanish, etc.
analyzer_params = {
    "tokenizer": {
        "type": "language_identifier",
        "identifier": "lingua", 
        "analyzers": {
            "default": {"tokenizer": "standard"},
            "English": {"type": "english"},
            "French": {
                "tokenizer": "standard",
                "filter": ["lowercase", "asciifolding"]
            }
        }
    }
}

# Test with accented text
result_fr = client.run_analyzer("Café français très délicieux", analyzer_params)
print("French:", result_fr)
# Output: 
# French: ['cafe', 'francais', 'tres', 'delicieux']

Примечания по использованию

  • Один язык на поле: Работает с полем как с единой, однородной единицей текста. Он предназначен для работы с разными языками в разных записях данных, например, одна запись содержит английское предложение, а другая - французское.

  • Нет строк со смешанными языками: Он не предназначен для обработки одной строки, содержащей текст на нескольких языках. Например, одно поле VARCHAR, содержащее английское предложение и японскую фразу в кавычках, будет обработано как один язык.

  • Обработка доминирующего языка: В смешанных языковых сценариях механизм обнаружения, скорее всего, определит доминирующий язык, и соответствующий анализатор будет применен ко всему тексту. Это приведет к плохой токенизации или ее отсутствию для встроенного иностранного текста.