如何将softmax用于word2vec?我的意思是 softmax 输出所有类的概率,总和为 1,例如[0, 0.1, 0.8, 0.1]
。但是如果我的标签是,比如[0, 1, 0, 1, 0]
(多个正确的类),那么softmax就不可能输出正确的值了?
我应该使用softmax吗?或者我错过了什么?
最佳答案
我想您正在谈论 Skip-Gram 模型(即通过中心预测上下文单词),因为 CBOW 模型预测单个中心单词,因此它假设恰好有一个正确的类别。
严格来说,如果你使用SG模型和普通的softmax损失来训练word2vec,正确的标签将是[0, 0.5, 0, 0.5, 0]
。或者,您也可以为每个中心词提供多个示例,并使用标签 [0, 1, 0, 0, 0]
和 [0, 0, 0, 1, 0]
.很难说哪一个表现更好,但标签必须是每个输入示例的有效概率分布。
然而,在实践中,普通的softmax很少被使用,因为类太多,严格分布成本太高,根本不需要(几乎所有概率始终接近于零)。相反,研究人员使用采样损失函数进行训练,该函数近似于 softmax 损失,但效率更高。以下损失函数特别受欢迎:
这些损失比softmax更复杂,但如果你使用tensorflow,all of them are implemented并且可以同样轻松地使用。
关于neural-network - 怎么可能对 word2vec 使用 softmax 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804462/