我想在keras中实现word2vec算法,这可能吗?我如何拟合模型?我应该使用自定义损失功能吗?
这可能吗?
您已经自己回答了:是的。除了word2veckeras
使用的之外gensim
,这是另一个没有额外依赖项的CBOW实现(以防万一,我不隶属于此仓库)。您可以使用它们作为示例。
我如何拟合模型?
由于训练数据是庞大的句子语料库,因此最方便的方法是model.fit_generator
,它“使模型适合由Python生成器逐批生成的数据”。生成器无限期地运行,生成(word, context, target)
CBOW(或SG)元组,但是您可以手动指定sample_per_epoch
并nb_epoch
限制训练。这样,您就可以使句子分析(标记化,单词索引表,滑动窗口等)与实际的keras模型脱钩,并且节省了大量资源。
我应该使用自定义损失功能吗?
CBOW最小化了中心词的预测分布与真实分布之间的距离,因此以最简单的形式即可categorical_crossentropy
做到。如果您实施负采样(这更为复杂,但效率更高),则损失函数将变为binary_crossentropy
。自定义丢失功能是不必要的。
对于任何对数学和概率模型的细节感兴趣的人,我强烈推荐斯坦福大学的CS224D类。这是有关word2vec,CBOW和Skip-Gram的讲义。
另一个有用的参考:pure和中的word2vec实现。numpy
c
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句