详解预训练模型在信息检索第一阶段的应用
![详解预训练模型在信息检索第一阶段的应用](https://static001.geekbang.org/infoq/06/06a68c914a61111537bc981b8aca8889.png)
导读:近年来,预训练模型在自然语言处理的不同任务中都取得了极大的成功,在信息检索中也进步不小。近期,我们邀请到了中科院的范意兴博士现场分享,内容聚焦预训练模型在信息检索中第一阶段检索(召回阶段)的应用,并对最近几年的相关研究进行系统的梳理和回顾。
全文 6110 字,预计阅读时间 21 分钟。
一、信息检索的发展过程
1、信息检索三个层次的视角
1)从基础问题的角度。查询与文档的相关性度量是信息检索的核心问题,重点关注检索结果的准确度,但相关性目前仍无明确定义,是与场景、需求和认知有关的一个概念。
2)从检索框架的角度,需要从大量的文档集合里快速返回相关的文档并排序,除了检索结果的正确性,还要考虑检索的效率。
3)从系统的角度,不仅要解决排序的问题,还要解决用户意图模糊、用户输入有错、文档结构异质等问题。
![](https://static001.geekbang.org/infoq/bf/bf0c3b2781f5c5e4d0004235d3cdedf2.png)
2、信息检索的发展过程
1) 相关性度量
相关性度量的建模范式,经历了传统检索模型、Learning-to-rank (LTR)模型、Neural IR(NeuIR)模型的演进。传统检索模型更多关注查询和文档中重叠的词,在此基础上建模权重,后将不同权重的得分组合,得到相关性得分。代表性的方法包括 PlV、DIR、Language Model、BM25 等,都是通过对词频、文档长度、以及词的 IDF 的不同组合方式,来得到度量的得分。
![](https://static001.geekbang.org/infoq/cd/cdefc7fde9b9b03130cbebfcd29f925c.png)
LTR 模型的建模过程,是从指标函数的计算变成特征学习的过程。通过人工构造不同特征,后采用神经网络或者函数优化的方式,来解决特征组合的问题。代表方法包括 RankNet、RankSVM、LambdaMart 等。
![](https://static001.geekbang.org/infoq/c7/c7ef2b2cfab01ce33fe235a94897bafb.png)
NeuIR 方法更进一步,通过模型学习构建人工设计特征的过程,采用机器学习优化的方式来抽取特征。大致可以分为 3 类:一是基于表示的方法,单独学习查询和文档的表示进行打分;二是基于交互的方法,把查询和文档从底层做交互,对交互信号进行抽象得到打分;三是将二者结合起来进行打分。
![](https://static001.geekbang.org/infoq/5f/5fc28baa957c2d1190d5a588fbc01f3e.png)
2) 检索框架
检索框架的发展经历了从单阶段检索到多阶段检索的过程,早期的检索引擎(例如 Indri、ES 等)主要是构建单阶段检索,使用 BM25、LM 等传统算法。后续引入了更多的阶段来进一步提升系统的效率,包括 L2R 和 Neural 等,这些方法的计算复杂度很高,通常放在 Reranker 阶段。
![](https://static001.geekbang.org/infoq/13/1337caf264bddcd969e49d0319d2bf4a.png)
3) 检索系统
为了满足实际检索场景的需要,检索系统包含更多的模块,包括查询改写、意图理解、文档索引等。在检索系统中,从底层文档存储的结构来看,它经历了从基于符号的系统架构到基于向量的系统架构的转变,在真实的检索系统中,通常也会结合二者的优势来建模。
![](https://static001.geekbang.org/infoq/8d/8d83a50a3450b5d93d809948239e7dd6.png)
基于符号的检索系统,通过把文档表示成一个高维稀疏的向量,每个词在向量里占一维,每个文档映射在词表向量上就是一个极度稀疏的表示。存储结构采用倒排索引的方式,在离线阶段把文档索引起来。
![](https://static001.geekbang.org/infoq/c5/c5477e108e086d4626dad2ec14965743.png)
基于向量的检索系统主要通过语义映射将文档映射到一个低维稠密的向量空间。这里采用的索引方式包括基于图和量化的方法,这种方式也带动了整个系统的架构变迁。
![](https://static001.geekbang.org/infoq/24/245d2a4c8e5f0d642e4796ca4c5ff748.png)
预训练的方法在检索系统中的不同模块都有应用:在 Query Parser 层面有 rewriting、expansion、suggestion;在 Doc Encode 层面也有很多文档编码的方式;在第一阶段检索、重排阶段也提出了不同的模型。
二、预训练在检索第一阶段的应用
1、基于 Term-based 检索模型的两个问题
第一阶段检索早期的方法是基于 Term-based 的方法,主要是对文档清洗,通过倒排方式索引到引擎中。这类方法面临两个经典的问题:一是查询稀疏与文档冗余带来的词失配的问题;二是无序词排列导致丢失语义依赖信息的问题。这两个问题造成语义信息丢失,导致后续建模无法提升性能。
2、三种解决方法
针对以上问题主要有三类不同提升方法,分别是:稀疏检索方法(Sparse Retrieval)、稠密检索方法(Dense Retrieval)、混合方法(Hybrid Retrieval)。
Sparse Retrieval:
保持表示的稀疏性,与倒排索引集成以实现高效检索。
Dense Retrieval:
从符号空间到语义空间,使用神经网络算法进行语义相似检索
**Hybrid:**结合基于倒排的检索和语义检索,继承两者的优点。
1)Sparse Retrieval
根据改进倒排索引中模块的不同,Sparse Retrieval 可以分为 Neural Weighting Scheme 和 Sparse Representation Learning 两类。
Neural Weighting Scheme
利用离散符号空间中的预训练模型改进项加权方案。
主要包括:
a)Term Re-weighting
通过改变原始文档在倒排索引中的权重来提升语义,通过预训练的模型从语义的角度来估计词的权重。其中有两个代表方法:
DeepCT [Dai et al., SIGIR 2020]:核心思想是用 BERT 里学好的基于上下文的向量来估计每一个词对于文档的重要度并把它索引到倒排索引中替换原来的基于词频统计权重的方式。
![](https://static001.geekbang.org/infoq/71/71dd0bfde5fd1c15880ec4a8633586ea.png)
这里的关键问题是如何构建监督信号来学习词权重,论文提出了一种 Query term recall 的监督信号进行学习。
HDCT[Dai et al., WWW 2020]
![](https://static001.geekbang.org/infoq/65/650c795999187f45378339b1c232b0c4.png)
核心思想是将文档拆成段落,对每个段落去估计每个词的权重最后把每个段落里的权重组合起来。存在两个核心问题:一是每个段落中词的权重如何评估,这里直接采用了 DeepCT 的估计方式,此外,对预测的打分开根乘以 N 再 Round 到整数后进行索引,避免匹配过程被部分高权重的词所主导。二是如何组合段落的词权重形成文档的词权重,论文采用的是平均加权和按段落位置衰减的方式加权。
b)Document Expansion
为文档扩展语义相关词项,提高部分词项的权重,缓解词汇失配问题。其思想是在索引的过程中预测和文档相关的词并全部加入文档中,添加到倒排索引中去。
doc2query/docTTTTTquery [Noqueira et al., 2019]
![](https://static001.geekbang.org/infoq/d2/d2b7f101e8561b1cb26596cc6b11608c.png)
doc2query 的结构是 6 层的 Transformer,docT5query 与 doc2query 的区别是利用了一个更强大的预训练模型 T5 来生成扩展词项。其核心思想都是利用给定的查询和文档的标注对训练一个 Seq2Seq 生成模型,然后对每个文档生成伪 query 拼接到文档尾部进行索引构建。
UED (Unified Encoder-Decoder) [Yan et al., AAAI 2021]
![](https://static001.geekbang.org/infoq/3d/3d8ed1cb0992e0efae40bbc90bf45382.png)
该方法的核心思想是利用训练集中有标注好的(q,d)对同时训练判别模型和生成模型,一方面可以只用 Encoder 部分将(q,d)拼起来做相关性的判别预测,另一方面可以额外加一个 Decoder 部分来生成查询。两部分同时学习互相增益会使 Encoder 部分更强。
c)Expansion + Re-weighting
该种方式是把文档扩展与词权重同时进行学习,代表性工作有:
SparTerm [Bai et al., AAAI 2021]
SparTerm 方法在整个词表上进行词权重评估,从而达到词项扩展以及词权重估计同时进行的效果。
![](https://static001.geekbang.org/infoq/03/037c2f7de5f44f9197541ae62c807dbf.png)
SPLADE [Formal et al., SIGIR 2021]
SparTerm 的重要性估计部分是提前学习好的并且从实验结果来看词项扩展能力比较受限,SPLADE 在它的基础上做了扩展:一是把原来词估计的权重进行 saturate function 使扩展能力变强,二是利用 FLOPS 正则项约束来使整体网络可以端到端地学习。
Sparse Representation Learning
另一种方法就是把文档映射到一个语义向量的隐空间中去。
Latent Term Indexing
![](https://static001.geekbang.org/infoq/70/70c9d249758b48a2481c60fae2416b41.png)
文档倒排索引中每个维度对应的词,现在映射到一个关联多维语义的“latent term ”的 ID。
SNRM [Zamani et al., CIKM 2018]
核心思想是对文档的词序列进行卷积操作获取每一个 N-grams 的表示,然后将其经过全连接的映射进行语义抽象后再反向稀疏化放大到更高的维度,最后通过池化操作得到高维稀疏的文档表达。
![](https://static001.geekbang.org/infoq/af/af2cb41ce114fc1f9135df55e90d324b.png)
UHD-BERT (Bucketed Ultra-High Dimensional Sparse Representations) [Jang et al., 2021]
![](https://static001.geekbang.org/infoq/f0/f0f063b5e4abe1d5442d0021285e58df.png)
在 SNRM 基础上提出一个基于 BERT 的稀疏表示学习方法,区别于 SNRM 用的卷积和全连接,UHD-BERT 底层 Encoder 用的是 BERT。
2)Dense Retrieval
Dense Retrieval 直接改变了原有的检索模式,把查询和文档映射到语义空间中,然后用 ANN 算法来进行检索。一般采用双塔的编码方式对查询和文档单独地编码得到二者独立的表达,从而使文档可以进行离线索引。这类方法可以分为两类:Term-level Representations、Doc-level Representations。
Term-level Representations
ColBERT [Khattab et al., SIGIR 2020]
![](https://static001.geekbang.org/infoq/2b/2b314cbc6a899b0b751433e08c1dbd73.png)
核心思想是把交互的过程延迟到后面去使得前面表达的计算可以单独进行,上层交互采用 MaxSim 计算函数对每个查询词和文档中的每一个词计算相似度取最大,然后把每个查询词的得分加和起来得到最终的相似度分值,ColBERT 性能相对于上文提到的方法都有较大提升。
Doc-level Representations
RepBERT [Zhan et al., 2020] , DPR [Karpukhin et al., EMNLP 2020]
![](https://static001.geekbang.org/infoq/07/07cca2e2daee358bc7d361e8cd792a48.png)
该方法是采用双塔的 BERT 来建模查询和文档的表示进行相似度计算。在训练的方式上有一些特别,会采用一些 BM25 召回的强负例来提升模型的建模能力。
![](https://static001.geekbang.org/infoq/0b/0bfc7b94c8c18f8912b3a070f133fbef.png)
可以看到,RepBERT 方法非常简单而且性能比 DeepCT 等都要好但相对于 BM25+BERT Large 这样交互式的模型还是要差。
TCT-ColBERT [Lin et al., 2020]
![](https://static001.geekbang.org/infoq/5d/5d41ff0edd263141f79d0bbbf3536381.png)
ColBERT 性能相比传统方法得到大幅提升但需要大量的文档存储,TCT-ColBERT 通过蒸馏技术,将 ColBERT 的强建模能力蒸馏到类似于 RepBERT 这样的双塔架构上去,从而降低搜索延迟减少存储代价。
Multi-vector —— ME-BERT [Luan et al., TACL 2020]
![](https://static001.geekbang.org/infoq/68/687303f8fff69c3ce3ef12dc556ad503.png)
将 BERT 得到的前 M 个词的表达作为文档的表达,构建索引的时候同时索引多个向量,计算最终得分的时候通过 max 来取与查询表达相似度最高的分值。
Multi-vector [Tang et al., TACL 2021]
![](https://static001.geekbang.org/infoq/e9/e9115d52ad81d2c1780f61827b50a85c.png)
相较于直接取前 M 个词的表达,该种方法用聚类的方法,利用 k-means 对文档所有词的表达进行聚类得到 k 个簇中心,所有簇中心的向量共同作为文档表达,然后与查询计算相似度,取最大的相似度分值作为最终的相关性得分。
3) Hybrid of Sparse-dense Retrieval
除了以上的两种建模方式,还可以将两种方式结合起来利用 Sparse Retrieval 和 Dense Retrieval 各自的优势来提升性能。
![](https://static001.geekbang.org/infoq/30/30903c5eed5dd05d8fa551c8ea20a482.png)
CLEAR [Gao et al., ECIR 2021]
该方法是先用 Sparse Retrieval 进行检索将检索不好的查询再用 Dense Retrieval 进行增强。方式就是先计算 Sparse Retrieval 的结果并估计残差项,然后用残差项来监督 Dense Retrieval 模型的训练。
![](https://static001.geekbang.org/infoq/1e/1e2352fd1d3363d70d365f162e5cecd0.png)
COIL (COntextualized Inverted List) [Gao et al., NAACL 2021]
![](https://static001.geekbang.org/infoq/ee/ee74fe04603b753952068fcd2dcafbc7.png)
另一种是基于 ColBERT 基础之上,ColBERT 依赖于 ANN 的检索方式计算量很大,而 COIL 改变底层索引结构改用倒排索引方式能够减少计算量。
三、在检索第一阶段的挑战性问题
1、负样本采样
现在研究较多问题是,如何挖掘更强的负例来提升模型的判断能力。一般来说,无论用怎样的神经网络方法,最后算 loss 时都是区分正例和负例间的差异。由于召回阶段的文档规模非常大,在训练时不能将所有负例文档都进行计算,实际训练时一般通过采样来选择负例,如何高效挖掘最具信息量的负例是模型训练的一个关键问题。
当前几种方法有:
ANCE
核心思想是初始学习先用 BM25 的方法采一些负例学习双塔的 BERT 模型,后续的学习过程利用前面学好的模型进行初始化,并对文档进行索引来检索得到 top-n 文档随机采样负样本,其中每隔一段时间都需要对文档索引进行更新,因此该方法的训练代价较大。
![](https://static001.geekbang.org/infoq/24/24996aa9908f093d7aeb5a11c42709b5.png)
RocketQA
RocketQA 是百度提出的方法,它跟 ANCE 比较接近只是做了额外的 denoised 操作,如果使用学到的双塔模型的召回结果进行负样本采样的话可能会带来假负样本。该方法额外训练了一个更强的排序模型对召回的文档中靠前的部分进行相关性评估并去除可能的伪负样本。
![](https://static001.geekbang.org/infoq/95/95aa0d4984e11ee1d7abd8869a57b4bd.png)
TAS-Balanced
TAS-Balanced 用了一个更复杂的采样策略,先对查询进行聚类,然后同一 batch 内的样本按簇进行采样。除此之外,在采样负样本时考虑了与正样本具有不同 margin 的文档。
![](https://static001.geekbang.org/infoq/a5/a53ef48ce7b172f508c14c5470af9fb8.png)
2、索引联合学习
大部分双塔模型学习是独立于索引过程的,在训练过程中,查询和文档的相关性是基于神经网络输出的稠密向量计算得到。然而,在检索时,相关性的计算是基于索引后的文档表达,例如量化后的向量表示。两者之间的差异会对检索的性能造成一定的损失。那么怎么样能在学文档表示的同时,与索引阶段联合优化,也是一个很重要的问题。
![](https://static001.geekbang.org/infoq/e9/e9d9b75f1148e38ad4772b3cae631e60.png)
京东做了一个较新的方法就是把相关性的计算跟中间索引的过程联合起来。将乘积量化的索引过程的梯度回传到表达学习模块,以实现表达学习和索引构建的联合训练。
3、联合生成模型和判别模型
判别模型学的是查询和文档相关性的一个判别问题,生成模型需要输入一个文档去生成查询的序列。生成模型通常对模型要求更高因为需要对文档语义有深度的理解。如何结合两种建模方式的优势来提升检索的性能也是一个值得探索的方向。
![](https://static001.geekbang.org/infoq/a4/a40dbb8eaa1e2326adea2e2d1a728e14.png)
目前存在的一种做法是让模型同时学习判别任务与序列生成任务,需要注意的是在学习序列生成任务时无法提前获知「查询」后面的词,所以 Mixed Attention 阶段需要一个特别的操作。这个操作就是对文档而言每个词都可以进行双向交互,上下文 mask。
嘉宾介绍:
范意兴,博士,中科院计算所副研究员,主要研究内容包括信息检索、自然语言处理等,在国际顶级学术会议 SIGIR、WWW、CIKM 等发表论文 30 余篇,开发了深度文本匹配工具 MatchZoo, Github 的 star 数累计 4000+。曾获得中科院院长优秀奖,入选中国科协青年人才托举工程、中国科学院青年创新促进会会员,担任 CIPS 信息检索专委会委员、CIPS 青年工作委员会委员、以及国内外多个会议组委成员。
推荐阅读:
---------- END ----------
百度 Geek 说
百度官方技术公众号上线啦!
技术干货 · 行业资讯 · 线上沙龙 · 行业大会
招聘信息 · 内推信息 · 技术书籍 · 百度周边
欢迎各位同学关注
版权声明: 本文为 InfoQ 作者【百度Geek说】的原创文章。
原文链接:【http://xie.infoq.cn/article/2d22bf6d3cc6106f593a6a8e6】。文章转载请联系作者。
评论