【问题标题】:How I can extract matrixes WI and WO from gensim word2vec?如何从 gensim word2vec 中提取矩阵 WI 和 WO?
【发布时间】:2019-01-06 17:10:49
【问题描述】:

CBOW word2vec 方案如下所示:

如何从gensim.models.word2vec.Word2Vec 中提取矩阵 WI 和 WO? 我在 gensim w2v 模型中只找到了这些字段:

gensim.models.word2vec.Word2Vec.trainables.syn1neg

gensim.models.word2vec.Word2Vec.vw.syn1neg.vectors

我可以假设syn1neg 是WI,WO = vectors - syn1neg

为什么是这个代码

sentences = [['car', 'tree', 'chip2'], ['chip1', 'sugar']]
model = Word2Vec(sentences, min_count=1, size = 5)

只给Word2Vec.trainables.syn1neg 零元素的矩阵?

对于 30MB 数据集 Word2Vec.trainables.syn1neg 矩阵也只包含零元素,日志在这里:

gensim log

【问题讨论】:

    标签: python gensim word2vec


    【解决方案1】:

    w2v_model.wv.vectors 以前称为“syn0”,用作“投影权重”,本质上将单热词编码映射到 N 维。在您的图表中,这是 WI

    w2v_model.trainables.syn1neg 是负采样模式的隐藏到输出权重,您的图表标记为 WO

    【讨论】:

    • 谢谢!但是为什么trainables.syn1neg 只包含零个元素(我编辑我的问题)?
    • 我不确定,但是对于人为的玩具示例,很多事情都不像预期的那样工作,所以我建议打开日志记录并观察异常提示,或者使用更大的数据集。 (例如,在这样一个小例子中,每个单词占总字数的 20%——对于自然语言来说非常不典型,可能会导致所有单词都被sample 参数控制的下采样功能丢弃。)
    • 您的日志表明没有进行任何训练,如下所示:WARNING : train() called with an empty iterator (if not intended, be sure to provide a corpus that offers restartable iteration = an iterable).EPOCH - 1 : training on 0 raw words (0 effective words) took 0.0s, 0 effective words/sWARNING : EPOCH - 1 : supplied example count (0) did not equal expected count (290278)。这很可能是因为您以 sentences 提供的语料库不是正确的可重新启动的可迭代对象(多次传递所必需的)——正如记录的警告报告的那样。
    • 如果你只看一眼它们的非零值,单词向量可能“看起来很正常”,但这仅仅是因为它们被初始化为小的随机值。要真正测试它们是否已通过训练转移到有用的地方,请尝试以具有代表性的方式使用它们——例如检查源词的 most_similar() 词是否有意义,或者某种形式的最终目的。
    • 是的,restartable iterable object -- 解决了这个问题,谢谢!
    猜你喜欢
    • 2017-04-30
    • 1970-01-01
    • 2017-10-09
    • 2017-12-30
    • 2016-09-08
    • 2011-09-05
    • 2018-05-12
    • 2021-10-14
    相关资源
    最近更新 更多