怎么可能将 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----hierarchical softmax