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

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

Понимание анализаторов за 2 минуты

В Milvus анализатор обрабатывает текст, хранящийся в этом поле, чтобы сделать его доступным для поиска с помощью таких функций, как полнотекстовый поиск (BM25), совпадение фраз или совпадение текста. Считайте, что это текстовый процессор, который преобразует ваш необработанный контент в лексемы, пригодные для поиска.

Анализатор работает по простой двухступенчатой схеме:

Analyzer Workflow Рабочий процесс анализатора

  1. Токенизация (обязательно): На этом начальном этапе применяется токенизатор, разбивающий непрерывную строку текста на дискретные, осмысленные единицы, называемые токенами. Метод токенизации может существенно различаться в зависимости от языка и типа содержимого.

  2. Фильтрация токенов (необязательно): После токенизации применяются фильтры для изменения, удаления или уточнения токенов. Эти операции могут включать преобразование всех лексем в строчные буквы, удаление общих бессмысленных слов (например, стоп-слов) или сокращение слов до их корневой формы (стемминг).

Пример:

Input: "Hello World!" 
       1. Tokenization → ["Hello", "World", "!"]
       2. Lowercase & Punctuation Filtering → ["hello", "world"]

Почему выбор анализатора имеет значение

Выбор неправильного анализатора может сделать релевантные документы непоисковыми или вернуть нерелевантные результаты.

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

Проблема

Симптом

Пример (вход и выход)

Причина (плохой анализатор)

Решение (хороший анализатор)

Чрезмерная токинизация

Текстовые запросы к техническим терминам, идентификаторам или URL не находят нужных документов.

  • "user_id"['user', 'id']

  • "C++"['c']

standard анализатор

Используйте whitespace токенизатор; комбинируйте с alphanumonly фильтром.

Недостаточная токенизация

Поиск компонента многословной фразы не возвращает документы, содержащие полную фразу.

"state-of-the-art"['state-of-the-art']

Анализатор с whitespace токенизатором

Используйте standard токенизатор для разделения на знаки препинания и пробелы; используйте пользовательский регекс-фильтр.

Языковые несоответствия

Результаты поиска для определенного языка не имеют смысла или отсутствуют.

Китайский текст: "机器学习"['机器学习'] (одна лексема).

english анализатор

Используйте анализатор для конкретного языка, например chinese.

Первый вопрос: Нужно ли вам выбирать анализатор?

Для многих случаев вам не нужно делать ничего особенного. Давайте определим, относитесь ли вы к их числу.

Поведение по умолчанию: standard анализатор

Если вы не указываете анализатор при использовании таких функций поиска текста, как полнотекстовый поиск, Milvus автоматически использует standard анализатор.

Анализатор standard:

  • Разделяет текст на пробелы и знаки препинания

  • Преобразует все лексемы в строчные буквы

  • Удаляет встроенный набор распространенных английских стоп-слов и большинство знаков препинания.

Пример преобразования:

Input:  "The Milvus vector database is built for scale!"
Output: ['the', 'milvus', 'vector', 'database', 'is', 'built', 'scale']

Критерии принятия решений: Быстрая проверка

Используйте эту таблицу, чтобы быстро определить, удовлетворяет ли стандартный анализатор standard вашим потребностям. Если нет, вам нужно выбрать другой путь.

Ваш контент

Стандартный анализатор подходит?

Почему

Что вам нужно

Записи в блоге на английском языке

✅ Да

Поведение по умолчанию является достаточным.

Используйте значение по умолчанию (настройка не требуется).

Документы на китайском языке

❌ Нет

Китайские слова не имеют пробелов и будут рассматриваться как один токен.

Используйте встроенный chinese анализатор.

Техническая документация

❌ Нет

Пунктуация удаляется из таких терминов, как C++.

Создайте собственный анализатор с whitespace токенизатором и alphanumonly фильтром.

Языки, разделенные пробелами, например французский/испанский текст

⚠️ Возможно.

Акцентированные символы (café vs. cafe) могут не совпадать.

Для получения лучших результатов рекомендуется использовать собственный анализатор с asciifolding рекомендуется для получения лучших результатов.

Многоязычные или неизвестные языки

❌ Нет

В анализаторе standard отсутствует логика, необходимая для работы с различными наборами символов и правилами токенизации.

Используйте собственный анализатор с icu токенизатором для уникодовой токенизации.

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

Если стандартный анализатор standard не удовлетворяет вашим требованиям, вам необходимо реализовать другой анализатор. У вас есть два пути:

Путь A: Использование встроенных анализаторов

Встроенные анализаторы - это заранее настроенные решения для распространенных языков. Это самый простой способ начать работу, когда стандартный анализатор по умолчанию не подходит.

Доступные встроенные анализаторы

Анализатор

Поддержка языка

Компоненты

Примечания

standard

Большинство языков, разделенных пробелами (английский, французский, немецкий, испанский и т.д.)

  • Токенизатор: standard

  • Фильтры: lowercase

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

english

Специализированный для английского языка, который применяет стемминг и удаление стоп-слов для лучшего соответствия английской семантике

  • Токенизатор: standard

  • Фильтры: lowercase, stemmer, stop

Рекомендуется для англоязычного контента по сравнению с standard.

chinese

Китайский

  • Токенизатор: jieba

  • Фильтры: cnalphanumonly

В настоящее время по умолчанию используется словарь упрощенного китайского языка.

Пример реализации

Чтобы использовать встроенный анализатор, просто укажите его тип на странице 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: Выберите токенизатор на основе языка

Выберите токенизатор в зависимости от основного языка вашего контента:

Западные языки

Для языков, разделенных пробелами, у вас есть следующие варианты:

Токенизатор

Как это работает

Лучший для

Примеры

standard

Разделяет текст на основе пробелов и знаков препинания

Общий текст, смешанная пунктуация

  • Вход: "Hello, world! Visit example.com"

  • Выход: ['Hello', 'world', 'Visit', 'example', 'com']

whitespace

Разделение только по пробельным символам

Предварительно обработанный контент, текст, отформатированный пользователем

  • Вход: "user_id = get_user_data()"

  • Выходные данные: ['user_id', '=', 'get_user_data()']

Восточноазиатские языки

Языки, основанные на словарях, требуют специализированных токенизаторов для правильной сегментации слов:

Китайский

Токенизатор

Как работает

Лучший для

Примеры

jieba

Сегментация на основе китайского словаря с интеллектуальным алгоритмом

Рекомендуется для китайского контента - сочетает в себе словарь и интеллектуальные алгоритмы, специально разработанные для китайского языка

  • Вход: "机器学习是人工智能的一个分支"

  • Выход: ['机器', '学习', '是', '人工', '智能', '人工智能', '的', '一个', '分支']

lindera

Морфологический анализ на основе чистого словаря с китайским словарем(cc-cedict)

По сравнению с jieba, обрабатывает китайский текст более универсальным образом.

  • Вход: "机器学习算法"

  • Выходные данные: ["机器", "学习", "算法"]

Японский и корейский

Язык

Токенизатор

Параметры словаря

Лучший для

Примеры

Японский

lindera

ipadic (общего назначения), ipadic-neologd (современные термины), unidic (академический)

Морфологический анализ с обработкой правильных существительных

  • Вход: "東京都渋谷区"

  • Выход: ["東京", "都", "渋谷", "区"]

Корейский

lindera

ko-dic

Морфологический анализ корейского языка

  • Вход: "안녕하세요"

  • Выходные данные: ["안녕", "하", "세요"]

Многоязычие или неизвестные языки

Для контента, в котором языки непредсказуемы или смешаны внутри документов:

Токенизатор

Как это работает

Лучше всего подходит для

Примеры

icu

Токенизация с учетом Юникода (Международные компоненты для Юникода)

Смешанные шрифты, неизвестные языки или когда достаточно простой токенизации

  • Вход: "Hello 世界 مرحبا"

  • Выход: ['Hello', ' ', '世界', ' ', 'مرحبا']

Когда использовать icu:

  • Смешанные языки, когда идентификация языка нецелесообразна.

  • Вам не нужны накладные расходы на многоязычные анализаторы или идентификатор языка.

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

Альтернативные подходы: Для более точной обработки многоязычного содержимого используйте многоязычные анализаторы или идентификатор языка. Подробнее см. в разделе Многоязычные анализаторы или языковой идентификатор.

Шаг 2: Добавьте фильтры для повышения точности

После выбора токенизатора примените фильтры в соответствии с вашими требованиями к поиску и характеристиками контента.

Часто используемые фильтры

Эти фильтры необходимы для большинства языковых конфигураций с раздельным пробелом (английский, французский, немецкий, испанский и т. д.) и значительно улучшают качество поиска:

Фильтр

Как работает

Когда использовать

Примеры

lowercase

Преобразовать все лексемы в нижний регистр

Универсальный - применяется ко всем языкам с различием регистра

  • Вход: ["Apple", "iPhone"]

  • Выход: [['apple'], ['iphone']]

stemmer

Сократить слова до их корневой формы

Языки с падежными окончаниями слов (английский, французский, немецкий и т.д.)

Для английского языка:

  • Вход: ["running", "runs", "ran"]

  • Выход: [['run'], ['run'], ['ran']]

stop

Удалить общие бессмысленные слова

Для большинства языков - особенно эффективно для языков, разделенных пробелами

  • Ввод: ["the", "quick", "brown", "fox"]

  • Выходные данные: [[], ['quick'], ['brown'], ['fox']]

Для восточноазиатских языков (китайского, японского, корейского и т. д.) используйте фильтры, ориентированные на конкретный язык. Эти языки обычно используют другие подходы к обработке текстов и не могут извлечь значительной пользы из стемминга.

Фильтры нормализации текста

Эти фильтры стандартизируют варианты текста, чтобы улучшить согласованность совпадений:

Фильтр

Как работает

Когда использовать

Примеры

asciifolding

Преобразование акцентированных символов в эквиваленты ASCII

Международный контент, пользовательский контент

  • Вход: ["café", "naïve", "résumé"]

  • Выход: [['cafe'], ['naive'], ['resume']]

Фильтрация токенов

Контролируйте, какие токены будут сохранены на основе содержания или длины символов:

Фильтр

Как это работает

Когда использовать

Примеры

removepunct

Удалить отдельные знаки препинания

Очистка вывода токенизаторов jieba, lindera, icu, которые возвращают знаки препинания в виде отдельных лексем

  • Вход: ["Hello", "!", "world"]

  • Выход: [['Hello'], ['world']]

alphanumonly

Оставить только буквы и цифры

Технический контент, обработка чистого текста

  • Вход: ["user123", "test@email.com"]

  • Выходные данные: [['user123'], ['test', 'email', 'com']]

length

Удаление лексем, выходящих за пределы заданного диапазона длины

Отфильтровать шум (слишком длинные лексемы)

  • Вход: ["a", "very", "extraordinarily"]

  • Выход: [['a'], ['very'], []] (если max=10)

regex

Пользовательская фильтрация на основе шаблонов

Требования к токенам, специфичные для домена

  • Вход: ["test123", "prod456"]

  • Выход: [[], ['prod456']] (если expr="^prod")

Фильтры по специфике языка

Эти фильтры учитывают специфические особенности языка:

Фильтр

Язык

Как работает

Примеры

decompounder

Немецкий

Разделяет сложные слова на компоненты для поиска

  • Вход: ["dampfschifffahrt"]

  • Выход: [['dampf', 'schiff', 'fahrt']]

cnalphanumonly

Китайский

Сохраняет китайские иероглифы + алфавитно-цифровые

  • Ввод: ["Hello", "世界", "123", "!@#"]

  • Выход: [['Hello'], ['世界'], ['123'], []]

cncharonly

Китайский

Сохраняет только китайские иероглифы

  • Ввод: ["Hello", "世界", "123"]

  • Выходные данные: [[], ['世界'], []]

Шаг 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, чем общие анализаторы. Подробности реализации см. в разделе Полнотекстовый поиск.

  • Текстовое соответствие

    Операции сопоставления текста выполняют точное сопоставление лексем между запросами и проиндексированным содержимым на основе результатов работы анализатора. Подробности реализации см. в разделе Совпадение текста.

  • Совпадение фраз

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

Содержание

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?