在 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】:

这可能吗?

你自己已经回答过了:是的。除了使用gensimword2veckeras 之外,这里还有另一个CBOW implementation,它没有额外的依赖项(以防万一,我不隶属于这个repo)。您可以将它们用作示例。

如何拟合模型?

由于训练数据是大量的句子语料库,最方便的方法是model.fit_generator,它“在 Python 生成器逐批生成的数据上拟合模型”。生成器无限期地运行产生(word, context, target) CBOW(或SG)元组,但您手动指定sample_per_epochnb_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 纯 numpyc

【讨论】:

这是一个老问题,但感谢您的详细回答!

以上是关于在 Keras 中实现 word2vec的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keras 中实现 Salt&Pepper 层?

在 Keras 中实现批次相关的损失

在 Keras 中实现 word2vec

在 keras 中实现三元组损失的准确性

用条件在keras中实现自定义丢失函数

如何在 keras 模型中实现汉明损失作为自定义指标