怎么可能将 softmax 用于 word2vec?

How's it even possible to use softmax for word2vec?

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

我应该改用 softmax 吗?还是我遗漏了什么?

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

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

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

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