【发布时间】:2016-06-06 09:09:26
【问题描述】:
使用pythongensim训练了一个word2vec模型后,如何找到模型词汇表中的单词数?
【问题讨论】:
标签: python neural-network nlp gensim word2vec
使用pythongensim训练了一个word2vec模型后,如何找到模型词汇表中的单词数?
【问题讨论】:
标签: python neural-network nlp gensim word2vec
在最近的版本中,model.wv 属性包含单词和向量,并且可以自己报告长度 - 它包含的单词数。因此,如果w2v_model 是您的Word2Vec(或Doc2Vec 或FastText)模型,则只需这样做:
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,将键(单词)映射到它们的索引位置的普通 dict。
在 4.0 之前的版本中,词汇表位于 Word2Vec 模型的 wv 属性的 vocab 字段中,作为字典,键是每个标记(单词)。所以这只是获取字典长度的常用 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))
【讨论】: