怎么可能将 softmax 用于 word2vec?

Posted

技术标签:

【中文标题】怎么可能将 softmax 用于 word2vec?【英文标题】:How's it even possible to use softmax for word2vec? 【发布时间】:2018-05-28 00:26:04 【问题描述】:

如何将 softmax 用于 word2vec?我的意思是 softmax 输出所有类的概率,总和为1,例如[0, 0.1, 0.8, 0.1]。但是如果我的标签是,例如[0, 1, 0, 1, 0](多个正确的类),那么softmax就不可能输出正确的值了?

我应该改用 softmax 吗?还是我错过了什么?

【问题讨论】:

【参考方案1】:

我想你说的是 Skip-Gram 模型(即,通过中心预测上下文词),因为 CBOW 模型预测单个中心词,所以它假设一个正确的类。

严格来说,如果你使用 SG 模型和普通的 softmax 损失来训练 word2vec,那么正确的标签应该是[0, 0.5, 0, 0.5, 0]。或者,您可以为每个中心词提供几个示例,标签为[0, 1, 0, 0, 0][0, 0, 0, 1, 0]。很难说哪个表现更好,但标签必须是每个输入示例的有效概率分布。

然而,在实践中,普通的 softmax 很少使用,因为类太多且严格分布太昂贵且根本不需要(几乎所有概率一直几乎为零)。相反,研究人员使用 sampled 损失函数进行训练,这近似于 softmax 损失,但效率更高。以下损失函数特别受欢迎:

Negative Sampling Noise-Contrastive Estimation

这些损失比 softmax 更复杂,但如果你使用的是 tensorflow,all of them are implemented 并且可以同样轻松地使用。

【讨论】:

以上是关于怎么可能将 softmax 用于 word2vec?的主要内容,如果未能解决你的问题,请参考以下文章

word2vec改进之Hierarchical Softmax

word2vec (CBOW分层softmax负采样)

word2vec----hierarchical softmax

word2vec的数学原理——基于huffuman softmax

Word2vec 理解

自用文本分类->词嵌入模型