在使用Python gensim训练完一个word2vec模型后,如何查找该模型词汇表中单词的数量?
在最近的版本中,model.wv
属性保存了单词和向量,并且本身可以报告长度——它所包含的单词数。因此,如果w2v_model
是你的Word2Vec
(或Doc2Vec
或FastText
)模型,只需要执行以下操作:
vocab_len = len(w2v_model.wv)
如果你的模型只是一组原始的词向量,比如一个 KeyedVectors
实例而不是一个完整的 Word2Vec
/等模型,那么只需:
vocab_len = len(kv_model)
在 Gensim 4.0+ 中其他有用的内部对象包括 model.wv.index_to_key
,它是一个关键词在每个索引位置上的普通列表,以及 model.wv.key_to_index
,它是一个将关键词(单词)映射到它们的索引位置的普通字典。
在版本 4.0 之前,Word2Vec 模型的 wv
属性中的词汇表作为一个字典存储在 vocab
字段中,其中键是每个标记(单词)。因此,获取字典长度就像通常的 Python 一样:
len(w2v_model.wv.vocab)
在 gensim 0.13 之前的非常旧的版本中,vocab
直接出现在模型中。所以那时候你会使用 w2v_model.vocab
而不是 w2v_model.wv.vocab
。
但是如果你仍然在使用 Gensim 4.0 之前的任何版本,你应该考虑升级!有很大的内存和性能改进,调用代码需要的变化相对较小,一些重命名和移动,在 4.0 迁移说明 中有介绍。
另一种获取词汇量的方法是使用嵌入矩阵本身,如下所示:
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)
略快)
属性错误:在 Gensim 4.0.0 中,KeyedVector 的 vocab 属性已被移除。根据错误提示,我们可以使用 .key_to_index 字典、.index_to_key 列表。
model = Word2Vec(text, min_count=1)
words=model.wv.index_to_key 而不是 vocab
这里按字母顺序排列的单词数量。
a <- army,africa,agreement,a 中的单词数为 3。
model.wv["a"] 查看数组/坐标。
希望这能帮到您...
最新消息:
在创建gensim模型后,使用model.wv.key_to_index。
vocab字典变成了key_to_index,用于查找键的整数索引,或者使用get_vecattr()和set_vecattr()获取其他每个键的属性:https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4#4-vocab-dict-became-key_to_index-for-looking-up-a-keys-integer-index-or-get_vecattr-and-set_vecattr-for-other-per-key-attributes