如何使用 Google News Word2Vec 获取每个文档的向量
How to get vectors for each document using Google News Word2Vec
我正在尝试 Google 的 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"
我计划将这些应用到许多文档上,然后在其主题上训练聚类模型以进行无监督学习和主题建模。
方法一:
你必须为每个单词获取向量并将它们组合起来,最基本的方法是 average 它们。您还可以通过计算每个单词的权重来进行加权平均(例如:tf-idf)。
方法二:
使用 doc2vec。为此,您可能需要重新训练或获取 pre-trained doc2vec 模型。
这是一组 word-vectors。没有单一的规范方法可以将 word-vectors 转换为较长文本运行的向量,例如句子或文档。
您可以尝试对文本中的每个单词简单地取 word-vectors 的平均值。 (为此,您不会传递整个字符串文本,而是将其分解为单词,查找每个 word-vector,然后对所有这些向量进行平均。)
计算起来既快速又简单,并且可以作为某些任务的基准,尤其是 topical-analyses very-short 文本。但由于它不考虑 grammar/word-order,并且将所有单词与所有其他单词一起稀释,因此它的表现通常优于更复杂的分析。
另请注意:那组 word-vectors 是由 Google 在 2013 年左右根据新闻文章计算得出的。它会遗漏从那时起出现的单词和 word-senses,并且它的向量会随着 news-articles 的书写方式而变味——与其他语言领域非常不同。如果您有足够的数据,在您自己域的文本上训练您自己的 word-vectors,可能在 word-coverage 和 vector-relevance.
方面都优于它们
我正在尝试 Google 的 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"
我计划将这些应用到许多文档上,然后在其主题上训练聚类模型以进行无监督学习和主题建模。
方法一: 你必须为每个单词获取向量并将它们组合起来,最基本的方法是 average 它们。您还可以通过计算每个单词的权重来进行加权平均(例如:tf-idf)。
方法二: 使用 doc2vec。为此,您可能需要重新训练或获取 pre-trained doc2vec 模型。
这是一组 word-vectors。没有单一的规范方法可以将 word-vectors 转换为较长文本运行的向量,例如句子或文档。
您可以尝试对文本中的每个单词简单地取 word-vectors 的平均值。 (为此,您不会传递整个字符串文本,而是将其分解为单词,查找每个 word-vector,然后对所有这些向量进行平均。)
计算起来既快速又简单,并且可以作为某些任务的基准,尤其是 topical-analyses very-short 文本。但由于它不考虑 grammar/word-order,并且将所有单词与所有其他单词一起稀释,因此它的表现通常优于更复杂的分析。
另请注意:那组 word-vectors 是由 Google 在 2013 年左右根据新闻文章计算得出的。它会遗漏从那时起出现的单词和 word-senses,并且它的向量会随着 news-articles 的书写方式而变味——与其他语言领域非常不同。如果您有足够的数据,在您自己域的文本上训练您自己的 word-vectors,可能在 word-coverage 和 vector-relevance.
方面都优于它们