Выберите правильный анализатор для вашего случая использования
Это руководство посвящено принятию практических решений по выбору анализатора. Технические подробности о компонентах анализатора и о том, как добавлять параметры анализатора, см. в разделе Обзор анализатора.
Понимание анализаторов за 2 минуты
В Milvus анализатор обрабатывает текст, хранящийся в этом поле, чтобы сделать его доступным для поиска с помощью таких функций, как полнотекстовый поиск (BM25), совпадение фраз или совпадение текста. Считайте, что это текстовый процессор, который преобразует ваш необработанный контент в лексемы, пригодные для поиска.
Анализатор работает по простой двухступенчатой схеме:
Рабочий процесс анализатора
Токенизация (обязательно): На этом начальном этапе применяется токенизатор, разбивающий непрерывную строку текста на дискретные, осмысленные единицы, называемые токенами. Метод токенизации может существенно различаться в зависимости от языка и типа содержимого.
Фильтрация токенов (необязательно): После токенизации применяются фильтры для изменения, удаления или уточнения токенов. Эти операции могут включать преобразование всех лексем в строчные буквы, удаление общих бессмысленных слов (например, стоп-слов) или сокращение слов до их корневой формы (стемминг).
Пример:
Input: "Hello World!"
1. Tokenization → ["Hello", "World", "!"]
2. Lowercase & Punctuation Filtering → ["hello", "world"]
Почему выбор анализатора имеет значение
Выбор неправильного анализатора может сделать релевантные документы непоисковыми или вернуть нерелевантные результаты.
В следующей таблице приведены общие проблемы, возникающие из-за неправильного выбора анализатора, и даны практические решения для диагностики проблем поиска.
Проблема |
Симптом |
Пример (вход и выход) |
Причина (плохой анализатор) |
Решение (хороший анализатор) |
|---|---|---|---|---|
Чрезмерная токинизация |
Текстовые запросы к техническим терминам, идентификаторам или URL не находят нужных документов. |
|
|
Используйте |
Недостаточная токенизация |
Поиск компонента многословной фразы не возвращает документы, содержащие полную фразу. |
|
Анализатор с |
Используйте |
Языковые несоответствия |
Результаты поиска для определенного языка не имеют смысла или отсутствуют. |
Китайский текст: |
|
Используйте анализатор для конкретного языка, например |
Первый вопрос: Нужно ли вам выбирать анализатор?
Для многих случаев вам не нужно делать ничего особенного. Давайте определим, относитесь ли вы к их числу.
Поведение по умолчанию: standard анализатор
Если вы не указываете анализатор при использовании таких функций поиска текста, как полнотекстовый поиск, Milvus автоматически использует standard анализатор.
Анализатор standard:
Разделяет текст на пробелы и знаки препинания
Преобразует все лексемы в строчные буквы
Удаляет встроенный набор распространенных английских стоп-слов и большинство знаков препинания.
Пример преобразования:
Input: "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']
Критерии принятия решений: Быстрая проверка
Используйте эту таблицу, чтобы быстро определить, удовлетворяет ли стандартный анализатор standard вашим потребностям. Если нет, вам нужно выбрать другой путь.
Ваш контент |
Стандартный анализатор подходит? |
Почему |
Что вам нужно |
|---|---|---|---|
Записи в блоге на английском языке |
✅ Да |
Поведение по умолчанию является достаточным. |
Используйте значение по умолчанию (настройка не требуется). |
Документы на китайском языке |
❌ Нет |
Китайские слова не имеют пробелов и будут рассматриваться как один токен. |
Используйте встроенный |
Техническая документация |
❌ Нет |
Пунктуация удаляется из таких терминов, как |
Создайте собственный анализатор с |
Языки, разделенные пробелами, например французский/испанский текст |
⚠️ Возможно. |
Акцентированные символы ( |
Для получения лучших результатов рекомендуется использовать собственный анализатор с |
Многоязычные или неизвестные языки |
❌ Нет |
В анализаторе |
Используйте собственный анализатор с Кроме того, для более точной обработки многоязычного контента можно использовать мультиязычные анализаторы или языковой идентификатор. |
Если стандартный анализатор standard не удовлетворяет вашим требованиям, вам необходимо реализовать другой анализатор. У вас есть два пути:
Путь A: Использование встроенных анализаторов
Встроенные анализаторы - это заранее настроенные решения для распространенных языков. Это самый простой способ начать работу, когда стандартный анализатор по умолчанию не подходит.
Доступные встроенные анализаторы
Анализатор |
Поддержка языка |
Компоненты |
Примечания |
|---|---|---|---|
Большинство языков, разделенных пробелами (английский, французский, немецкий, испанский и т.д.) |
|
Анализатор общего назначения для начальной обработки текста. Для моноязычных сценариев более высокую производительность обеспечивают анализаторы, ориентированные на конкретный язык (например, |
|
Специализированный для английского языка, который применяет стемминг и удаление стоп-слов для лучшего соответствия английской семантике |
|
Рекомендуется для англоязычного контента по сравнению с |
|
Китайский |
|
В настоящее время по умолчанию используется словарь упрощенного китайского языка. |
Пример реализации
Чтобы использовать встроенный анализатор, просто укажите его тип на странице analyzer_params при определении схемы поля.
# Using built-in English analyzer
analyzer_params = {
"type": "english"
}
# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
Подробнее об использовании см. в разделах "Полнотекстовый поиск", "Совпадение текста" или "Совпадение фразы".
Путь B: Создание пользовательского анализатора
Если встроенные опции не удовлетворяют вашим потребностям, вы можете создать собственный анализатор, объединив токенизатор с набором фильтров. Это дает вам полный контроль над конвейером обработки текста.
Шаг 1: Выберите токенизатор на основе языка
Выберите токенизатор в зависимости от основного языка вашего контента:
Западные языки
Для языков, разделенных пробелами, у вас есть следующие варианты:
Токенизатор |
Как это работает |
Лучший для |
Примеры |
|---|---|---|---|
Разделяет текст на основе пробелов и знаков препинания |
Общий текст, смешанная пунктуация |
|
|
Разделение только по пробельным символам |
Предварительно обработанный контент, текст, отформатированный пользователем |
|
Восточноазиатские языки
Языки, основанные на словарях, требуют специализированных токенизаторов для правильной сегментации слов:
Китайский
Токенизатор |
Как работает |
Лучший для |
Примеры |
|---|---|---|---|
Сегментация на основе китайского словаря с интеллектуальным алгоритмом |
Рекомендуется для китайского контента - сочетает в себе словарь и интеллектуальные алгоритмы, специально разработанные для китайского языка |
|
|
Морфологический анализ на основе чистого словаря с китайским словарем(cc-cedict) |
По сравнению с |
|
Японский и корейский
Язык |
Токенизатор |
Параметры словаря |
Лучший для |
Примеры |
|---|---|---|---|---|
Японский |
ipadic (общего назначения), ipadic-neologd (современные термины), unidic (академический) |
Морфологический анализ с обработкой правильных существительных |
|
|
Корейский |
Морфологический анализ корейского языка |
|
Многоязычие или неизвестные языки
Для контента, в котором языки непредсказуемы или смешаны внутри документов:
Токенизатор |
Как это работает |
Лучше всего подходит для |
Примеры |
|---|---|---|---|
Токенизация с учетом Юникода (Международные компоненты для Юникода) |
Смешанные шрифты, неизвестные языки или когда достаточно простой токенизации |
|
Когда использовать icu:
Смешанные языки, когда идентификация языка нецелесообразна.
Вам не нужны накладные расходы на многоязычные анализаторы или идентификатор языка.
Контент имеет основной язык, в котором иногда встречаются иностранные слова, вносящие незначительный вклад в общий смысл (например, английский текст с единичными названиями брендов или техническими терминами на японском или французском).
Альтернативные подходы: Для более точной обработки многоязычного содержимого используйте многоязычные анализаторы или идентификатор языка. Подробнее см. в разделе Многоязычные анализаторы или языковой идентификатор.
Шаг 2: Добавьте фильтры для повышения точности
После выбора токенизатора примените фильтры в соответствии с вашими требованиями к поиску и характеристиками контента.
Часто используемые фильтры
Эти фильтры необходимы для большинства языковых конфигураций с раздельным пробелом (английский, французский, немецкий, испанский и т. д.) и значительно улучшают качество поиска:
Фильтр |
Как работает |
Когда использовать |
Примеры |
|---|---|---|---|
Преобразовать все лексемы в нижний регистр |
Универсальный - применяется ко всем языкам с различием регистра |
|
|
Сократить слова до их корневой формы |
Языки с падежными окончаниями слов (английский, французский, немецкий и т.д.) |
Для английского языка:
|
|
Удалить общие бессмысленные слова |
Для большинства языков - особенно эффективно для языков, разделенных пробелами |
|
Для восточноазиатских языков (китайского, японского, корейского и т. д.) используйте фильтры, ориентированные на конкретный язык. Эти языки обычно используют другие подходы к обработке текстов и не могут извлечь значительной пользы из стемминга.
Фильтры нормализации текста
Эти фильтры стандартизируют варианты текста, чтобы улучшить согласованность совпадений:
Фильтр |
Как работает |
Когда использовать |
Примеры |
|---|---|---|---|
Преобразование акцентированных символов в эквиваленты ASCII |
Международный контент, пользовательский контент |
|
Фильтрация токенов
Контролируйте, какие токены будут сохранены на основе содержания или длины символов:
Фильтр |
Как это работает |
Когда использовать |
Примеры |
|---|---|---|---|
Удалить отдельные знаки препинания |
Очистка вывода токенизаторов |
|
|
Оставить только буквы и цифры |
Технический контент, обработка чистого текста |
|
|
Удаление лексем, выходящих за пределы заданного диапазона длины |
Отфильтровать шум (слишком длинные лексемы) |
|
|
Пользовательская фильтрация на основе шаблонов |
Требования к токенам, специфичные для домена |
|
Фильтры по специфике языка
Эти фильтры учитывают специфические особенности языка:
Фильтр |
Язык |
Как работает |
Примеры |
|---|---|---|---|
Немецкий |
Разделяет сложные слова на компоненты для поиска |
|
|
Китайский |
Сохраняет китайские иероглифы + алфавитно-цифровые |
|
|
Китайский |
Сохраняет только китайские иероглифы |
|
Шаг 3: Объединить и реализовать
Чтобы создать свой собственный анализатор, вы определяете токенизатор и список фильтров в словаре analyzer_params. Фильтры применяются в том порядке, в котором они перечислены.
# Example: A custom analyzer for technical content
analyzer_params = {
"tokenizer": "whitespace",
"filter": ["lowercase", "alphanumonly"]
}
# Applying analyzer config to target VARCHAR field in your collection schema
schema.add_field(
field_name='text',
datatype=DataType.VARCHAR,
max_length=200,
enable_analyzer=True,
analyzer_params=analyzer_params,
)
Финал: Протестируйте run_analyzer
Всегда проверяйте свою конфигурацию перед применением к коллекции:
# Sample text to analyze
sample_text = "The Milvus vector database is built for scale!"
# Run analyzer with the defined configuration
result = client.run_analyzer(sample_text, analyzer_params)
print("Analyzer output:", result)
Общие проблемы для проверки:
Чрезмерная токинизация: Неправильное разделение технических терминов
Недостаточная токинизация: Фразы не разделяются должным образом
Пропущенные лексемы: Важные термины отфильтровываются
Подробную информацию об использовании см. в разделе run_analyzer.
Рекомендуемые конфигурации для каждого случая использования
В этом разделе приведены рекомендуемые конфигурации токенизаторов и фильтров для распространенных случаев использования анализаторов в Milvus. Выберите комбинацию, которая лучше всего соответствует вашему типу контента и требованиям поиска.
Прежде чем применять анализатор к вашей коллекции, мы рекомендуем вам использовать run_analyzer для тестирования и проверки эффективности анализа текста.
Языки со знаками ударения (французский, испанский, немецкий и т. д.)
Используйте токенизатор standard с преобразованием строчных букв, стеммингом для конкретного языка и удалением стоп-слов. Эта конфигурация также работает для других европейских языков, если изменить параметры language и stop_words.
# French example
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
"asciifolding", # Handle accent marks
{
"type": "stemmer",
"language": "french"
},
{
"type": "stop",
"stop_words": ["_french_"]
}
]
}
# For other languages, modify the language parameter:
# "language": "spanish" for Spanish
# "language": "german" for German
# "stop_words": ["_spanish_"] or ["_german_"] accordingly
Английский контент
Для обработки англоязычного текста с комплексной фильтрацией. Вы также можете использовать встроенный english анализатор:
analyzer_params = {
"tokenizer": "standard",
"filter": [
"lowercase",
{
"type": "stemmer",
"language": "english"
},
{
"type": "stop",
"stop_words": ["_english_"]
}
]
}
# Equivalent built-in shortcut:
analyzer_params = {
"type": "english"
}
Китайский контент
Используйте токенизатор jieba и применяйте фильтр символов для сохранения только китайских символов, латинских букв и цифр.
analyzer_params = {
"tokenizer": "jieba",
"filter": ["cnalphanumonly"]
}
# Equivalent built-in shortcut:
analyzer_params = {
"type": "chinese"
}
Для упрощенного китайского языка cnalphanumonly удаляет все лексемы, кроме китайских иероглифов, буквенно-цифрового текста и цифр. Это позволяет избежать влияния пунктуации на качество поиска.
Японское содержимое
Используйте токенизатор lindera с японским словарем и фильтрами для очистки пунктуации и контроля длины лексем:
analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict": "ipadic" # Options: ipadic, ipadic-neologd, unidic
},
"filter": [
"removepunct", # Remove standalone punctuation
{
"type": "length",
"min": 1,
"max": 20
}
]
}
Корейский контент
Аналогично японскому, с использованием токенизатора lindera и корейского словаря:
analyzer_params = {
"tokenizer": {
"type": "lindera",
"dict": "ko-dic"
},
"filter": [
"removepunct",
{
"type": "length",
"min": 1,
"max": 20
}
]
}
Смешанный или многоязычный контент
При работе с контентом, который охватывает несколько языков или непредсказуемо использует скрипты, начните с анализатора icu. Этот анализатор с поддержкой Юникода эффективно справляется со смешанными шрифтами и символами.
Базовая многоязычная настройка (без стемминга):
analyzer_params = {
"tokenizer": "icu",
"filter": ["lowercase", "asciifolding"]
}
Расширенная многоязычная обработка:
Для лучшего контроля над поведением токенов в разных языках:
Используйте многоязыковую конфигурацию анализатора. Подробности см. в разделе Многоязычные анализаторы.
Внедрите идентификатор языка в содержимое. Подробнее см. в разделе Языковой идентификатор.
Интеграция с функциями поиска текста
Выбрав анализатор, вы можете интегрировать его с функциями поиска текста, предоставляемыми Milvus.
Полнотекстовый поиск
Анализаторы оказывают непосредственное влияние на полнотекстовый поиск на основе BM25 благодаря генерации разреженных векторов. Используйте один и тот же анализатор для индексации и запроса, чтобы обеспечить согласованную токенизацию. Анализаторы для конкретного языка обычно обеспечивают лучшие показатели BM25, чем общие анализаторы. Подробности реализации см. в разделе Полнотекстовый поиск.
Текстовое соответствие
Операции сопоставления текста выполняют точное сопоставление лексем между запросами и проиндексированным содержимым на основе результатов работы анализатора. Подробности реализации см. в разделе Совпадение текста.
Совпадение фраз
Сопоставление фраз требует последовательной токенизации многословных выражений для сохранения границ и смысла фраз. Подробности реализации см. в разделе Совпадение фраз.