我正在尝试使用Keras预测上下文中的单词,例如从句子“我必须说这食物很美味!”中预测一个单词。我希望得到类似于以下结果:
[say the ? was tasty] -> food, meals, spaghetti, drinks
然而,我当前的问题是,我训练的网络似乎只学习了单个单词的概率,而没有学习它们在特定语境中的概率。
由于单词的频率不平衡,我认为我可以/应该在我的损失函数中应用权重 - 目前是二元交叉熵函数。
我只需将每个单词的相反概率与误差相乘即可。
def weighted_binary_crossentropy(y_true, y_pred):
return K.mean(K.binary_crossentropy(y_pred, y_true) * (1-word_weights), axis=1)
这个函数被模型用作损失函数:
model.compile(optimizer='adam', loss=weighted_binary_crossentropy)
然而,我的结果完全相同,我不确定是我的模型有问题还是我错误地使用了“loss”参数/函数。我的“weighted_binary_crossentropy()”函数是否做到了我刚刚描述的?我问这个问题是因为由于某种原因这个东西类似:word_weights),axis = 1)。