在 Keras 中实现 word2vec
Posted
技术标签:
【中文标题】在 Keras 中实现 word2vec【英文标题】:Implement word2vec in Keras 【发布时间】:2017-03-07 17:55:23 【问题描述】:我想在keras中实现word2vec算法,这可能吗? 如何拟合模型?我应该使用自定义损失函数吗?
【问题讨论】:
我在问之前找到了这个,但它太旧而且太乱了。这是一个较新的实现:github.com/SimonPavlik/word2vec-keras-in-gensim/blob/keras106/… 【参考方案1】:这可能吗?
你自己已经回答过了:是的。除了使用gensim
的word2veckeras
之外,这里还有另一个CBOW implementation,它没有额外的依赖项(以防万一,我不隶属于这个repo)。您可以将它们用作示例。
如何拟合模型?
由于训练数据是大量的句子语料库,最方便的方法是model.fit_generator
,它“在 Python 生成器逐批生成的数据上拟合模型”。生成器无限期地运行产生(word, context, target)
CBOW(或SG)元组,但您手动指定sample_per_epoch
和nb_epoch
以限制训练。这样你就可以解耦句子分析(分词、词索引表、滑动窗口等)和实际的 keras 模型,加上save a lot of resources。
我应该使用自定义损失函数吗?
CBOW 最小化了中心词的预测分布和真实分布之间的距离,所以以最简单的形式categorical_crossentropy
会做到这一点。
如果你实现negative sampling,这有点复杂,但效率更高,损失函数将变为binary_crossentropy
。不需要自定义损失函数。
对于任何对数学和概率模型细节感兴趣的人,我强烈推荐斯坦福的 CS224D 课程。 Here is the lecture notes 关于 word2vec、CBOW 和 Skip-Gram。
另一个有用的参考:word2vec implementation 纯 numpy
和 c
。
【讨论】:
这是一个老问题,但感谢您的详细回答!以上是关于在 Keras 中实现 word2vec的主要内容,如果未能解决你的问题,请参考以下文章