Добавление дополнительных слов в word2vec или Glove (возможно, используя gensim)

У меня есть два предварительно обученных вложения слов: Glove.840b.300.txt и custom_glove.300.txt

Один прошел предварительную подготовку в Стэнфорде, а другой - я. Оба имеют разный словарный запас. Чтобы уменьшить oov, я хотел бы добавить слова, которые не появляются в file1, но присутствуют в file2, в file1. Как мне это легко сделать?

Вот как я загружаю и сохраняю файлы в gensim 3.4.0.

from gensim.models.keyedvectors import KeyedVectors

model = KeyedVectors.load_word2vec_format('path/to/thefile')
model.save_word2vec_format('path/to/GoogleNews-vectors-negative300.txt', binary=False)

person Aerin    schedule 30.07.2018    source источник


Ответы (1)


Я не знаю простого способа.

В частности, слова-векторы, которые не были совместно обучены вместе, не будут иметь совместимых / сопоставимых координатных пространств. (Нет единственного подходящего места для слова - просто относительно хорошее место по сравнению с другими словами той же модели.)

Таким образом, вы не можете просто добавить недостающие слова из другой модели: вам нужно будет преобразовать их в совместимые места. К счастью, похоже, работает использование некоторого набора общих якорных слов, присутствующих в обоих наборах слов-векторов, для изучения преобразования, а затем применения этих слов, которые вы хотите переместить.

Есть класс, [TranslationMatrix][1] и демонстрационная записная книжка в gensim, показывающий этот процесс языкового перевода (приложение, упомянутое в исходных документах word2vec). Вы могли бы легко использовать это в сочетании с возможностью добавить дополнительные векторы к экземпляру gensim KeyedVectors, чтобы создать новый набор векторов с надмножеством слов в любой из ваших исходных моделей.

person gojomo    schedule 30.07.2018