共计 5547 个字符,预计需要花费 14 分钟才能阅读完成。
作者 | 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 重要性 + 扩大词能力)
因而提出了以下框架,包含三个组件:
- Encoder(BERT)
- 词典瓶颈模块
- 弱 mask 解码器
Encoder:输出文本通过肯定比例 mask 后,在 MLM-head 的输入即为稠密表征。
词典瓶颈模块:利用 doc 的稠密表征 a 来取得句子浓密表征 b。
其中 W 是原始 BERTword embedding 示意。
弱 mask 解码器:利用浓密表征 b 来还原 mask 信息,用 b 替换 CLS,通过两层 decoder 还原被 mask 的词。(心愿稠密表征承当 CLS 相应的信息能力,在预训练阶段强化稠密表征的表达能力。)
04 语义召回新倒退
语义召回尽管具备弱小的语义能力,但在实践中依然存在以下几类问题(包含但不限于):
- 单表征信息表达能力弱。
- 无奈对准确匹配进行建模。
- 多表征如何保障表征的有效性
单表征信息压缩问题:
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。
实践经验:
- 稠密 teacher 蒸馏到模拟模型时,mse 和 kl loss 未能起作用。最终应用稠密 teacher 来生成 pos 和 neg,应用惯例比照损失来做样本级蒸馏而非 soft-label 蒸馏成果更佳。
- 同时尝试将模拟作为 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 端双塔模型。
除了上文提到的三个问题,语义模型还存在以下问题(包含但不限于),但受限于篇幅未能在这次分享中介绍:
- 语义模型蒸馏技术
- 基于实体的(多)表征技术
- 语义模型建模多指标场景
05 总结
以上,咱们总结了近期学术界在倒排和语义召回两路的最新进展,能够看到随着大规模预训练模型的倒退,不论是倒排还是语义召回的能力均能够从中获益。
——END——
举荐浏览:
采编式 AIGC 视频生产流程编排实际
百度工程师漫谈视频了解
百度工程师带你理解 Module Federation
巧用 Golang 泛型,简化代码编写
Go 语言 DDD 实战高级篇
Diffie-Hellman 密钥协商算法探索