我在使用 word2vec 时遇到了问题。可能是版本问题,不知道怎么解决?

I had a problem using word2vec. Maybe it's a version problem, but I don't know how to solve it ?

这是我的代码

w2v = Word2Vec(vector_size=150,min_count = 10)
w2v.build_vocab(x_train)
w2v.train(x_train)

def average_vec(text):
    vec = np.zeros(300).reshape((1,300))
    for word in text:
        try:
            vec += w2v[word].reshape((1,300))
        except KeyError:
            continue
        return vec

这会引发以下错误:

Traceback (most recent call last):   File
"C:/Users/machao/Desktop/svm-master/word2vec.py", line 27, in <module>
    train_vec = np.concatenate([average_vec(z) for z in x_train])   File "C:/Users/machao/Desktop/svm-master/word2vec.py", line 27, in
<listcomp>
    train_vec = np.concatenate([average_vec(z) for z in x_train])   File "C:/Users/machao/Desktop/svm-master/word2vec.py", line 21, in
average_vec
    vec += w2v[word] TypeError: 'Word2Vec' object is not subscriptable

Process finished with exit code 1

在 Gensim 4.0 及更高版本中,Word2Vec 模型对象本身 – w2v 在您的代码中 – 不再支持通过查找词键直接访问单个向量。

相反,您应该在其 .wv 属性 中使用辅助对象 - 类型为 KeyedVectors 的对象,可用于单独处理词向量集。 (这样的分离功能在您只需要词向量的情况下会有所帮助,或者只有来自其他人的词向量,而不是整个模型的开销。)

因此,在任何可能使用 w2v[word] 的地方,请尝试使用 w2v.wv[word]

或者,更像下面这样命名,并保存对词向量的不同变量引用:

w2v_model = Word2Vec(...)
word_vectors = w2v_model.wv
print(word_vectors[word])

有关将您自己的旧代码或在线示例改编为 Gensim 4.0 的其他技巧,以下项目 wiki 页面可能会有所帮助:

Migrating from Gensim 3.x to 4