【问题标题】:How to get vectors for each document using Google News Word2Vec如何使用 Google News Word2Vec 获取每个文档的向量
【发布时间】:2021-02-15 10:08:37
【问题描述】:

我正在尝试使用 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"

我计划将这些应用到许多文档上,然后针对它的主题训练一个聚类模型来进行无监督学习和主题建模。

【问题讨论】:

标签: python word2vec word-embedding


【解决方案1】:

这是一组词向量。没有单一的规范方法可以将词向量转换为更长的文本运行向量,例如句子或文档。

您可以尝试简单地平均文本中每个单词的词向量。 (为此,您不会传递整个字符串文本,而是将其分解为单词,查找每个单词向量,然后对所有这些向量进行平均。)

计算起来既快速又简单,可以作为某些任务的基准,尤其是对极短文本的主题分析。但由于它不考虑语法/词序,并且会用所有其他词稀释所有词,因此它的性能通常优于更复杂的分析。

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

【讨论】:

    【解决方案2】:

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

    方法二: 使用 doc2vec。您可能需要为此重新训练或获取预训练的 doc2vec 模型。

    【讨论】:

      猜你喜欢
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      相关资源
      最近更新 更多