我正在试用谷歌的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模型。