定期更新干货算法笔记和世间万物的学习记录~
今天给大家介绍3篇WWW 2022检索方向3篇值得一读的文章。第一篇文章是北邮和微软联合提出的利用对比学习、可导量化对多阶段向量化检索的优化。第二篇文章是理海大学提出的StructBERT,用于进行结构化表格数据的检索。第三篇文章是首尔大学提出的基于prompt的query-document向量化召回模型。
1
基于对比学习和可导量化的向量化检索
本文主要解决的是query-document检索中的性能问题。目前业内的主流检索方法是query侧和document侧分别使用encoder生成表示,在线阶段使用ANN的方式进行向量检索。当document的数量较大时,直接放到内存中检索是不现实的。因此,一般会通过一些优化的检索方法,例如基于量化的检索方法进行高效检索。将每个document生成两个embedding,一个是通过量化生成的离散表示sparse embedding,这部分表示的数据量较小,可以直接放到内存中,主要用来进行粗选,在全量corpus中选出最相关的topK;另一部分是dense embedding,这部分embedding参数量加到,会在粗选的候选集基础上进行进一步筛选,得到最终的结果。
本文采用可导的向量量化的方法生成sparse embedding,并且引入了监督信号通过对比学习指导sparse embedding的学习。首先介绍一下什么是向量量化。向量量化的方法,整体流程如下图,将向量分成多份,每份内部使用Kmeans进行聚类,这样每份内的元素都可以离散化为cluster id进行表示,每个类别都有一个对应的向量表示,实现了原始向量的压缩。
Differentiable Product Quantization for End-to-End Embedding Compression(ICML 2020)利用量化的思路提出了对embedding table进行压缩的方法。首先将原始的embedding table利用一个Key Matrix进行离散化生成codebook,再使用一个Value Matrix进行逆向操作生成重构的embedding表。在实际使用的时候,只保留中间产出的codebook和value matrix。在离散化过程中,将embedding和Key矩阵的向量都分成D份,计算每份的距离并以距离最小的作为其对应的离散化id表示,和量化方法类似。为了让上述过程是可导的,将距离计算取最小的argmin操作改为softmax操作,实现了离散化过程可导。
这篇文章利用了这种可导的量化思路优化ANN检索。原来的量化方法是无监督的,而本文采用了有监督的方法进行量化。首先通过上述可导的量化方法生成每个文档的离散化表示,然后使用对比学习的思路,在此基础上进一步引入监督信号指导codebook生成过程,让相关的query-document对离得更近,不相关的离得更远。
在dense embedding的学习方面,本文重点强调第一阶段和第二阶段的document数据分布不一致,因此针对第二阶段dense embedding的学习在第二阶段的子集中进行采样。
本文在负样本的采样方法上也进行了详细设计。在训练Sparse Embedding的阶段,负样本的构造采用了对比学习中常用的in-batch negitives,即其他pair对的正样本被视为前样本的负样本。此外,通过BM25采样语义相似的负样本,这可以提升负样本和正样本的区分难度。对于一个大小为N的batch size,每一对正样本会有2N个负样本,来自于其他样本和它们使用BM25采样的语义相关的负样本。
在第二阶段的负样本采样方法和第一阶段不同。第二阶段的候选集为和query相关性高的document,而第一阶段为全量document。为了让第二阶段的训练数据集和线上实际应用时的候选数据集数据分布相同,文中采用了二部图采样的方法。首先通过第一阶段训练的Sparse Embedding计算query到document的距离,选择距离TopK的query-document对建立边,这个过程模拟了线上使用时第一个step构造候选document集合的过程。然后在二部图上通过random walk或snowball sampling进行采样构造训练样本。通过这种方式构造负样本,其实生成了区分难度更大的样本,在Sparse Embedding相关性高的样本中构造正负样本,区分难度更大,也和线上实际应用的第二阶段场景相符。
2
基于对StruBERT:结构化信息检索
本文主要解决的问题是结构化数据的检索问题:给定一个文本query和一个table(包含多行多列)的结构化数据,计算二者的相关性;或者给定两个table,判断这两个table是否相关或计算相关性得分。
本文提出了StruBERT方法对结构化数据进行编码。一个table数据可以拆解出3方面信息:row-based、column-based和textual information(如表说明等)。对于row-based信息,将每行各个单元的信息拼接到一起,每个单元格的表达格式为【表头名 字段类型 单元内容】。例如对于下图中的R1的第一个单元格,可以得到palyer text Ronald这种表示。将同一行的不同单元的表示使用[SEP]拼接到一起。对于column-based,也使用相同的方法是得到对应序列。这样生成了row-based sequence和column-based sequence,可以用来表示原来table的结构化信息。为了将textual information也考虑进来,将其拼接到每个row和column序列的前方。
对于每个生成好的序列,使用BERT进行编码,BERT输出每个token的表示。文本使用average pooling,将一个单元格内的信息融合成一个表示。这样,每个row或column的序列都得到一个有多个单元格的embedding组合到一起的表示。最后,通过horizontal和vertical两个方向的attention获取两个方向上各个单元格信息的依赖关系。以StruBERT为基础,产出结构化数据的表示后,可以使用该表示进行下游的table检索相关任务,例如以query检索table,或以table检索table,table部分使用S填入BERT进行编码。
3
基于Prompt的文档检索模型
在query-document检索问题中,主流解决方法是基于预训练Bert作为Encoder,提取query和document的信息,进而得到相关性分。主要有两种做法,一种是将query和document在输入前进行交叉(cross-encoder),如PASSAGE RE-RANKING WITH BERT(2019)中采用的这种方法;另一种是对query和document分别编码(bi-encoder)。第二种方法的效果往往不如第一种,但是第二种方法可以提前分别计算好每个query和document的表示,再进行后续相关性计算,计算代价要比第一种方法需要每个pair都计算得分小得多。对于bi-encoder,业内目前的主流模型为孪生网络,query侧和document侧使用相同的Bert生成各自的表示,并且两个encoder是相同的,防止不同的encoder对query和document生成的表示不在同一空间而影响效果。
然而,query和document的数据分布本身差异很大,例如document的单词数量会比query大得多。在这个视角上,其实是需要对query和document的encoer采用一些差异化的网络结构来建模这种数据分布的差异的。
本文提出了一种Semi-Siamese半孪生网络,并结合了轻量级的finetune方法(如prompt finetune、prefix finetune)。本文的方法可以概括为,使用预训练的Bert初始化query侧和document侧的Encoder,并通过改造prefix finetune和LoRA两种轻量级finetune既保证两个Encoder的共性,又能建立差异性。
首先介绍文中采用的prefix finetune和LoRA这两种轻量级finetune方法。Prefix finetune在NLP Prompt系列——Prompt Engineering方法详细梳理一文中进行过详细介绍,感兴趣的同学可以。在finetune阶段整个预训练模型参数freeze,在输入样本前增加多个可学习的prefix embedding,finetune的时候只更新prefix embedding。这里prefix embedding相当于一个可学习的上下文信息,根据特定任务进行调整,实现了轻量级finetune。而LoRA则是通过引入参数量远小于原模型的可分解的两小矩阵建立一个旁路,通过finetune这个旁路来影响预训练模型。两个方法的示意图如下。
文中为了同时保证query侧和document侧Encoder参数的一致性,以及建模query和document的差异性,对prefix tuning和LoRA进行了改造。在prefix-tuning中,插入的prefix embedding既有query和document共享的,也有query和document私有的。在LoRA中也是类似的思路,使用的旁路矩阵既有query和document共享的,也有query和document私有的。
文中提出结合prefix-tuning和LoRA两种finetune方式,增强轻量级finetune的效果。采用了如下流程的序列式混合finetune方法,例如先训练prefix embedding,然后固定prefix embedding,继续用LoRA进行finetune。
文中进行了3组实验。首先在cross-encoder架构中的对比了不同finetune方法的效果,可以看到LoRA 方法(对全连接、Attention等部分参数使用可分解矩阵进行finetune)的方法取得了最有效果,并且效果要优于直接finetune所有参数。而prompt-tuning和prefix-tuning的效果要差一些。
接下来,作者对比了在bi-encoder中不同finetune方法的效果对比,和cross-encoder中的实验效果差别较大。在bi-encoder中,LoRA系列模型没有特别明显的效果优势,prompt-tuning和prefix-tuning体现出一定优势。并且将二者进行结合的方式,相比单独使用prefix-tuning和LoRA方法效果进一步提升,证明了本文提出的混合finetune方法在bi-encoder架构中的有效性。
对于这组实验现象,文中提出一些解释。对于query很短的数据集,Bert可能很难从query中提取有效信息。而引入prefix embedding后,相当于向模型中增加了和这个任务相关的上下文信息,有助于提取更丰富的信息。而这种方法在query较长的数据集中效果不明显,因为query足够长能够比较容易提取出较多信息。对于LoRA ,通过对比可以发现在bi-encoder中效果会明显优于LoRA,作者分析是由于cross-encoder建模更复杂的,因此LoRA 引入更多可finetune参数会带来效果提升。
最后,作者分析了在finetune引入半孪生(即个性化)的效果,实验结果表明,引入半孪生的效果会优于query和document侧使用完全相同的Encoder,验证了对query和docuemnt的Encoder引入个性化信息的效果。
4
总结
这篇文章给大家详细介绍了WWW2022中信息检索方向的3篇优质论文,涵盖了结构化数据检索、可导量化、轻量级Finetune的检索模型等工作。
END