有很多的检索模型,都使用这样的策略:首先使用一种简单的检索模型(比如 LM, BM25 和 TF-IDF)找出最接近 query 的前 N 个结果(比如 top 100/500/1000),然后再使用自己的模型重新对这些结果打分并排序(rerank)。
read more...
这些模型可以分成两类:对 N 不敏感的和对 N 敏感的。
随着 N 的增大,对 N 不敏感的模型的性能整体上只会在一个很小的区间内波动,这称为它们具有“收敛性”。对 N 敏感的模型的性能一般和 N 的取值是负相关的,也许 N=100 的时候性能很好,但是当 N 增大数倍之后结果就变得惨不忍睹。
为什么会有这种区别呢?这只取决于这些模型是否是词汇空间上良好定义的测度。正确的测度会因为大数定律的限制而变得稳定,不标准的度量会因为有偏的估计而失常。Batch normalization 为什么有用呢?也许其实和什么“独立同分布假设”之类关系不大,只是为一堆杂乱无章的东西(batch)强行定义了一个良好的概率测度(normalization)。
所以想要检验没有理论基础的模型,最好不要用 two-stage strategy,而要浪费大把时间直接 rank the whole collection。不然文章发出来,最多也只是有人引用、没人敢用。