如何使用谷歌新闻Word2Vec获取每个文档的矢量



我正在试用谷歌的word2vec预训练模型来获得单词嵌入。我可以在代码中加载模型,我可以看到我得到一个单词的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"

我计划将这些应用于许多文档,然后就主题训练一个聚类模型,以进行无监督学习和主题建模。

这是一组单词向量。没有一种规范的方法可以将单词向量转化为较长文本段的向量,比如句子或文档。

您可以尝试简单地对文本中每个单词的单词向量求平均值。(要做到这一点,你不会传递整个字符串文本,而是将其分解为单词,查找每个单词向量,然后对所有向量求平均值。(

这是一个快速而简单的计算,可以作为一些任务的基线,特别是对非常短的文本的主题分析。但由于它不考虑语法/语序,并用所有其他单词稀释所有单词,因此更复杂的分析往往优于它。

另请注意:这组单词向量是谷歌在2013年左右根据新闻文章计算出来的。它将错过从那时起出现的单词和词义,它的载体将受到新闻文章写作方式的影响——这与语言的其他领域非常不同。如果你有足够的数据,在你自己领域的文本上训练你自己的单词向量,可能在单词覆盖率和向量相关性方面都优于它们。

方法1:您必须为每个单词获取向量并将其组合,最基本的方法是平均。您还可以通过计算每个单词的权重(例如:tf idf(来进行加权平均

方法2:使用doc2vec。您可能需要对此进行再培训或获得预先培训的doc2vec模型。

最新更新