Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

11.2 信息检索系统的评估

我们使用一直以来采用的准确率与召回率指标衡量排序检索系统的性能。假设 IR 系统返回的每篇文档对我们的目的而言要么相关,要么不相关。准确率(precision)是返回文档中相关文档所占的比例,召回率(recall)是全部相关文档中被返回的比例。更正式地说,假设系统针对某项信息请求返回 T 篇经过排序的文档,其中子集 R 是相关文档,与 R 不相交的子集 N 是其余不相关文档,而整个集合中共有 U 篇文档与该请求相关,则准确率与召回率定义为:

Precision=RTRecall=RU(11.13)\text{Precision} = \frac {| R |}{| T |} \quad \text{Recall}= \frac {| R |}{| U |}\tag{11.13}

遗憾的是,这些指标无法充分衡量一个会对返回文档进行排序的系统。如果要比较两个排序检索系统的性能,我们需要一种偏好“把相关文档排得更靠前”的系统的指标。因此,必须调整准确率与召回率,使其能够反映系统在排名中把相关文档置于前列的表现。

来看一个例子。假设有一个用户查询,我们从包含 25 篇文档的集合中检索出一组文档,其中有 9 篇与该查询相关。图 11.7 的表格列出了排序后的 25 篇文档,“判断”列表示文档是否相关。

接下来的两列给出了针对特定查询沿排序文档列表逐项向下查看时计算的逐排名准确率与召回率。某个排名处的准确率,是截至该位置所见文档中相关文档的比例;召回率则是截至同一位置找到的相关文档占全部相关文档的比例。更正式地说,在排名 kk 处,precisionk\mathrm{precision}_krecallk\mathrm{recall}_k 可定义为:

Precisionk= relevant documents in top kkRecallk= relevant documents in top k9(11.14)\begin{aligned} \text {Precision} _ {k} &= \dfrac {\left| \text { relevant documents in top } k \right|}{k} \\ \text {Recall} _ {k} &= \dfrac {\left| \text { relevant documents in top } k \right|}{9} \end{aligned}\tag{11.14}
排名判断逐排名准确率逐排名召回率
1R1.0.11
2N.50.11
3R.66.22
4N.50.22
5R.60.33
6R.66.44
7N.57.44
8R.63.55
9N.55.55
10N.50.55
11R.55.66
12N.50.66
13N.46.66
14N.43.66
15R.47.77
16N.44.77
17N.41.77
18R.44.88
19N.42.88
20N.40.88
21N.38.88
22N.36.88
23N.35.88
24N.33.88
25R.361.0

图 11.7 沿排序文档列表逐项向下查看时计算的逐排名准确率与召回率(假设集合中有 9 篇相关文档)。

图 11.8 表 11.7 中数据的准确率—召回率曲线。

注意,召回率单调不减:遇到相关文档时召回率上升,遇到不相关文档时保持不变。准确率则会上下波动:找到相关文档时上升,否则下降。最常见的准确率与召回率可视化方法,是绘制以召回率为横轴、准确率为纵轴的准确率—召回率曲线,如图 11.8 对表 11.7 数据所作的曲线。

图 11.8 只显示了单个查询的取值。但我们需要以能够比较不同系统的方式,合并所有查询的取值。一种方法是在 11 个固定召回率水平(从 0 到 100,步长为 10)上绘制平均准确率。由于我们不太可能恰好在这些水平上拥有数据点,因此要根据已有数据点,为这 11 个召回率取值计算插值准确率。具体做法是:在不低于当前待计算召回率的所有召回率水平中,选择达到的最高准确率。即:

IntPrecision(r)=maxi>=rPrecision(i)(11.15)\operatorname{IntPrecision} (r) = \max _ {i > = r} \operatorname{Precision} (i)\tag{11.15}

这种插值方案不仅允许我们对一组查询的性能求平均,还有助于平滑原始数据中不规则的准确率取值。它通过把更高召回率水平上达到的最大准确率赋给当前测量点,给予系统较宽松的评价。图 11.9、11.10 展示了本例由此得到的插值数据点。

插值准确率召回率
1.00.0
1.0.10
.66.20
.66.30
.66.40
.63.50
.55.60
.47.70
.44.80
.36.90
.361.0

图 11.9 根据图 11.7 得到的插值数据点。

图 11.10 11 点插值准确率—召回率曲线。对每个查询,在 11 个标准召回率水平上的准确率,取任意更高召回率水平上的最大值进行插值。图中还显示了原始测量得到的准确率—召回率数据点。

有了图 11.10 这样的曲线,就可以通过比较曲线来比较两个系统或两种方法。显然,在所有召回率取值上准确率都较高的曲线更好。不过,这些曲线也能揭示系统的整体行为:左侧准确率较高的系统可能更偏重准确率而非召回率;更注重召回率的系统,则会在较高召回率水平(右侧)表现得更高。

评估排序检索的第二种方法是平均准确率均值(mean average precision, MAP),它提供了一个可以比较不同系统或方法的单一指标。使用该方法时,我们仍沿排序列表逐项向下查看,但只在遇到相关项的位置记录准确率(例如图 11.7 的排名 1、3、5、6,而不记录排名 2、4)。对于单个查询,我们在返回集合中(截至某个固定截断点)对这些准确率测量值求平均。更正式地说,若 RrR_r 是排名 r 或更高位置上的相关文档集合,则单个查询的平均准确率(average precision, AP)为:

AP=1RrdRrPrecisionr(d)(11.16)\mathrm{AP} = \frac {1}{| R _ {r} |} \sum_ {d \in R _ {r}} \text {Precision} _ {r} (d)\tag{11.16}

其中,Precisionr(d)\mathrm{Precision}_r(d) 是在找到文档 d 的排名位置测得的准确率。对于查询集合 Q,再对这些平均值求平均,得到最终的 MAP 指标:

MAP=1QqQAP(q)(11.17)\mathrm{MAP} = \frac {1}{| Q |} \sum_ {q \in Q} \mathrm{AP} (q)\tag{11.17}

图 11.7 中单个查询的 MAP(因而也就是 AP)为 0.6。