Обработка естественного языка (NLP) — грязное и сложное дело. Предварительная обработка, машинное обучение, отношения, сущности, онтологии и многое другое.

Вложения/представления слов — с тех пор, как они появились вместе с великой работой Миколова и др., они были, мягко говоря, революционными. Сама концепция очень интуитивно понятна и мотивирует к более глубокому пониманию широкого спектра приложений. Основное преимущество распределенных представлений заключается в том, что похожие слова находятся рядом в векторном пространстве, что упрощает обобщение на новые шаблоны и делает оценку модели более надежной. Было показано, что распределенное векторное представление полезно во многих приложениях обработки естественного языка, таких как распознавание именованных сущностей (NER), устранение неоднозначности смысла слова (WSD), синтаксический анализ, тегирование и машинный перевод.

Их можно сгенерировать с помощью двух методов — word2vec и GloVe, впервые разработанных Google и Стэнфордом соответственно. Каждая из моделей имеет разные подходы, но дает схожие результаты. Обе модели изучают векторы слов из информации об их совместном появлении. В целом они отличаются тем, что word2vec — это прогностическая модель, тогда как GloVe — это счетная модель. Подробнее вы можете прочитать в этой бумаге.

Я поздно экспериментировал с ними обоими, используя их модели с Gensim. Однако я получал подобные сообщения об ошибках при попытке импортировать векторы GloVe в Gensim. После некоторых исследований я обнаружил, что вложения word2vec начинаются со строки заголовка с количеством токенов и количеством измерений файла. Это позволяет Gensim соответствующим образом выделять память для запроса модели. Большие размеры означают, что больше памяти удерживается в плену. Соответственно, эту строку нужно вставить в файл встраивания GloVe. Я написал хак для той же цели — несколько уродливый, но хорошо справляющийся с ограничениями памяти. Посмотрите здесь.