这是我正在使用的gensim版本:
Name: gensim
Version: 4.3.0
Summary: Python framework for fast Vector Space Modelling
Home-page: http://radimrehurek.com/gensim
Author: Radim Rehurek
Author-email: me@radimr
我想用Word2Vec
把句子转换成向量。那么除了infer_vector
,还有没有其他的方法可以把一个句子转换成一个向量。[使用Word2Vec
是强制性的]
当前代码:
In:clean_data[:3]
Out:[['good'],
['nice'],
['its',
'ok',
'but',
'still',
'not',
'work',
'some',
'times',
'please',
'upgrade',
'a',
'valuable',
'process']]
In:from gensim.models import Word2Vec
In:model= Word2Vec(clean_data, vector_size=100, min_count=2, sg=1)
In:model.train(clean_data,total_examples=model.corpus_count,epochs=model.epochs)
In:model.infer_vector(['its','ok','but','still','not','work','some','times','please','upgrade','a','valuable','process'])
错误:
AttributeError Traceback (most recent call last)
~AppDataLocalTemp/ipykernel_11408/92733804.py in <module>
----> 1 model.infer_vector(['its','ok','but','still','not','work','some','times','please','upgrade','a','valuable','process'])
AttributeError: 'Word2Vec' object has no attribute 'infer_vector'
.infer_vector()
仅适用于Doc2Vec
模型,其底层算法"段落向量"描述了一种学习与多词文本相关的定长向量的标准方法。Doc2Vec
类首先在批量训练期间遵循该算法,然后通过.infer_vector()
方法作为冻结训练模型的选项。
另一方面,Word2Vec
是一个仅用于学习单个单词向量的模型。作为一个算法,word2vec没有说明多词文本的向量应该是什么。
许多人选择使用多词文本的所有单个词的平均值作为文本整体的简单向量。这很快&很容易计算,但它的能力相当有限。然而,对于一些应用程序,特别是不依赖于任何语法/顺序理解的广泛主题分类,这样的文本向量可以工作-特别是作为比较其他技术的起始基线。
Gensim的KeyedVectors
类,即Word2Vec
模型如何将其学习的词向量存储在其.wv
属性中,有一个实用方法来帮助计算多个词向量的平均值(aka平均值)。它的文档在这里:
https://radimrehurek.com/gensim/models/keyedvectors.html gensim.models.keyedvectors.KeyedVectors.get_mean_vector
你可以把它和单词列表一起使用,像这样:
multiword_average_vector = model.wv.get_mean_vector([
'its','ok','but','still','not','work','some',
'times','please','upgrade','a','valuable','process'
])
请注意,默认情况下它将忽略模型中不存在的任何单词,但如果您希望它引发错误,则可以使用可选的ignore_missing=True
参数。
单独:请注意,Word2Vec
的小玩具大小的使用通常不会显示任何有用的属性&可能会误导你,让你不知道算法是如何在更大的数据集上工作的,而这正是算法最有价值的地方。您通常需要在至少数十万(如果不是数百万)个单词的语料库上进行训练,以创建至少包含数万个已知单词的词汇表(每个单词在您的训练数据中都有许多对比的实际使用示例),以便看到该算法的真实行为/价值。