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

问题描述

这是我的代码

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",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