作者 | 上杉翔二
悠闲会 · 信息检索
整理 | NewBeeNLP
今天整理一篇来自TOIS 21'的 First-stage Retrieval 第一阶段检索综述的文章。第一阶段检索即是国内一般成为召回的阶段recall stage,也有人称为ranking stage或者search stage,这篇综述文章内统一称为“第一阶段检索”。
paper:Semantic Models for the First-stage Retrieval: A Comprehensive Review
https://arxiv.org/pdf/2103.04831.pdf
code:https://github.com/caiyinqiong/Semantic-Retrieval-Models
现代的信息检索系统一般都采用「多阶段的搜索架构」来平衡系统对于效率和性能的需求,如下图1所示,文档库--第一阶段检索(召回)--多个重排(包括重排精排混排等)--呈现结果。这里的第一阶段检索的最核心的要求是快速从大规模文档库中返回尽可能少的相关候选文档,然后再交给重排精排来进行更复杂的排序。
由于交给重排阶段的文档相对来说数量少,所以模型可以做的很复杂,现在研究者们的主要精力也都放在如何提升重排精度,模型是做的越来越精巧,越来越大。而这种模型又无法被直接应用于召回去处理具有大量候选文档的高吞吐量查询。
相反在第一阶段检索这里的做法,长期以来一直由基于词项的传统模型所主导如BM25(术语匹配+TF-IDF权重)。然而这种基于词项的模型存在一些明显的缺陷:
由于词独立性假设,容易遭受Query和Document之间的词汇不匹配问题。特别是遇到短、泛的查询。
由于忽略词序信息,无法很好地捕捉文档的连续性语义。特别是多个连续单词表示的概念不能被正确描述,查询和文档之间匹配的连续或有序的更强相关性不能被很好地反映。
由于这些限制,基于词项的检索模型可能会成为整个排序系统的瓶颈,即一些相关文档从一开始就进入不了重排序,更不用说被展示了。为了解决这个问题,一些早期的语义检索模型就开始了改进和优化,主要有以下几种:
查询扩展
为了解决查询query和文档document之间的不匹配问题,查询扩展技术使用从外部资源来扩展原始查询,以丰富查询表示。通过这种扩展之后的查询,在检索过程中可以很自然的考虑到更多的文档,得到更好的召回效果。扩展的方法主要有:全局方法(同义词搜索)和局部方法(伪相关性反馈(PRF),即根据原始查询检索到的排名最高的文档来调整查询,缺点是比较容易出现漂移)。
文档扩展
以查询扩展的方法对语料库中的文档进行扩展(如使用原始文档作为对集合的查询,并选择10个最相关的文档作为原始文档的扩展文档),然后再像以前一样对这些丰富的文档进行倒排索引和多阶段搜索。缺点是每次扩展技术发生变化时,语料库都需要重新索引太麻烦。
词项依赖模型
依赖关系模型试图通过将词依赖关系合并到表示函数中来解决词序的问题。方法主要有如在倒排索引中扩展字典、用马尔可夫随机场(MRF)来构建词依赖关系。虽然这些方法能够捕获语法和语义,但它们的上下文“理解”能力仍然非常有限。
主题模型
关注单词之间的语义关系,通常将单词的共现关系建模,以发现文本中的潜在主题,并通过它们的主题表示来匹配查询和文档。主题建模分非概率主题模型(如LSI,NMF),和概率主题模型(LDA)。缺点是1主题是无监督难受控;2主题可能和文档是异质的(如语言语法不同);3主题模型将文档表示为紧凑的向量,在词级上失去更详细的匹配信号。
翻译模型
主要用来解决词汇表不匹配的问题,统计机器翻译(SMT)通过将查询视为一种语言的文本,学习从查询到相关相关文档的翻译概率来实现IR。此外统计翻译模型也可以被应用于查询扩展。但由于SMT模型的数据稀疏性,模型难以训练。
深度语义召回
以上的一些早期方法都可以在一定程度上改进传统的词袋表示,在符号空间中用高维稀疏向量表示文本,以便很容易地与倒排索引集成以支持有效的检索。但这些方法总是依赖手工提取的特征来构建表示函数,只能捕捉较浅的语法和语义信息。因此随着深度学习的火热,一些主要的语义召回技术先后出现,主要可以分为三类。
稀疏检索方法(sparse retrieval methods)
使用上下文语义重新评估词项权重或将文本映射到“隐词项”空间来改进传统的基于词项的方法。一般有两种方法,一是神经加权方案( Neural Weighting Schemes):仍然在符号空间中对查询和文档进行编码,但使用神经模型来改进词加权方案,比如基于局部或全局上下文embedding来直接预测项权重。另一种是稀疏表示学习(Sparse Representation Learning):直接学习查询和文档的潜在空间的稀疏表示,如计算n-gram再转到高维稀疏空间以压缩信息并学习数据的低维流形,代表方法如局部敏感哈希(LSH)。
稠密检索方法(dense retrieval methods)
稠密检索方法采用双编码器结构来独立地学习查询和文档的低维稠密向量表示,旨在捕获输入文本的全局语义。一般的架构如上图2,查询和文档的双编码器架构以学习嵌入,然后计算相似度得到相关性得分。所以重点一般集中在如何设计合理的网络架构,可分为词级(term-level representation learning) 和文档级( document-level representation learning)的做法。区别如下图。此处使用的模型从TF-IDF一直到Transformer,BERT多变体等等都可以。在支持在线检索服务的时候,这类方法通常需要借助近似最近邻算法对学习到的表示进行索引和检索。
混合检索方法(hybrid retrieval methods)
混合检索方法为查询和文档定义多个表示函数,同时获取它们的稀疏表示和稠密表示进行相关性计算。主要的考虑来自于:一方面,稀疏检索方法以单词或“潜在单词”为索引单位,通过每个单元之间的硬匹配计算分数,保持了很强的区分能力,因此它们可以识别出精确匹配的信号。另一方面,稠密的检索方法学习连续嵌入来编码更好的语义信息,但详细的低级特征一般不会考虑。因此结合两者的混合模型会比较适合,流程如下图,拿到两者的结果后进行merge再返回给用户。
然后对于神经语义检索模型学习的关键是定义一个好的:损失函数和负采样策略。损失函数一般使用negative log likelihood loss或者hinge loss,当然BPR loss或者InfoNCE在某些任务上也表现很好。而由于模型训练过程中,训练数据集一般只有正例,而负例没有明确的定义,所以负采样策略在检索技术中是十分重要的。一般来说负抽样策略可分为三类:
随机负采样(Random Negative Sampling)。从整个语料库或batch中随机采样。缺点是随机的负样本通常太容易区分,因此挖掘hard样本是很重要的。
静态难样本(Static Hard Negative Sampling)。从trained的检索模型结果中(如BM25)随机采样以获得hard负样本。缺点是这种方法并不是真正的负样本,因为在召回阶段的目标是找到更多的相关文档,如果只使用来自BM25的结果召回的文档会非常相似,测试时会出现严重的不匹配。
动态难样本(Dynamic Hard Negative Sampling)。从检索模型本身预测的排名最高的不相关文档中随机采样。缺点是在大语料库中动态地对所有候选文档进行评分通常是不切实际的。
在实践中,以上几种随机采样方法并不冲突,而是会混合进行使用。
一起交流
想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)
- END -