Вы действительно можете обойтись без сегментации слов !?

В предыдущем посте я представил четыре способа токенизации китайских документов:



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

Я еще не пробовал использовать SentencePiece без предварительной токенизации. Постараюсь сделать это в следующем цикле разработки.

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

Можно ли пропустить сегментацию слов?

Судя по моим экспериментам, это действительно так (т.е. мы можем пропустить сегментацию слов). Фактически, модель, в которой слова не сегментировались, работала лучше, чем та, которая делала это.

(Используемый набор данных - это набор данных обзора фильмов, который я собрал, как описано в этом посте - [Предварительный просмотр] Разработка современных китайских моделей НЛП ». На этот раз я расширил набор данных, чтобы он стал примерно в три раза больше, и немного изменил целевую переменную. Задача состоит в том, чтобы предсказать рейтинг пользователя по комментарию, используя регрессионную модель.)

Пример

Это предложение, взятое из реального обзора:

唯一的看点大概就是阿汤哥怎么折磨自己了

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

唯一 的 看点 大概 就是 阿汤哥 怎么 折磨 自己 了

Тогда модель SentencePiece разметила бы вышеуказанный результат как:

‘▁唯一’, ‘▁的’, ‘▁看’, ‘点’, ‘▁大概’, ‘▁就是’, ‘▁阿汤哥’, ‘▁怎么’, ‘▁折磨’, ‘▁自己’, ‘▁了’

Инструмент словесной сегментации сделал большую часть работы. Единственное, что SetencePiece сделала иначе, так это разделила 看点 на «» и «点».

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

'▁', '唯一的', '看点', '大概', '就是', '阿汤哥', '怎么', '折磨', '自己', '了'

Мы видим, что эта модель SentencePiece научилась сегментировать слова сама по себе с удивительно хорошей точностью. Это объясняет, почему окончательные оценки MSE в таблице 1 очень близки.

Предостережение: размер словарного запаса

Модель с сегментацией слов действительно получила меньше (лучше) недоумение. Однако трудности, связанные с этими двумя моделями, нельзя напрямую сравнивать из-за различий в словарях.

Представьте, что у нас есть язык, состоящий всего из четырех символов, и у нас есть это предложение:

abcdabcbcd

Предположим, что мы можем разделить предложение на:

abc dab cbcd

Если мы скармливаем приведенное выше сегментированное предложение для обучения модели SentencePiece, модель могла бы создать два уникальных токена _d, _c, которые никогда не появятся, если мы скармливаем модели необработанное предложение. .

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

Бонус

SentencePiece также опубликовала здесь некоторые результаты экспериментов, которые они провели в отношении предварительной токенизации:



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

Исходный код

Код, использованный для экспериментов:



Проверьте сценарии в scripts/sentiment_analysis и scripts/language_model, чтобы узнать, где искать.

Приносим извинения за отсутствие документации в этом репо. Кодовая база сейчас проходит капитальный ремонт. Постараюсь превратить его в более документированный и модульный.

Плавник

Спасибо за прочтение! Пожалуйста, подумайте о том, чтобы дать этому посту несколько аплодисментов, если вы сочтете его полезным.