如何使用Google新闻Word2Vec获取每个文档的载体

问题描述

我正在试用Google的word2vec预训练模型来获取单词嵌入。我可以在代码中加载模型,并且可以看到我得到了一个单词的300维表示。这是代码-

hash join

这给了我下面的输出-

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)

这可行,但是我有兴趣获得整个文档的矢量表示,而不仅仅是一个单词。如何使用word2vec模型来做到这一点?

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

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

解决方法

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

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

,

那是一组词向量。没有任何一种规范的方法可以将单词向量转换为更长的文本(例如句子或文档)的向量。

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

这是快速而简单的计算,并且可以很好地用作某些任务的基线,尤其是对非常短的文本的主题分析。但是,由于它不考虑语法/单词顺序,并且将所有其他单词都稀释掉,因此通常比更复杂的分析要好。

还请注意:这套词向量是Google于2013年左右根据新闻报道计算得出的。它会错过自那时以来出现的单词和词义,并且其向量将通过新闻文章的撰写方式来进行修饰-与其他语言领域大不相同。如果您有足够的数据,则在自己域的文本上训练自己的单词向量可能会在单词覆盖率和向量相关性方面胜过它们。