Press "Enter" to skip to content

Rambling on Neural Information Retrieval

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

Introduction

 

信息检索(Information Retrieval, IR) 是当今互联网最重要的基础技术之一,从互联网诞生之日起,如何从海量数据中找到人们需要的信息这一问题就得到了广泛的关注。 搜索(Search) 是比信息检索更广义一些的概念,虽然搜索、广告、推荐这三大由NLP支撑的业务方向经常被并列提及,但搜索无疑与NLP的联系更为紧密,应用范围也更广泛,并且几乎任何包含广告和推荐的场景都是少不了搜索功能的。除了我们每天都在使用的通用搜索引擎,绝大多数联网的应用程序都离不开搜索,比如你正在使用的知乎就包含了一个细长的搜索框,这一个简单的组件背后其实集成了相当复杂的搜索算法,但即使背后有上百个工程师的开发和研究,搜索算法也经常难以满足用户的各种意想不到的查询( 为什幺知乎的搜索功能如此之烂? )。

 

本文不会涵盖搜索领域的所有研究方向,仅会探讨 面向文本的信息检索 ,尤其是近几年发展起来的基于深度学习的信息检索的发展趋势。更正式地说,给定一个文档库 和用户查询 ,信息检索的目标是找到最合适的 来满足用户的信息需求,在大部分应用场景下, 和 几乎都是以文本的形式呈现(当然还有以图搜图和听歌识曲这类非文本的信息检索),因此NLP是信息检索的底层技术之一。

 

信息检索的核心技术可以归结为两个词: 理解 和 排序 ,其中“理解”可以约等于自然语言理解(NLU),其核心问题是如何以最优的方式来表示用户查询,当我们在搜索框中输入一个查询或者问题时,信息检索系统会对用户查询进行非常多的处理,比如分词、去停词、词形还原、查询扩展、纠错、改写、赋权、编码、映射等,这一系列操作的最终目的是 将字符串型的用户查询转换为一种数值型的表示 。根据“理解”模块提供的表示,“排序”模块需要通过某种度量(metrics)来对候选文档 进行打分排序,最后将排序后的结果返回给用户。

 

History

 

在早期的信息检索系统中,“理解”模块通常是基于词袋模型(BoW)的,它将查询和文档映射到高维稀疏的向量,然后“排序”模块利用高效的 倒排索引(Inverted Index) 来计算查询和候选文档的相关性。这个流程是完全无监督的,其核心思想就是计算字面相似度,并加入一些人为的启发式先验,比如TF-IDF的思想。然而,由于自然语言的灵活性和复杂性,同一个意思有非常多的表达方式,简单的字面匹配很难解决自然语言广泛存在的 词汇鸿沟(Lexical gap) 和 语义鸿沟(Semantic gap) 问题。虽然人们也提出了潜在语义索引(LSI)等语义模型,但性能通常不理想,因此后来人们开始探索 有监督方法 ,并将机器学习方法引入了信息检索,这类方法被统称为 Learning to Rank(LTR) ,LTR模型的监督信号来自于人工标注或是用户真实的点击行为,因此比起无监督的字面相似度计算,有监督模型返回的结果更符合用户的预期。然而,一个足够有效的LTR模型通常需要复杂的特征工程(比如词性、命名实体等语言特征和pagerank值,点击日志、用户信息等非语言特征),这些特征和词袋表示一样,都是高维稀疏的,虽然不少机器学习模型可以有效建模这些特征,但高维稀疏向量真的是最好的对用户查询的表示方式吗?

 

随着NLP领域 词嵌入(Word Embedding) 方法的兴起, 表示学习(Representation Learning) 的概念引起了人们的注意,从狭义的视角来看,深度学习其实就是表示学习,其旨在自动寻找数据的最优表示来完成目标任务,而不是人为通过复杂的特征工程来构建表示。在信息检索领域,发表于CIKM 2013的 DSSM(Deep Structured Semantic Models) 模型是首个将深度学习方法引入LTR的 表征式模型 ,DSSM将查询和文档映射到了低维稠密向量,并通过点积相似度来对文档进行排序,后来有人对编码层做了进一步的改进,比如加入表达能力更强的LSTM和CNN。然而,这些表征式模型相比于简单的BM25算法,带来的指标提升并不是很明显,因此人们的注意力越来越多地转向了更能提升最终指标的 交互式模型 ,在2016年前后,各种各样的交互式匹配模型层出不穷,比较出名的包括ABCNN、BiMPM、ESIM,直到2018年BERT的出现,才终止了学术界不断魔改交互匹配结构的发展趋势。但是,以BERT为代表的交互式模型虽然效果好,但它实在是太慢了,即使采用前两个月NVIDIA推出的TensorRT 8.0(BERT-Large推理一次仅需1.2ms),当文档数量 高达百万级的时候,想要找到与单个用户查询最相关的文档也需要1200s,这当然是无法接受的。

 

其实,这些交互式模型设计的初衷并不是面向信息检索,而是面向自然语言推理(NLI)这类文本匹配任务的。因此,人们提出了信息检索的两阶段范式: 召回-排序(Retrieve-Rerank) ,在召回阶段,我们采用简单的模型从 中筛选出一个很小的子集,在排序阶段,我们采用复杂的模型对这个子集重新排序,这样,复杂模型就不需要处理整个 了。因此,我们可以在召回阶段采用简单的BM25算法,在排序阶段采用BERT模型。那幺,召回阶段可不可以也装备上BERT呢?人们重新将目光转向了表征式模型,Facebook在2019年提出的 DPR(Dense Passage Retrieval) 模型就是这一思路的奠基之作,DPR的模型结构本质上和2013年的DSSM是一样的,只是采用了更有效的编码器、损失函数和训练策略。到这里,Neural IR的概念才被信息检索社区频繁提及起来,信息检索的理解、召回、排序三大模块全部装备上了深度学习方法。

 

Future

 

想要改进一个检索模型,我们可以考虑从数据、编码器、损失函数、相似度计算这些方面下手,下面简单介绍几个未来的改进方向,更多研究方向可以参考这个 Repo

后期交互: 表征式模型将一大段文本压缩到单个低维向量,这其实产生了一个巨大的信息瓶颈。在实践中,人们发现模型经常会出现语义漂移的现象,没法把握一段文本的所有含义,因此一些多向量表示模型被陆续提出,这些模型在支持高效的近似最近邻检索(ANN)的同时提升了查询和文档的交互深度。当前,指标上最优的多向量表示模型是SIGIR 2020上的 ColBERT ,它将查询和文档的每个token都映射到一个稠密向量,并采用MaxSim计算相似度,NAACL 2021上的 COIL ( COIL: Contextualized Inverted List )是当前综合性能最好的表征式模型,它巧妙地将倒排索引的思想融入了相似度计算,综合了词汇检索和语义检索的优点,其时间开销接近于倒排索引,同时在指标得分上接近于ColBERT。
负采样策略: 检索模型的训练通常是pair-wise范式,即每个训练样本包含一个查询 ,一个正样本 和一个负样本 ,模型的训练目标和度量学习、对比学习相似,即拉近正样本,推开负样本。显然,负样本的数量是远大于正样本的,如何选择具有代表性的负样本高效地训练检索模型是一个受到广泛关注的问题。负采样策略是数据层面上的改进,负样本的选择会对模型的收敛结果产生决定性的作用。目前学术界最通用的一种负采样策略是In-batch negatives with hard negative,但工业界的负采样策略并没有这幺简单,Facebook发表于KDD 2020的Embedding-based Retrieval in Facebook Search很好地诠释了什幺是 负样本的艺术
面向检索的预训练: 预训练模型的出现极大地促进了信息检索领域的发展,但预训练任务的目标函数和检索的目标函数差别是很大的,因此人们开始考虑如何设计一个更接近于检索的预训练任务或模型结构,但这个研究方向无疑对计算资源的要求是很高的。比较有名的预训练方法包括 反向完形填空(ICT) 以及最近CMU提出的 Condenser结构
文档扩展: 由于倒排索引的高效性,传统的BM25依旧是一个很强的baseline模型。BM25算法需要为词项赋权从而形成稀疏表示,因此人们也尝试了利用深度学习来改进稀疏表示。其中一种思路是利用问题生成模型扩展文档,从而间接改变文档的词权重,比如 doc2query 模型。另一种更直接的思路是用BERT估算词权重,但随着稠密向量表示的普及,这一研究方向目前似乎没什幺进展了。
知识蒸馏: 表征式模型和交互式模型的任务目标是一致的,都是为了产生更好的排序列表,只是前者更看重“快”,后者更看重“准”,因此交互式模型其实可以当作表征式模型的教师,为表征式模型提供更有效的训练样本。但最近的研究表明召回和排序阶段的目标其实是不一致的,不一致的主要来源正是前面提到的负采样策略。

另外,搜索除了查询理解和文档排序,还会有很多业务上的衍生任务,比如推荐问生成,问题补全、问题澄清(Clarification QG)、交互式查询(Interactive IR)等,搜索结果的评估也并不是依靠单纯的准召率来衡量,很多时候也需要像推荐系统那样考虑搜索结果的 公平性 (可参考着名的Bandit问题)和 多样性 (也就是考虑文档间的关系,可参考 Beyond Probability Ranking Principle )。针对不同业务,理解-召回-排序每个模块的设计都会有所不同,测试集和评估指标都需要按需设计,这些设计和改进通常是由业务层面的 需求分析 和 Bad case分析 来驱动的,因此想要做好搜索,对业务的深刻理解是必不可少的。

 

Bonus: Open QA

 

如果说问答系统是搜索引擎的高级形式,那幺Open QA就可以看作是Neural IR的高级形式,两者在模型上的区别仅在于最后的输出不同。Neural IR的基本结构是Retriever-Reranker,而Open QA的基本结构是Retriever-Reader,其中Reader就是机器阅读理解(MRC)模型。在经典的MRC模型中,通常会给定问题 和文章 ,我们希望模型找到问题的答案 ,但是在实际的应用场景下, 一般不会预先给定,而是需要用 检索出来,因此Open QA更接近于真实的问答系统。

 

目前Open QA模型的Retriever和Reader通常是独立的,因为联合训练成本过高且没有显着收益,所以下文只关注Reader的发展状况。自2016年SQuAD数据集发布以来,MRC得到了广泛的研究,虽然BERT在SQuAD数据集上已经超越了人类表现,但这不代表MRC任务就解决了。一方面,SQuAD数据集的训练集和测试集存在大量重叠,且许多问题通过简单的字面匹配就能回答,并不需要真正的“阅读理解”。另一方面,我们并不清楚模型到底学到了什幺,因为人类也无法准确定义“阅读理解”包含哪些技能,近期有大量实验分析表明模型只是在捕捉一些虚假的统计线索( Why Machine Reading Comprehension Models Learn Shortcuts? ),究其本质,深度学习模型终究属于统计模型的范畴,想要通过最大似然估计学到演绎、归纳之类的能力是不现实的,最近对深度学习模型的理论分析也表明,一个好模型的标准其实就是广泛的记忆和适度的泛化。

 

MRC任务有相当多的分支,比如近几年兴起的多跳问答、视觉问答,表格问答等。广义地来说,任何NLP任务都可以转化成MRC任务,因为任何任务的表述都可以转化成问答的形式,这也是Google T5的设计理念。抛开不同MRC任务的差异性,总体来说,当前的MRC主要面临以下几个问题:

长文档建模: 如何对长文档进行有效的编码依旧是一个开放的问题,实际上许多预训练模型改进都是针对长文档建模的(可参考Google发表的 Long Range Arena ),在Open QA任务中,如何有效地融合检索到的多个文档的信息来生成答案依旧是一个值得研究的问题。
领域迁移: QA模型通常具有很强的领域性,在法律问答数据上训练的QA模型是没法回答医学问题的, 问题生成(Question Generation) 被认为是一个很好的领域迁移方案,其基本思路是利用问题生成模型为领域文本生成伪问题,然后在这些伪问题上训练QA模型。这一思路在低资源的条件下表现很好,但问题生成的样本效率很低,如何有效地判断和筛选出那些高质量的问题也是当前的一大痛点。
可解释性: 当QA模型给出一个答案的时候,我们不能确定这个答案在多大程度上是对的,这也是限制QA模型在医疗、法律这些领域落地的瓶颈之一。Open QA是可解释性的一个很有希望的解决方案,因为Open QA模型不仅返回答案,同时也会返回参考的文档,可供用户参考,事实上,Google搜索已经在不少查询上做到这一点了。但Open QA只能缓解输出可解释性的问题,而无法缓解模型自身的可解释性问题,模型是如何学习的?我们应该如何准备训练数据让模型学到我们期望的能力?如何引导模型走上正确的学习路径?都是当前需要考虑的问题。

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注