Telegram: @ninachely
Введение. NLP, токенизация, vocab
Теперь наш вход — это текст.
Проблемы, возникающие при обработке текста:
-
Непонятно, как подавать на вход буковки
(Конечно, мы можем сказать, что это байты и сделать label enconding, но из курса МО-1 мы уже знаем, что это плохая идея)
-
Надо уметь работать со входом переменной длины
(С картинкой ничего ужасного не произойдет, если сделать upscale/downscale, — разве что она немного пошакалится, а с текстом так нельзя)
Токенизация — представление текста в виде последовательности
Vocab — словарь из всех возможных токенов, которые будут вводиться (в самом простом варианте это буквы)
Правильная токенизация текста — тоже некоторая наука
Подходы к токенизации
- посимвольно
- мы делаем информацию более труднодоступной для модели (куски символов образуют какие-то смысловые единицы)
- очень маленький vocab
- очень длинные последовательности (даже для страницы текста)
- нейронке приходится дополнительно выделять смысл из последовательности символов
- если мы строим модель, которая должна научиться по тексту произносить его, то скорее всего нужно токенизировать посимвольно (либо просто токенизировать более мелко, чем по словам — например, по слогам)
- пословно
.split()
, .lower()
- в случае нейронок обычно не делают лемматизацию и стемминг
- знаки препинания тоже выделяются как отдельные слова
- vocab (словарь) огромный (10-100 тыс. слов)
- разные словоформы — это обычно разные слова
- последовательности намного короче, чем в посимвольном подходе
- передаем на вход слова, а они являются смысловыми единицами, это супер
<UNK>
(unknown) — специальный токен для новых или слишком редких слов
- если мы строим модель для обработки языка, то нужно токенизировать по словам
- по частям слов (промежуточный вариант)
- взяли “лучшее из двух миров”
- относительно небольшой словарик
- можем составлять новые слова
- смысл более или менее сохраняется (например, если “морфемой” является кусок корня, то он несет в себе какой-то смысл)
- длина последовательности более или менее адекватная (больше, чем слов, но не так много, как в случае с символами)
Byte-pair encoding (BPE)
Один из самых популярных способов построения промежуточной токенизации
В крутых моделях обычно по умолчанию используется BPE
Будем пытаться искать такие куски слов, которые часто встречаются в нашем корпусе текстов
Мы не хотим, чтобы “морфемы” выходили за пределы слова (запрещаем морфемы, содержащие пробелы)