【问题标题】:Gensim: KeyError: "word not in vocabulary"Gensim:KeyError:“单词不在词汇表中”
【发布时间】:2018-01-07 07:06:24
【问题描述】:

我有一个使用 Python 的 Gensim 库训练的 Word2vec 模型。我有一个标记化列表,如下所示。词汇量是 34,但我只给出 34 个中的几个:

b = ['let',
 'know',
 'buy',
 'someth',
 'featur',
 'mashabl',
 'might',
 'earn',
 'affili',
 'commiss',
 'fifti',
 'year',
 'ago',
 'graduat',
 '21yearold',
 'dustin',
 'hoffman',
 'pull',
 'asid',
 'given',
 'one',
 'piec',
 'unsolicit',
 'advic',
 'percent',
 'buy']

型号

model = gensim.models.Word2Vec(b,min_count=1,size=32)
print(model) 
### prints: Word2Vec(vocab=34, size=32, alpha=0.025) ####

如果我尝试通过对列表中的一个单词进行model['buy'] 来获得相似度分数,我会得到 ​​p>

KeyError:“词汇表中没有‘购买’这个词”

你们能否建议我做错了什么以及检查模型的方法是什么,该模型可进一步用于训练 PCA 或 t-sne 以可视化形成主题的相似词?谢谢你。

【问题讨论】:

    标签: python nlp gensim word2vec topic-modeling


    【解决方案1】:

    从文档中,您需要传递可迭代的句子,因此无论您传递给函数的什么,它都会将输入视为可迭代的,因此在这里您只传递单词,因此它计算整个语料库中每个字符的 word2vec 向量。

    所以为了避免这个问题,请在列表中传递单词列表。

    word2vec_model = gensim.models.Word2Vec([b],min_count=1,size=32)
    

    【讨论】:

      【解决方案2】:

      传递给gensim.models.Word2Vec 的第一个参数是一个可迭代的句子。句子本身就是一个单词列表。来自文档:

      sentences 的可迭代对象初始化模型。每个句子都是一个 将用于训练的单词列表(unicode 字符串)。

      现在,它认为列表中的每个词 b 都是一个句子,因此它对每个词中的每个 字符 执行 Word2Vec,而不是 @ 中的每个词987654325@。现在你可以这样做:

      model = gensim.models.Word2Vec(b,min_count=1,size=32)
      
      print(model['a'])
      array([  7.42487283e-03,  -5.65282721e-03,   1.28707094e-02, ... ]
      

      要使其适用于单词,只需将 b 包装在另一个列表中,以便正确解释:

      model = gensim.models.Word2Vec([b],min_count=1,size=32)
      
      print(model['buy'])
      array([-0.01331611,  0.00496594, -0.00165093, -0.01444992,  0.01393849, ... ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多