作者 | lhy12138

导读

目前百度大搜次要有基于稠密表征的倒排检索和浓密表征的语义检索双路召回。随着深度学习技术的倒退,语义检索的召回成果失去了显著进步;与此同时,因为稠密表征有着准确匹配、索引效率和可解释的劣势,最近学术界从新将眼光放回稠密表征架构,钻研稠密表征如何从大规模语言模型中获益。本文将介绍学术界在倒排召回和语义召回的最新进展。

全文6386字,预计浏览工夫16分钟。

01 搜寻中的召回

召回个别会从海量候选库中抉择与query相干的文档送给下层排序模块,因为效率起因,往往无奈执行query-url细粒度交互。目前召回次要有基于term的传统倒排召回和基于向量表征的语义召回。本文将介绍两个方向在学术届的一些最新进展。

02 如何对待语义召回和传统倒排召回的关系?

随着预训练模型和样本技术的更新,语义召回体现了弱小的检索成果,而传统倒排技术因为老本、效率问题并没有取得成果的显著进步。倒排召回基于term归并,因而具备较强的可解释性;而语义召回在向量空间搜寻与query语义最类似的文档,对语义的表达能力更强。应该如何对待两者在召回链路上的关系呢?

Are We There Yet? A Decision Framework for Replacing Term Based Retrieval with Dense Retrieval Systems

这篇论文提出了一套框架,包含一组指标(不仅从成果登程),彻底比拟两个检索系统。

次要规范(成果/老本) 以及主要规范(robustness):

主要规范:子问题汇合的成果(如长度在某个范畴的q、频率在某个范畴的q、lexical匹配的能力、模型的泛化能力、决策显著差别比例、甚至是零碎可维护性、将来迭代空间、老本)

最终论文在一个检索评估集上给出了相应的论断:即在向量化老本可承受的前提下,语义召回零碎能够代替倒排召回零碎。而在理论工业界对应的问题往往更为简单,但论文提出的剖析框架正是咱们须要从新扫视和思考的内容。

BEIR: A heterogenous benchmark for zero-shot evaluation of information retrieval models

这篇论文对学术界现有检索相干数据集进行汇总,从各个领域汇总了不同上游工作中对检索能力的需要,以全面地评估现有召回模型的成果。


从表格能够看到一些有意思的论断:在zero-shot的场景下,BM25是一个十分强壮的检索系统。基于term细粒度语义交互的两种办法(colbert/BM25+CE)依然体现了统一的优越性。但稠密表征和浓密表征的双塔模型仿佛体现不佳。同时察看到doc2query是一个稳固的晋升,因为它只会扩大词,更像是对BM25的合理性改变,检索形式和打分逻辑与BM25统一。

同时作者也提到,数据集存在词汇偏差问题:标注候选来自于BM25检索,因而可能对不依赖词汇匹配的模型存在好后果的漏标注问题,对新召回后果标注后:

其中语义召回模型(如ANCE)指标显著进步。

通过以上两篇论文发现,不论是倒排召回还是语义召回在不同场景下有着本人独立的劣势,因而咱们在后文会针对两个方向别离介绍相干停顿。

03 倒排召回新倒退

如果想通过现有技术促成倒排倒退,咱们有哪些能够尝试的计划?

最新进展:

可学习的稠密表征(将query剖析、doc了解以及检索匹配交融成端到端工作,但以稠密向量别离示意query和doc),依然依靠倒排的检索形式,因而保留倒排的劣势(可解释、term匹配能力强),同时进一步晋升语义泛化能力。

SPLADE: Sparse lexical and expansion model for first stage ranking

稠密表征:用整个词表从新形容doc,同时实现对term weight和term expansion。

能够看到,最终每个文档被形容为term和score的模式,同时会删除文档已有冗余词和减少相应扩大词。

稠密表征和预训练任务中mask language model工作很像,将每个token通过transformer示意后最终还原到词表信息中,因而稠密表征复用了mlm工作的head。

通过汇总(pooling)原始query/doc中的所有稠密示意,将query/doc示意成一个词表维度的稠密向量,并且引入flops正则来管制扩大term的数量。同时在稠密表征的根底上通过点积的模式计算q-u匹配得分。

最终loss示意为常见的in-batch CE loss和相应flops正则loss。

From Distillation to Hard Negative Sampling: Making Sparse Neural IR Models More Effective

本文是验证在浓密表征(对应上文提到的语义召回模型)下提出的各种优化思路是否能够迁徙到稠密表征中:

包含:蒸馏技术(margin-mse)、难样本开掘技术(单塔开掘hard-neg)和预训练技术(cocondenser强化cls能力)。

最终通过试验证实了,多种办法均可迁徙到稠密表征场景下。

SpaDE: Improving Sparse Representations using a Dual Document Encoder for First-stage _Retrieval_

出发点:相比对立建模term weight和term expansion,采纳双编码器独立建模,同时提出联结训练策略来彼此促成。

将整个模型构造拆分三局部:

query端:为了进步query端inference效率问题,只采纳了分词器,即仅有one-hot信息。

doc端term weight模块:预测term的权重。

doc端term expansion模块:预测top-k扩大词及权重。

最终汇总doc端的整体稠密表征:

同时提出了协同训练策略:

作者察看到联结训练(先取得最终merge的表征vd后间接进行训练)简直没能带来成果的增益。

因而模型采纳协同训练形式:

热启阶段:应用不同的指标函数独立训练两个doc端编码器。

term weight:失常的in-batch loss来刻画query和doc的相关性分数。

term expansion:因为query没有进行扩大,因而如果doc未能扩大出query词则对应query

词不会取得相关性分数,因而冀望扩大词尽可能扩大到query且尽量不要扩大非query词。

因而减少了独自的束缚项,在规范召回loss的根底上,强化了query稠密表征和doc稠密表征在词命中上的能力,尽可能的要求doc能扩大出query所需的扩大词。

finetune阶段:每个编码器为对方提供topr%的大损失样本,强化互补性。(权重模型的大损失样本可能是词汇不匹配,而扩大模型的大损失样本可能是以后模型对weight刻画较差)

LexMAE: Lexicon-Bottlenecked Pretraining for Large-Scale Retrieval.

出发点:认为MLM并不适宜做稠密示意,mlm偏向于为低熵的单词调配高分,而稠密示意能心愿关注对语义重要的高熵词。(mlm 的loss更极其一些,只去预测原词,且更容易mask到低熵词,而稠密表征则心愿这个预测的值更soft以体现term重要性+扩大词能力)

因而提出了以下框架,包含三个组件:

  1. Encoder(BERT)
  2. 词典瓶颈模块
  3. 弱mask解码器

Encoder:输出文本通过肯定比例mask后,在MLM-head的输入即为稠密表征。

词典瓶颈模块:利用doc的稠密表征a来取得句子浓密表征b。

其中W是原始BERTword embedding示意。

弱mask解码器:利用浓密表征b来还原mask信息,用b替换CLS,通过两层decoder还原被mask的词。(心愿稠密表征承当CLS相应的信息能力,在预训练阶段强化稠密表征的表达能力。)

04 语义召回新倒退

语义召回尽管具备弱小的语义能力,但在实践中依然存在以下几类问题(包含但不限于):

  1. 单表征信息表达能力弱。
  2. 无奈对准确匹配进行建模。
  3. 多表征如何保障表征的有效性

单表征信息压缩问题:

Simlm: Pre-training with representation bottleneck for dense passage retrieval.

出发点:

缩小预训练和finetune的不统一,进步样本效率,心愿cls尽可能编码doc中的信息。

做法:

1.随机mask两遍原始序列,利用生成器还原两个新的序列。

2.对于enc序列,利用多层transformer编码,取得句子级别CLS示意,其中loss束缚为以后词是否产生过替换。

3.对于dec序列,应用2层transformer编码编码整个序列及enc序列的句子示意,同样loss束缚为以后词是否产生过替换。

因为dec序列仅应用2层transformer,因而迫使句子级别cls信号须要捕获原始enc序列更多的语义信息。

准确匹配问题:

Salient Phrase Aware Dense Retrieval: Can a Dense Retriever Imitate a Sparse One?

出发点:dense retrieval在词语匹配和低频实体不如稠密办法,心愿能具备稠密模型的词汇匹配能力,模仿稠密retrieval。

思维:利用稠密teacher蒸馏到dense retrieval(模拟模型),再和失常的dense retrieval concat。

实践经验:

  1. 稠密teacher蒸馏到模拟模型时,mse和kl loss未能起作用。最终应用稠密teacher来生成pos和neg,应用惯例比照损失来做样本级蒸馏而非soft-label蒸馏成果更佳。
  2. 同时尝试将模拟作为dense的热启模型,但成果个别,因而抉择两个示意联结训练,尝试了求和/concat以及freeze模拟模型只更新dense模型和加权系数的计划。

    同时作者验证了模拟器是否真的学到了词汇匹配的能力,发现模型器与BM25排序一致性有大幅度提高。

LED: Lexicon-Enlightened Dense Retriever for Large-Scale Retrieval

出发点:短少term匹配和实体提及的部分建模

思路:

1. 减少lexical的难负样本同时更新lexical模型和dense模型。(lexical模型为上文讲过的SPLADE模型)

2. 相比KL损失loss,只要求弱监督保障rank一致性。

(思路和上篇论文比拟统一,想用一个更好的词汇模型来把常识集成到dense模型上)

多表征建模问题:

Improving document representations by generating pseudo query embeddings for dense retrieval

出发点:单表征须要压缩文档的全副信息,可能是次优的

(背景前提:局部评估集doc会依据内容提取多个问题,先天有多query需要)

解决思路:拿到所有token的最终表征,执行k-means聚类,而后从每个doc中提取多个表征。

K-means算法:找到doc全副token的聚类核心(初始化:随机抉择token示意或对doc切割按等间距抉择)

最终收敛多个step后,所剩的聚类核心认为反馈了”潜在的”query查问。

训练阶段:k-means取得多个聚类核心,query对doc的多个聚类核心做attention,再点积算分数。

推理阶段:先独自执行一次ann查问,找到top-k个候选,再利用对应doc的全副表征计算attention示意及重排序分数。

Multi-View Document Representation Learning for Open-Domain Dense Retrieval

出发点:doc须要多表征,心愿doc中的某一个表征和query实现对齐以及发现MEBERT中多个表征会进化到[CLS]。

思路:用多个[viewer]替换掉[cls],用作文档多表征,同时提出部分平均损失+退火策略匹配不同的潜在查问。

退火策略:

一开始温度系数较大,softmax后散布平均,每个viewer向量都能取得梯度,每个epoch后调整温度系数以突出真正匹配的视图。

Learning Diverse Document Representations with Deep Query Interactions for Dense Retrieval

出发点:多文档可能被多个潜在query查问,间接doc2query是否模仿潜在交互。

思路:应用生成的查问来学习文档示意,T5 finetune doc2query,并decode10个query。

只对所有正样本执行doc2query,并将生成的query作为难负样本的query信号

Hard neg:

正样本:(q+ d+)负样本(q+ d-)避免模型靠query端走捷径,强调doc信息

In-batch neg:

正样本:(q+ d+) 负样本(其余q+ d-)学习topic信号

推理:生成多个query来示意doc的多表征,与doc拼接送入doc端双塔模型。

除了上文提到的三个问题,语义模型还存在以下问题(包含但不限于),但受限于篇幅未能在这次分享中介绍:

  1. 语义模型蒸馏技术
  2. 基于实体的(多)表征技术
  3. 语义模型建模多指标场景

05 总结

以上,咱们总结了近期学术界在倒排和语义召回两路的最新进展,能够看到随着大规模预训练模型的倒退,不论是倒排还是语义召回的能力均能够从中获益。

——END——

举荐浏览:

采编式AIGC视频生产流程编排实际

百度工程师漫谈视频了解

百度工程师带你理解Module Federation

巧用Golang泛型,简化代码编写

Go语言DDD实战高级篇

Diffie-Hellman密钥协商算法探索