-->

AI内参_42_040_搜索系统评测有哪些基础指标

你好,我是洪亮杰。

今天我和你分享的主题是搜索系统评测有哪些基础指标。

我在之前几周的专栏文章里,主要讲解了最经典的信息检索技术和基于机器学习的排序。

学习算术以及如何对查询关键字进行理解,包括查询关键字、分类查询关键字解析以及查询关键字扩展。

这些经典的技术是二零零零年后开始流行的。

各类搜索引擎的核心技术。

在进一步介绍更多的搜索引擎技术前,我觉得有必要专门抽出一周时间来好好的看一下搜索系统的评测,以及我们经常使用的各类指标。

俗话说的好,如果你不能衡量它,你就不能改进。

它。

意思其实就是说对待一个系统,如果我们无法去衡量这个系统的好坏,没有相应的评测指标包,就很难真正的去琢磨怎么改进这些指标,从而达到提升关键字目的。

虽然我们这里是在搜索系统这个重要场景中讨论评测和指标。

但实际上我们这周要讨论的很多细节都可以应用到很多类似的场景。

比如我们后面要讨论的推荐系统、广告系统等,在这些场景中几乎就可以无缝的使用。

这周要讲的很多内容。

我先来说说线下评测,假设你今天开发了一个新软件,比如说是一个最新的手机软件。

你怎么知道你的用户是不是喜欢你的软件呢?你怎么知道你的用户是不是愿意为你的软件掏钱呢?评测的核心其实就是了解用户的喜好。

最直接的方法当然是直接询问用户来获得反馈。

例如,你可以对每一个下载了你手机软件的用户强行进行问卷调查,询问他们对待新软件的态度。

然而,我们很快就会发现,这样的方法是行不通的。

姑且不说用户是否会因为这样强行的方式产生反感,我们是不是能通过这些调查问卷获得用户的真实反馈,这本身就是一个问题。

这里面涉及到调查问卷设计的科学性问题,即便这些调查问卷都能够完整准确的反映出用户对手机软件的看法,真正实施起来,也会面临种种困难。

如果这款手机软件的用户数量有百万甚至千万,那我们就要进行如此大规模的问卷调查,还要处理调查后的数据。

显然,这样做的工作量非常大,而这些调查问卷是没法反复使用的。

因为下一个版本的软件更新后,用户的态度就会发生改变,这样的方式就没法系统的来帮助软件迭代。

那么,如何才能形成一组数据来帮助系统反复迭代,并且还能够减少人工成本?这就成了一个核心问题。

在信息检索系统开发的早年,研究人员和工程师们就意识到了这个核心问题的重要性。

英国人塞利尔克莱温顿可以算是最早开发线下测试集的计算机科学家塞利尔生于一九一四年,在英国的布里斯托图书馆工作了很长时间。

从一九五零年开始,塞利尔就致力于开发信息检索系统,以提高图书馆查询的效率。

一九五三年,他尝试建立了一个小型的测试数据集,用于检测图书管理员查找文档的快慢。

这个工作最早发表于一九五五年的一篇论文,你可以点击文稿查看文末的参考文献。

一这之后呢,英美的一些早期信息检索系统的研发都开始顺应这个思路,那就是为了比较多个系统。

首先构造一个线下的测试数据集,然后利用这个测试集,对现有的系统反复进行改进和提升。

如果你想对早期测试集的构造以及信息有所了解,建议阅读文末的参考文献。

二、那么当时构造的这些测试数据集有些什么特点呢?这些测试数据集都会包含一个查询关键字集合,这个集合包含了几十到几百不等的查询关键字。

一方面,这些关键字的选取大多来自于经验,另一方面从塞利尔就开始认识到,需要保证有一些信息一定能够通过这些关键字来找到。

其实这里就是在测试我们后面要讲的召回。

在有了这些查询关键字以后,这些测试数据集往往有几百到几千不等的文档。

这些文档中的某一部分研究人员在构造数据集的时候就知道了会包含所对应的查询关键字需要的信息。

也就是我们后面要说的相关文档,你可以看到几十到几百的查询关键字以及几千个文档。

很明显不能代表所有可能使用系统的用户的行为。

你甚至可以说,这都无法代表绝大多数用户的行为。

然而,这种测试集的好处是,查询关键字和文档本身是和要测试的系统无关的。

也就是说,今天我们要测试系统a还是明天要测试系统b都可以反复利用。

同样一组测试数据集这样做的好处。

相比于我们之前提到的问卷调查是显而易见的。

另外我需要强调的是,用户这个概念在测试数据集中被抽象出去了当我们在讨论文档。

相对于某个查询关键字的相关度时,我们假定这种相关度是恒定的,是对于所有的用户都适用的。

因此,究竟是哪位用户在使用这个系统并不重要,只要研发的系统能够在这些标准化的查询关键字和文档的集合表现优异。

我们就相信这个系统能够满足所有用户的需要。

因为测试数据集并不是用户与产品交互产生的真实回归结果。

所以我们往往又把测试数据集叫做线下评测数据。

下面我来介绍基于二元相关度的评测指标。

从线下收集评测数据以后,我们最容易做到的就是利用二元相关度所定义的一系列评测指标,来衡量手中系统的好坏。

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

在这样的情情况不不在百百分比的相关。

而每个文档针对不同的关键字有不同的相关信息,假定某个系统针对某个关键字从测试数据集中提取一定量的文档,而不是返回所有文档。

我们就可以根据这个提取的文档子集来定义一系列的指标。

有两个定义,在二元相关度上的指标就成了很多其他重要指标的基石。

一个叫精度。

也就是说,在提取了的文档中,究竟有多少是相关的,另一个叫召回。

也就是说,在所有相关关文档中有多少是提取出来的。

那么精度和召回的相同点在于分子都是即被提取出来了又相关的文档数目。

这两个定标所不同的则是它们的分母。

精度的分母是所有提取了的文档数目,而召回的分母则是所有相关的文档数目。

如果我们返回所有的文档,召回是一精度,则是相关文档在全集中的比例。

因此我们注意到这两个指标其实都假定精度的文档数目,相比于全集而言是相对比较小的词器。

很快啊,大家从实践中就体会到,精度和召回就像是鱼与熊掌不可兼得。

一个系统很难做到精度和召回都能够达到很高的数值。

也就是说我们往往需要在这两个指标之间做一些平衡。

于是,研究人员开始寻找用一个数字来表达精度和召回的平均水平。

来自英国的学者范里杰斯伯格最早在论文中采用了调和平均数,来计算精度和召回的平均这个方法被后人称为f值,并且一直沿用至今。

这里对精度和召回还需要注意一点,因为这两个指标都是基于二元相关度的,因此这两个指标都不是排序指标。

换句话说,这两个指标其实并不能真正评价排序系统。

比如我们针对某个关键字提取十个文档,如果有三个相关文档被取出来,不管是精度还是召回,都无法分辨。

这三个文档在最后序列中的位置是头三位还是后面的三位呢?很遗憾,精度和召回都无法解决这个问题。

二元相关度的这个问题,也就指引研究人员去开发,真正能对排序进行评估的指标。

今天我为你讲了现代搜索技术中一个非常重要的环节,那就是如何评价我们构建的系统。

我们详细讲解了线下测试的由来以及这样的测试。

相比于调查问卷的优势,一起来回顾一下要点。

第一,简要介绍了可重复使用的线下测试集的历史,以及这样的测试集都有什么特点与局限。

第二,详细介绍了两个非常流行和重要的基于二元相关度的评测指标,那就是精度和召回。

最后给你留一个思考题,我们讲了排序的好坏,不能简单的从精度和召回的数值看出。

那能不能动一些手脚呢?如果我们就依赖二元相关度,有没有什么方法来看排序的好坏呢?欢迎你给我留言,和我一起讨论。