gensim word2vec:查找词汇表中的单词数

gensim word2vec: Find number of words in vocabulary

使用 python gensim 训练 word2vec 模型后,如何找到模型词汇表中的单词数?

在最近的版本中,model.wv 属性 包含单词和向量,并且本身可以报告长度 - 它包含的单词数。因此,如果 w2v_model 是您的 Word2Vec(或 Doc2VecFastText)模型,只需执行以下操作就足够了:

vocab_len = len(w2v_model.wv)

如果您的模型只是一组原始词向量,例如 KeyedVectors 实例而不是完整的 Word2Vec/etc 模型,它只是:

vocab_len = len(kv_model)

Gensim 4.0+ 中其他有用的内部结构包括 model.wv.index_to_key,每个索引位置的键(词)的简单列表,以及 model.wv.key_to_index,一个简单的字典映射键(词)到它们的索引位置。

在pre-4.0版本中,词汇在Word2Vec模型的wv属性的vocab字段中,作为字典,key是每个token(单词) .所以这只是通常的 Python 来获取字典的长度:

len(w2v_model.wv.vocab)

在 0.13 之前的非常古老的 gensim 版本中 vocab 直接出现在模型上。所以回到那时你会使用 w2v_model.vocab 而不是 w2v_model.wv.vocab.

但是如果你还在使用 Gensim 4.0 之前的任何东西,你一定要升级!有很大的内存和性能改进,并且调用代码所需的更改相对较小 – 一些重命名和移动,涵盖在 4.0 Migration Notes.

另一种获取词汇表大小的方法是从嵌入矩阵本身,如:

In [33]: from gensim.models import Word2Vec

# load the pretrained model
In [34]: model = Word2Vec.load(pretrained_model)

# get the shape of embedding matrix    
In [35]: model.wv.vectors.shape
Out[35]: (662109, 300)

# `vocabulary_size` is just the number of rows (i.e. axis 0)
In [36]: model.wv.vectors.shape[0]
Out[36]: 662109

Gojomo 的回答对 Gensim 4.0.0+ 提出了 AttributeError

对于这些版本,您可以通过以下方式获取词汇表的长度:

len(w2v_model.wv.index_to_key)

(略快于:len(w2v_model.wv.key_to_index)