Какие сложности возникают при использовании Word2Vec и NLTK для русского языка
Что проверяют
Понимаете ли вы, почему инструменты, выросшие на английском, на русском работают хуже, и знаете ли, чем это компенсировать. Следом обычно спрашивают, стоит ли сейчас вообще брать Word2Vec или сразу идти в трансформеры.
Как отвечать
Главная причина одна: морфология. У русского существительного около дюжины форм, у глагола десятки, а Word2Vec считает каждую форму отдельным словом. Отсюда цепочка проблем:
- разреженность и OOV: частота размазывается по формам, редкие формы отсекает
min_count, а слова, которых не было в корпусе, вектора не получают вовсе; - лемматизация обязательна: в NLTK лемматизатора для русского нет,
WordNetLemmatizerработает только с английским. ЕстьSnowballStemmer("russian"), но он просто режет окончания и не справляется с чередованиями и супплетивными формами («человек» и «люди», «идти» и «шёл»). Для лемм берут pymorphy3 (поддерживаемый форк pymorphy2), Mystem или Natasha; - омонимия форм: «стали» это и «сталь», и «стать». Словарный лемматизатор без контекста выбирает самый частый разбор и ошибается;
- токенизация: слова через дефис, сокращения вроде «т. е.», «ё» против «е». Для русского удобнее
razdel, чем стандартный токенизатор NLTK; - многозначность: Word2Vec даёт один статический вектор на слово, и «ключ» от двери склеивается с «ключом»-родником.
Что предложить взамен: fastText собирает вектор из символьных n-грамм и поэтому переваривает и морфологию, и незнакомые слова; готовые модели RusVectores обучены на лемматизированных корпусах с частеречными тегами вида дом_NOUN; там, где важен смысл в контексте, берут русскоязычные BERT-подобные энкодеры.
Где спотыкаются
Говорят «сделаем стемминг, и всё». Стеммер склеивает разные слова с общим началом и не связывает формы с чередованием.
Лемматизируют запросы одним инструментом, а модель обучена на леммах другого, да ещё с тегами. Словарь не совпадает, и половина слов оказывается вне модели.
Не могут сказать, когда Word2Vec всё ещё уместен: дешёвый бейзлайн, признаки для классического ML, поиск близких терминов в узком домене. Ответ «всё давно заменили трансформеры» без оценки стоимости звучит заученно.