搜索推荐系统评测指标

If you can’t measure it, you can’t improve it.

对待一个系统,如果无法衡量这个系统的好坏,没有响应的评测指标,就很难真正地去改进这些指标,从而达到提升系统的目的。

线下评测

假如今天开发了一个软件,如何知道用户是否喜欢这个软件呢?通常需要对这个软件进行评测。起初的方法是使用调查问卷。让用户填写设计好的调查问卷,然后统计调查问卷进行判断,评测,但是这种方法有自己的问题:问卷的设计需要一定的专业性,涉及到问卷设计的科学性问题;另一个问题在于无法保证能够获得用户的真实反馈,因为用户可能在涉及到用户隐私时或其他情况下回撒谎。即便客服了这两个问题,当调查用户量巨大时,比如100万用户,问卷的统计,数据处理相应的工作量会很大。同时,调查问卷无法重复使用。即当软件更新改版后,无法使用之前的问卷再次调查。

那么如何才能形成一组数据来帮助系统反复迭代,并且能够减少人工成本?

类似于机器学习的测试集一样,针对搜索系统而言,我们也可以设计相应的测试集来评估我们的搜索系统。

数据集准备好之后,需要确定评估指标,指示系统的表现好坏。

基于二元相关度的评测指标

什么叫“二元相关度”呢?简单来说,指针对某一个查询关键字而言,整个测试集里的每一个文档都有一个“相关”或者“不相关”的标签

定义“二元相关度”标签是很多其他重要指标的基石。一个叫“精度precision”,表明在提取了的文档中,究竟有多少是相关的(也叫作查准率);另一个叫“召回recall”,表明在所有相关的文档中,有多少被提取出来了(也叫作查全率)。

“精度”和“召回”的相关点在于,分子都是“被提取出来且相关的文档数目”;不同的是分母,一个是提取出来的文档数目,另一个是所有相关的文档数目。

“精度”和“召回”属于“鱼和熊掌不可兼得”,很难同时保持两者都达到一个很高的数值。一种解决方法是采用调和平均数,如F1-score。

需要注意的是,“精度”和“召回”两个指标都是基于“二元相关度”的,并不是“排序指标”。换句话说,这两个指标其实并不能真正评价排序系统。

排序指标,从直觉上说,关于一个关键字的排序结果,越相关的文档在排序结果中应该越靠前,反之;同时调整提取文档之间的排序也应该能体现在这个“排序指标”上;另外,关于相关度比较高的文档之间,也就是排序结果靠前的位置,文档顺序发生改变对排序指标的影响应该比不相关文档之间交换的影响更大

“精度”和“召回”这两个指标明显不满足上面的要求。一般情况下,关于搜索系统来说,“精度”和“召回”两个指标的计算是基于一个超参数K个TopK,并不是全部数据集。这里对于提取的K个文档而言,预测的相关文档之间顺序交换不影响指标的计算。因此说,“精度”和“召回”都不是排序指标。

基于多程度相关原理的评测指标

从“二元相关”出发,将相关程度进行不同程度的划分,产生了基于多程度相关原理的评测指标。比如,五分标准的相关评价体系,五元标准指的是“最相关”,“相关”,“中性/不确定”,“不相关”,“最不相关”.

基于多程度相关的一个评测指标是“折扣化的累计获得Discounted Cumulative Gain”,简称“DCG”。针对一个TopK的评测,或者说K个结果的排序结果而言,DCG的思想是:

  • 一个排序的整体相关度是和这个排序的各个位置上的相关度的某种加权: 用一个指标描述整个排序,只要排序结果不同,这个数字就有所不同;
  • 每个位置上面的“获得Gain”是和这个文档原本定义的相关度相关的,但是,根据不同的位置,要打不同的“折扣”。位置越低,折扣越大。

但是,这种方法也存在自己的问题。对于提取数量不同的两个排序结果。比如有两个搜索系统,真针对一个关键字,一个系统给出了K/2条结果,另一个系统给出了K个结果,由DCG的定义出发,DCG一定是产生K个结果的系统更好[累积性]。

所以为了解决由长度不同带来的差异性,使得搜索结果少的排序也能优于搜索结果多的系统,对DCG进行标准化,也就产生了nDCG指标。

nDCG指标。首先,对某一个查询关键字的排序,根据相关信息,来计算一组“理想排序”所对应的DCG值。然后根据之前的DCG方法计算不同的排序结果的DCG值,然后使用理想排序对应的DCG值进行归一化。

在线可控实验

之前的指标都是基于线下实验的,有没有方法来评测搜索系统的在线表现呢?

能够正确观测两个系统不同的工具就是“在线可控实验”,也叫作“在线实验”,”在线A/B实验“。

在线可控实验是建立“因果联系causal relationship”的重要工具,也可以说是唯一完全可靠的工具。这里面的基础是统计的假设检验。

具体来说,就是针对访问网站或应用的人群,进行某种划分,一般情况下是平均随机划分,一个“控制组”,一个“对照组”。控制组和对照组的唯一区别在于所面对的系统。

假设有一个搜索系统,相对其中的某个部分进行改进,我们可以保持其他部分不变,让这个希望得到改进的部分成为唯一的“独立变量independent variable”,就是在整个实验设置中的变量。我们把系统的表现当做“依赖变量dependent variable”,或者说因变量,我们假设因变量的变动来自于“独立变量”(自变量)的变动。这样就可以建立“因果联系”。

但是实际操作中会遇到很多挑战。一是如何处理因人群特性所带来的的对结果的影响;我们的两个组的划分是基础,如何保证划分两个组的同分布,保证“一模一样”,因为人群本身的性别,受教育程度会产生不同的影响;二是唯一变量无法保证。很难做到理想情况下,让系统的某个部分成为“控制组”和“对照组”中唯一的“独立变量”,即便除去了人群差异。

参考

极客时间–AI技术内参

您的支持就是我更新的最大动力!谢谢!