blog-post

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

Сегодня мы хотели бы обратить внимание на проблему функциональности поиска на китайском. В этой статье мы рассмотрим основные трудности внедрения полнотекстового поиска для языков CJK и как их преодолеть с помощью Manticore Search.

Трудности поиска на китайском языке

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

Специфика китайских языков:

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

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

Токенизация/Сегментация китайского языка

Говоря более конкретно, токенизация – это процесс превращения значимой части данных, например, слова, в уникальный идентификатор, называемый токеном, который представляет собой часть данных в системе. В поисковых системах токены служат ссылкой на исходные данные, но не могут использоваться для угадывания этих фактических значений.

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

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

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


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

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


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

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


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

Давайте рассмотрим возможные способы решения проблем токенизации/сегментации китайского языка.

Внедрения

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

  • N-граммы: рассматривают перекрывающиеся группы “N” соседних китайских символов как токены, где “N” может быть 1 - Uni; 2 - Bi; 3 - Tri; и так далее “-граммы”.
  • Словарный метод: выполняет сегментацию слов на основе словаря.

Самый простой способ сегментации китайского текста предполагает использование N-грамм. Алгоритм прост, но известно, что он lacking in quality и дает значительную нагрузку, которая увеличивается с длиной обрабатываемого текста, потому что каждый 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-Chinese text tokenization", который предлагает командную строку для более простого обучения.

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

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