ali*_*ali 3 evaluation information-retrieval ranking neural-network loss-function
我正在研究一个名为DPR的信息检索模型,它基本上是一个神经网络(2 个 BERT),根据给定的查询对文档进行排名。目前,该模型以二进制方式(文档是否相关)进行训练,并使用负对数似然(NLL)损失。我想改变这种二元行为并创建一个可以处理分级相关性的模型(例如 3 个等级:相关、某种程度上相关、不相关)。我必须更改损失函数,因为目前我只能为每个查询分配 1 个正目标(DPR 使用 pytorch NLLLoss),而这不是我需要的。
我想知道是否可以使用像 NDCG(标准化贴现累积增益)这样的评估指标来计算损失。我的意思是,损失函数的全部意义在于告诉我们我们的预测有多偏离,而 NDCG 也在做同样的事情。
那么,我可以使用这样的指标来代替损失函数并进行一些修改吗?对于 NDCG,我认为从 1 (1 - NDCG_score) 中减去结果可能是一个很好的损失函数。真的吗?
致以最诚挚的问候,阿里。
是的,这是可能的。您可能希望应用列表学习来排序方法,而不是更标准的成对损失函数。
在成对损失中,网络提供了示例对(rel、non-rel),并且真实标签是二进制标签(如果该对中的第一个相关,则为 1,否则为 0)。
然而,在列表学习方法中,在训练期间,您将提供一个列表而不是一对,并且真实值(仍然是二进制)将指示该排列是否确实是最佳排列,例如最大化 nDCG 的排列。在列表方法中,排名目标因此转变为排列的分类。
有关更多详细信息,请参阅本文。
显然,网络不是将特征作为输入,而是采用查询的 BERT 向量和列表中的文档,类似于 ColBERT。与 ColBERT 不同,ColBERT 需要从 2 个文档输入向量(成对训练),而对于列表训练,您需要从 5 个文档输入向量。