我正在研究一个名为DPR的信息检索模型,它基本上是一个神经网络(2 BERTs),给文档排序,给出一个查询。目前,该模型采用二进制方式(文档是否相关)进行训练,并使用负对数似然(NLL)损失。我想要改变这种二元行为,并创建一个模型,可以处理分级关联(就像3个等级:相关,不知何故相关,不相关)。我必须更改丢失函数,因为目前,我只能为每个查询分配一个正目标(DPR使用pytorch ),这不是我所需要的。
我想知道是否可以使用NDCG这样的评估指标来计算损失。我的意思是,损失函数的全部意义是告诉我们的预测结果如何,NDCG也在做同样的事情。
那么,我可以使用这样的度量来代替损失函数,但需要做一些修改吗?对于NDCG,我认为从1 (1 - NDCG_score)中减去结果可能是一个很好的损失函数。这是真的吗?
致以最良好的问候阿里。
发布于 2021-08-02 12:34:29
是的,这是可能的。您可能希望应用列表式学习排序方法,而不是更标准的成对丢失函数。
在成对丢失时,网络提供了示例对(rel,non),而接地真相标签是二进制的(如果第一对中的第一个相关,则为1,否则为0)。
然而,在列表学习方法中,在训练期间,您将提供一个列表而不是一对,而基础真值(仍然是二进制值)将指示这个置换是否确实是最佳的,例如最大化nDCG的置换。在列表方法中,将排序目标转化为排列的分类。
有关更多细节,请参阅此纸。
显然,网络不是以功能作为输入,而是使用查询的伯特向量和列表中的文档,类似于ColBERT。与ColBERT不同的是,您需要从两个文档中输入向量(成对训练),为了进行列表式培训,您需要使用来自5个文档的向量。
https://stackoverflow.com/questions/68611032
复制相似问题