Сегодня мы хотели бы подчеркнуть проблему функциональности поиска на китайском языке. В этой статье мы рассмотрим основные трудности реализации полнотекстового поиска для языков CJK и способы их преодоления с помощью Manticore Search.
Трудности поиска на китайском языке
Китайский язык принадлежит к так называемой языковой семье CJK (китайский, японский и корейский). Это, вероятно, самые сложные языки для реализации полнотекстового поиска, так как в них значения слов сильно зависят от многочисленных вариаций и последовательностей иероглифов, а символы не разделены на слова.
Специфика китайских языков:
- Китайские иероглифы не имеют прописных или строчных букв. У них есть только одно понятие, независимо от контекста.
- Нет дополнительных украшений для букв, как, например, в арабском языке.
- В предложениях нет пробелов между словами.
Так в чем же дело? Чтобы найти точное совпадение в полнотекстовом поиске, нам нужно столкнуться с проблемой токенизации, основной задачей которой является разбивка текста на низкоуровневые единицы значений, которые могут быть найдены пользователем.
Токенизация/Сегментация китайского языка
Говоря более конкретно, токенизация — это процесс превращения значимого фрагмента данных, например, слова, в уникальный идентификатор, называемый токеном, который представляет собой фрагмент данных в системе. В полнотекстовых поисковых системах токены служат ссылкой на оригинальные данные, но не могут быть использованы для угадывания этих фактических значений.
В большинстве языков мы используем пробелы или специальные символы для разделения текста на фрагменты. Однако в китайском и других языках CJK это невозможно из-за их морфологических свойств. Тем не менее, нам все равно нужно это сделать. И этот процесс называется сегментацией.
Другими словами, для китайского языка сегментация является предпосылкой для токенизации.
Вот пример, показывающий разницу между токенизацией на английском и китайском языках.

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

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

Здесь мы можем видеть комбинацию из двух иероглифических символов “简单”, что означает “Простота”, но если мы возьмем каждый из иероглифов отдельно, они будут иметь разные значения “简” (простой) и “单” (один)
В некоторых случаях, в зависимости от того, где вы ставите границу между словами, значения могут быть разными. Например:

Проблема, как вы видите, заключается в том, что группа символов может быть сегментирована по-разному, что приводит к различным значениям.
Давайте рассмотрим возможные способы решения проблем токенизации/сегментации китайского языка.
Реализации
Существует несколько подходов к сегментации китайских текстов, но основные два:
- N-граммы: рассматривает перекрывающиеся группы "N" соседних китайских символов как токены, где "N" может быть 1 - Uni; 2 - Bi; 3 - Tri; и так далее "-граммы".
- Основанный на словаре: выполняет сегментацию слов на основе словаря.
Самый простой способ сегментации китайского текста предполагает использование N-грамм. Алгоритм прост, но известно, что он не отличается качеством и дает значительные накладные расходы, которые растут с увеличением длины обрабатываемого текста, потому что каждая N-грамма является отдельным токеном, что делает словарь токенов больше и усложняет обработку поискового запроса. Исторически это был общий способ индексации текстов CJK в Manticore Search.
В версии Manticore Search 3.1.0 был представлен новый способ сегментации китайских текстов на основе алгоритма сегментации текста ICU, который следует второму подходу - сегментации на основе словаря.
Преимущества использования ICU
ICU - это набор библиотек с открытым исходным кодом, предоставляющих поддержку Unicode и глобализации для программных приложений. Наряду с многими другими функциями, он решает задачу определения границ текста. Алгоритмы ICU определяют позиции слов, предложений, абзацев в пределах диапазона текста или определяют места, которые будут подходящими для переноса строк при отображении текста.
Алгоритм работы сегментации ICU в Manticore можно кратко описать следующим образом:
- Исходный текст рассматривается как массив символов.
- Затем Manticore проходит по массиву, и если находит набор китайских символов, передает его в библиотеку ICU для обработки.
- Сегментированные части китайского текста заменяют оригинальные, несегментированные части.
- Другие алгоритмы обработки естественного языка ( charset_table , wordforms и т.д.) применяются к измененному тексту, как в обычном процессе сегментации.
Чтобы включить сегментацию ICU-Китай, необходимо установить следующие параметры конфигурации индекса:
morphology = icu_chinesecharset_table = cjk / chinese
Интерактивный курс
Попробуйте, как это работает, в нашем курсе
<img src="ICU_course-1-optimized.webp" alt="img">
Вы можете узнать больше о токенизации китайского языка, если попробуете наш интерактивный курс "Токенизация текста ICU-Китай", который включает командную строку для более удобного обучения.
