Как преобразовать модель gensim Word2Vec в модель FastText?

У меня есть модель Word2Vec, которая была обучена на огромном корпусе. При использовании этой модели для приложения нейронной сети я наткнулся на довольно много слов «вне словарного запаса». Теперь мне нужно найти вложения слов для этих слов "вне словарного запаса". Я погуглил и обнаружил, что Facebook недавно выпустил для этого библиотеку FastText. Теперь мой вопрос: как я могу преобразовать мою существующую модель word2vec или Keyedvectors в модель FastText?


person Uma Maheswara Rao Pinninti    schedule 29.12.2017    source источник


Ответы (2)


FastText может создавать векторы для фрагментов подслов, включая эти фрагменты в начальное обучение из исходного корпуса. Затем, встречая слово вне словарного запаса (OOV), он создает вектор для этих слов, используя фрагменты, которые он распознает. Для языков с повторяющимися шаблонами корня слова / префикса / суффикса это приводит к векторам, которые лучше, чем случайные предположения для слов OOV.

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

Может быть работоспособный способ приблизить тот же эффект, например, взяв все известные слова с одним и тем же фрагментом подслова и извлекая некоторую общую среднюю / векторную составляющую, которая будет назначена подслову. Или моделирование слов OOV как некоторого среднего словарного запаса слов, которые находятся на небольшом расстоянии редактирования от слова OOV. Но эти методы не совсем были бы FastText, просто отдаленно аналогичными ему, и насколько хорошо они работают или могут ли работать с настройкой, будет экспериментальным вопросом. Итак, дело не в том, чтобы брать готовую библиотеку.

В в этом блоге есть несколько исследовательских работ с другими идеями самонастройки OOV. сообщение Себастьяна Рудера.

Если вам нужна функциональность FastText OOV, наиболее обоснованным подходом было бы обучение векторов FastText с нуля на том же корпусе, который использовался для ваших традиционных векторов с полным текстом.

person gojomo    schedule 29.12.2017

Вот фрагмент кода:

txt_model = KeyedVectors.load(model_name)
model.wv.save_word2vec_format('{}.txt'.format(model_name), binary=False)

Где имя модели - это имя обученной модели Word2Vec.

Однако gensim (начиная с 3.2.0) имеет следующее:

from gensim.models import FastText
model = FastText(sentences, workers=num_workers)
model.wv.save_word2vec_format('{}.txt'.format(model_name), binary=False)

НО вам все равно нужно сохранить его как текстовый файл, потому что FastText не может интерпретировать вложения двоичных слов.

person VnC    schedule 16.05.2018
comment
model = FastText (предложения, worker = num_workers) Означает ли это, что он снова будет обучать весь корпус ?? - person Uma Maheswara Rao Pinninti; 17.05.2018
comment
Можем ли мы загрузить файл, сохраненный после этой команды (model.wv.save_word2vec_format ('{}. Txt'.format (model_name), binary = False)) как модель fasttext ?? - person Uma Maheswara Rao Pinninti; 17.05.2018