Языковой идентификаторCompatible with Milvus v2.5.15+
language_identifier - это специализированный токенизатор, предназначенный для расширения возможностей текстового поиска в Milvus путем автоматизации процесса анализа языка. Его основная функция заключается в определении языка текстового поля и последующем динамическом применении предварительно настроенного анализатора, наиболее подходящего для этого языка. Это особенно ценно для приложений, работающих с различными языками, поскольку избавляет от необходимости вручную определять язык для каждого ввода.
Интеллектуально направляя текстовые данные на соответствующий конвейер обработки, language_identifier упрощает ввод многоязычных данных и обеспечивает точную токенизацию для последующих операций поиска и извлечения.
Рабочий процесс определения языка
Устройство language_identifier выполняет ряд шагов для обработки текстовой строки, и этот процесс очень важен для пользователей, чтобы понять, как правильно его настроить.
Рабочий процесс обнаружения языка
Вход: Рабочий процесс начинается с ввода текстовой строки.
Определение языка: Эта строка сначала передается механизму определения языка, который пытается определить язык. Milvus поддерживает два механизма: whatlang и lingua.
Выбор анализатора:
Успех: Если язык успешно обнаружен, система проверяет, есть ли у обнаруженного названия языка соответствующий анализатор, настроенный в вашем словаре
analyzers. Если совпадение найдено, система применяет указанный анализатор к вводимому тексту. Например, обнаруженный текст "Mandarin" будет направлен на токенизаторjieba.Обратное действие: Если обнаружение не удалось, или если язык был успешно обнаружен, но вы не указали для него конкретный анализатор, система по умолчанию переходит к предварительно настроенному анализатору по умолчанию. Это очень важный момент: анализатор
defaultявляется запасным вариантом как при неудачном обнаружении, так и при отсутствии подходящего анализатора.
После выбора подходящего анализатора текст токенизируется и обрабатывается, завершая рабочий процесс.
Доступные механизмы обнаружения языков
Milvus предлагает выбор между двумя механизмами обнаружения языков:
Выбор зависит от конкретных требований к производительности и точности вашего приложения.
Движок |
Скорость |
Точность |
Формат вывода |
Лучший для |
|---|---|---|---|---|
|
Быстрый |
Хорошо подходит для большинства языков |
Названия языков (например, |
Приложения реального времени, для которых важна скорость |
|
Медленнее |
Более высокая точность, особенно для коротких текстов |
Имена на английском языке (например, Ссылка: Список поддерживаемых языков |
Приложения, в которых точность важнее скорости |
Важнейшим моментом является соглашение о присвоении имен. Хотя оба движка возвращают названия языков на английском языке, они используют разные термины для некоторых языков (например, whatlang возвращает Mandarin, а lingua возвращает Chinese). Ключ анализатора должен точно совпадать с именем, возвращаемым выбранным механизмом обнаружения.
Конфигурация
Чтобы правильно использовать токенизатор language_identifier, необходимо выполнить следующие шаги по определению и применению его конфигурации.
Шаг 1: Выбор языков и анализаторов
Суть настройки language_identifier заключается в настройке анализаторов на конкретные языки, которые вы планируете поддерживать. Система работает, сопоставляя обнаруженный язык с соответствующим анализатором, поэтому этот шаг очень важен для точной обработки текста.
Ниже приведено рекомендуемое сопоставление языков с подходящими анализаторами Milvus. Эта таблица служит связующим звеном между выходными данными системы обнаружения языков и наилучшим инструментом для работы.
Язык (выходной сигнал детектора) |
Рекомендуемый анализатор |
Описание |
|---|---|---|
|
|
Токенизация стандартного английского языка с фильтрацией стоп-слов и стемминга. |
|
|
Сегментация китайских слов для текста, не разделенного пробелами. |
|
|
Надежный токенизатор для сложных шрифтов, включая японский. |
|
|
Пользовательская конфигурация для работы с французскими акцентами и символами. |
Ключевым моментом является соответствие: Название вашего анализатора должно точно соответствовать языку, на котором работает механизм обнаружения. Например, если вы используете
whatlang, ключ для китайского текста должен бытьMandarin.Лучшие практики: В таблице выше приведены рекомендуемые конфигурации для нескольких распространенных языков, но это не исчерпывающий список. Более подробное руководство по выбору анализаторов см. в разделе Выбор правильного анализатора для вашего случая использования.
Выходные данные детектора: Полный список названий языков, возвращаемых механизмами обнаружения, приведен в таблице поддерживаемых языков Whatlang и в списке поддерживаемых языков Lingua.
Шаг 2: Определите параметры анализатора (analyzer_params)
Чтобы использовать токенизатор language_identifier в Milvus, создайте словарь, содержащий эти ключевые компоненты:
Необходимые компоненты:
analyzersconfig set - словарь, содержащий все конфигурации анализатора, которые должны включать:default- Резервный анализатор, используемый при неудачном определении языка или при отсутствии подходящего анализатора.Языковые анализаторы - каждый из них определяется как
<analyzer_name>: <analyzer_config>, где:analyzer_nameсоответствует выбранному вами механизму обнаружения (например,"English","Japanese")analyzer_configсоответствует стандартному формату параметров анализатора (см. Обзор анализаторов).
Необязательные компоненты:
identifier- Указывает, какой движок обнаружения языка использовать (whatlangилиlingua). По умолчанию используетсяwhatlang, если не указано.mapping- Создает пользовательские псевдонимы для ваших анализаторов, позволяя вам использовать описательные имена вместо точного формата вывода движка обнаружения.
Токенайзер работает, сначала определяя язык входного текста, а затем выбирая соответствующий анализатор из вашей конфигурации. Если обнаружение не удается или подходящего анализатора не существует, он автоматически возвращается к вашему анализатору default.
Рекомендуется: Прямое сопоставление имен
Имена ваших анализаторов должны точно совпадать с результатами выбранного вами механизма определения языка. Такой подход проще и позволяет избежать возможной путаницы.
Для whatlang и lingua используйте названия языков, указанные в соответствующей документации:
поддерживаемые языки whatlang (используйте колонку"Язык")
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, содержащее английское предложение и японскую фразу в кавычках, будет обработано как один язык.Обработка доминирующего языка: В смешанных языковых сценариях механизм обнаружения, скорее всего, определит доминирующий язык, и соответствующий анализатор будет применен ко всему тексту. Это приведет к плохой токенизации или ее отсутствию для встроенного иностранного текста.