Как получить векторы для каждого документа с помощью Google News Word2Vec

#python #word2vec #word-embedding

#python #word2vec #встраивание в Word

Вопрос:

Я пробую предварительно обученную модель word2vec от Google для получения вложений word. Я могу загрузить модель в свой код и вижу, что получаю 300-мерное представление слова. Вот код —

 import gensim
from gensim import models
from gensim.models import Word2Vec
model = gensim.models.KeyedVectors.load_word2vec_format('/Downloads/GoogleNews-vectors-negative300.bin', binary=True)
dog = model['dog']
print(dog.shape)
  

что дает мне вывод ниже —

 >>> print(dog.shape)
(300,)
  

Это работает, но я заинтересован в получении векторного представления для всего документа, а не только для одного слова. Как я могу это сделать, используя модель word2vec?

 dog_sentence = model['it is a cute little dog']
KeyError: "word 'it is a cute little dog' not in vocabulary"
  

Я планирую применить их ко многим документам, а затем обучить модель кластеризации по теме it для неконтролируемого обучения и тематического моделирования.

Комментарии:

1. radimrehurek.com/gensim/models/doc2vec.html

Ответ №1:

Это набор векторов word. Не существует единого канонического способа превращения векторов слов в векторы для более длинных фрагментов текста, таких как предложения или документы.

Вы можете попробовать просто усреднить векторы слов для каждого слова в тексте. (Чтобы сделать это, вы бы не передавали весь текст строки, а разбили его на слова, посмотрели каждое слово-вектор, затем усреднили все эти векторы.)

Это быстро и просто вычисляется и хорошо работает в качестве основы для некоторых задач, особенно для тематического анализа очень коротких текстов. Но поскольку он не учитывает грамматику / порядок слов и разбавляет все слова всеми остальными, его часто превосходят более сложные анализы.

Также обратите внимание: этот набор векторов слов был рассчитан Google примерно в 2013 году из новостных статей. В нем будут отсутствовать слова и значения слов, которые возникли с тех пор, и его векторы будут приправлены способом написания новостных статей, что сильно отличается от других областей языка. Если у вас достаточно данных, обучение ваших собственных векторов слов на текстах вашего собственного домена может превзойти их как по охвату слов, так и по релевантности векторов.

Ответ №2:

Подход 1: вы должны получить векторы для каждого слова и объединить их, самым простым способом было бы их усреднение. Вы также можете сделать средневзвешенное значение, вычисляя веса для каждого слова (например: tf-idf).

Подход 2: используйте doc2vec. Возможно, вам придется переучиться или получить предварительно обученную модель doc2vec для этого.