⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.
blog-post

Новый способ токенизации китайского языка

Сегодня мы хотели бы подчеркнуть проблему функциональности поиска на китайском языке. В этой статье мы рассмотрим основные трудности реализации полнотекстового поиска для языков 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_chinese
  • charset_table = cjk / chinese

Интерактивный курс

Попробуйте, как это работает, в нашем курсе

<img src="ICU_course-1-optimized.webp" alt="img">

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

Установить Manticore Search

Установить Manticore Search