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

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

author image
View as markdown

Сегодня мы хотим поговорить о том, почему поиск по китайскому тексту — непростая задача. В этой статье мы рассмотрим основные трудности реализации полнотекстового поиска для языков 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-Chinese, необходимо установить следующие параметры конфигурации индекса:

  • morphology = icu_chinese
  • charset_table = cjk / chinese

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

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

img

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

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

Установите Manticore Search одной командой в Linux или macOS:

curl https://manticoresearch.com | sh

Для расширенных вариантов установки см. полное руководство по установке и документацию .

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