gensim word2vec:找到词汇表中的单词数量

54

在使用Python gensim训练完一个word2vec模型后,如何查找该模型词汇表中单词的数量?

5个回答

109

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

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 迁移说明 中有介绍。


3
似乎不适用于4版本。 - 001001
3
请参阅Gensim 4的迁移说明: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 - gojomo
在Gensim 4.0.0中,KeyedVector的vocab属性已被移除。现在应使用KeyedVector的.key_to_index字典、.index_to_key列表以及.get_vecattr(key, attr)和.set_vecattr(key, attr, new_val)方法来代替。 - Tom J

8

另一种获取词汇量的方法是使用嵌入矩阵本身,如下所示:

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

5

Gojomo的回答提到了Gensim 4.0.0+版本中的一个AttributeError异常。

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

len(w2v_model.wv.index_to_key)

(比len(w2v_model.wv.key_to_index)略快)


1

属性错误:在 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"] 查看数组/坐标。

希望这能帮到您...


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接