Какие проблемы возникают при работе с FastText при разрезании слов и стемминге
Что проверяют
Понимаете ли вы, как FastText строит вектор слова из символьных n-грамм, и видите ли, что стемминг поверх этого чаще вредит. Следом обычно спрашивают, как модель получает вектор для слова, которого не было в обучении, и где этот механизм ошибается.
Как отвечать
Слово оборачивается в < и > и раскладывается на символьные n-граммы длиной от minn до maxn (для эмбеддингов по умолчанию 3 и 6). Вектор слова собирается из векторов этих n-грамм и самого слова. Отсюда проблемы:
- стемминг избыточен: n-граммы уже связывают «договор», «договора» и «договорами», а Snowball режет окончания грубо, склеивает разные слова и выбрасывает падеж и число;
- рассинхрон с предобученной моделью:
cc.ru.300.binобучена на сырых словоформах, и обрезанные стеммером токены попадают не туда. Предобработка на обучении и на инференсе должна совпадать; - токенизация по пробелам: FastText делит текст только по пробельным символам, «привет,» и «привет» для него разные токены. Пунктуацию и регистр нормализуют заранее, для китайского или японского нужен сегментатор;
- ложная близость: слова с общими подстроками и разным смыслом получают похожие векторы, а опечатки наследуют смысл от случайных соседей по n-граммам;
- коллизии: n-граммы хэшируются в
bucketкорзин (по умолчанию 2 млн), и разные n-граммы делят один вектор; - режим supervised: там
minnиmaxnпо умолчанию равны 0, символьных n-грамм нет, пока их не включить; - формат файла:
.vecхранит только векторы слов, OOV из него не получить, нужен.binна несколько гигабайт.
Вместо стемминга разумнее лемматизация (pymorphy3, Natasha) или сырые словоформы, если данных достаточно. Решение проверяют по метрике задачи, а не по списку ближайших соседей.
Где спотыкаются
Говорят, что FastText «делает стемминг сам». Он ничего не отрезает, а собирает вектор из кусочков слова, и это другой механизм.
Загружают .vec и удивляются, что для новых слов векторов нет.
Обучают на лемматизированном тексте, а на инференсе подают сырой. Качество падает, и причину ищут в модели.