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