【问题标题】:gensim word2vec: Find number of words in vocabularygensim word2vec:查找词汇表中的单词数
【发布时间】:2016-06-06 09:09:26
【问题描述】:

使用pythongensim训练了一个word2vec模型后,如何找到模型词汇表中的单词数?

【问题讨论】:

    标签: python neural-network nlp gensim word2vec


    【解决方案1】:

    在最近的版本中,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,将键(单词)映射到它们的索引位置的普通 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 中有介绍。

    【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:

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

      对于这些版本,你可以得到词汇的长度如下:

      len(w2v_model.wv.index_to_key)

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 2015-08-15
        • 2017-07-19
        • 2021-06-26
        • 1970-01-01
        • 2019-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多