TypeError:“Word2Vec”对象不可下标

问题描述 投票:0回答:4

我正在尝试构建 Word2vec 模型,但是当我尝试重塑标记向量时,出现此错误。有什么想法吗?

wordvec_arrays = np.zeros((len(tokenized_tweet), 100)) 
for i in range(len(tokenized_tweet)):
    wordvec_arrays[i,:] = word_vector(tokenized_tweet[i], 100)
wordvec_df = pd.DataFrame(wordvec_arrays) 
wordvec_df.shape

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-101-71156bf1c4a3> in <module>
      1 wordvec_arrays = np.zeros((len(tokenized_tweet), 100))
      2 for i in range(len(tokenized_tweet)):
----> 3     wordvec_arrays[i,:] = word_vector(tokenized_tweet[i], 100)
      4 wordvec_df = pd.DataFrame(wordvec_arrays)
      5 wordvec_df.shape

<ipython-input-100-e3a82e60af93> in word_vector(tokens, size)
      4     for word in tokens:
      5         try:
----> 6             vec += model_w2v[word].reshape((1, size))
      7             count += 1.
      8         except KeyError: # handling the case where the token is not in vocabulary

TypeError: 'Word2Vec' object is not subscriptable
python-3.x jupyter-notebook gensim word2vec
4个回答
12
投票

从 Gensim 4.0 及更高版本开始,

Word2Vec
模型不支持下标索引访问(
['...']') to individual words. (Previous versions would display a deprecation warning, 
方法将在 4.0.0 中删除,请使用 self.wv.getitem() 代替`,对于此类使用。)

因此,当您想要访问特定单词时,可以通过

Word2Vec
模型的
.wv
属性来实现,该属性仅包含单词向量。因此,您的(未显示)
word_vector()
函数应将错误堆栈中突出显示的行更改为:

            vec += model_w2v.wv[word].reshape((1, size))

2
投票

自从 Gensim > 4.0 我尝试用以下方式存储单词:

vocab = w2v_model.wv.key_to_index.keys()

然后迭代,但是方法变了:

for word in vocab:
    w2v_model.wv.get_index(word)
    ...

最后我毫无问题地创建了单词向量矩阵..


0
投票

对于 Gensim > 4.0 尝试

mymodel.wv.get_vector(word)
从单词中获取向量


-1
投票

使用以下方法:

model.wv.get_item() 
© www.soinside.com 2019 - 2024. All rights reserved.