AI 文摘

微软新文query2doc:用大模型做query检索拓展


  • By AiBard123
  • December 11, 2023 - 2 min read



作者: AINLP 来源: AINLP

目前比较主流的检索方案主要是字面检索(sparse,稀疏)和向量检索(dense,稠密),然而检索哪怕是到了现在也一直有一个很大的困境,就是query对文档文段的召回,一直是存在困难的,因为两者无论是信息还是语义,其实都有很大的鸿沟,一般地,大家常用的方式有诸如“将qa匹配转化为qq匹配”、query改写、同义词、通过用户反馈构造匹配模型等手段,今天给大家介绍的一个方案,是通过大模型的手段来进行改写。

论文:Query2doc: Query Expansion with Large Language Models

整篇论文其实没讲什么很高端的手段,而且本身也不需要什么很特别的工作,然而这个工作所带来的提升还不小,可操作性和实用性可以说是拉满了,有兴趣的可以直接看看论文,难度非常小。

拓展方法

文章的思想非常简单,就是在开始检索之前,先用query让模型生成一次答案,然后把query和答案合并送给模型。

举个例子,例如用户输入的是“儿童防沉迷”,原来是直接把“儿童防沉迷”直接用于检索,输入检索库中进行召回,然而现在,我们会结合prompt,先输入给大模型,并得到大模型的结果:

输入:  
什么是儿童防沉迷。  
要求,用大约100字回复。  
------------------  
输出:(结果来自chatglm2-int8)  
儿童防沉迷是指避免儿童沉迷于网络、游戏、电子书等电子娱乐活动,保护儿童身心健康和防止未成年人受到网络游戏沉迷、网络信息诈骗等问题的影响。为了实现这一目标,家长和社会应该共同努力,对儿童进行网络安全教育,限制儿童使用电子产品的时间和内容,并营造良好的家庭氛围,鼓励儿童积极参与有益身心的活动,如运动、阅读、艺术等。  

可以看到,相比原始query儿童防沉迷,还拓展了大量的相关信息,例如游戏、网络、未成年人等,这些词汇很直观地,能扩展更多概念解释,对提升召回肯定是有好处的。

改写是改写玩了,但是要放进去检索,更好地进行召回,还是有些技巧的,按照论文,对字面检索和向量检索,都有一些特定的设计。

首先是字面检索,因为模型的生成多半会很长,所以在相似度计算的过程中,会稀释,所以在拼接过程中,需要对原始query复制几份再来拼接,用公式来描述,就是这样,其中d‘是大模型生成的内容,n是复制的次数:

然后是向量检索,因为向量召回的泛化能力是比较强的,因此不需要复制,直接拼接起来就好了:

然而相比字面检索,最大的困难并不在拼接,而在于训练,因为输入和文档仍旧不是一个分布(两者语义并不相同甚至完全不相同,只是匹配),所以仍旧离不开训练,不过为了体现拓展的部分的效果,此处还是使用比较朴素的训练方案,即根据用户点击之类的行为构造数据集,并使用BM25等的方式获得难负例。

实验结果和分析

从实验结果看,收益无疑是巨大的,此处就不赘述了,这里作者的分析其实更加有收获,我直接把重要的结论和解释总结一下:

  • 模型大小的提升对最终的召回效果是有收益的,随着模型变大,生成的文本对预测效果有提升。

  • 该方案本身对向量表征模型的训练,也是有明显收益的。

  • 对字面检索而言,原始query和大模型生成的回复之间,是互补关系,两者组合才能真正达到提升。

然后是作者用两个案例做了分析,来探索本方案生效的机理和可能的缺陷。

  • 首先,大模型直接生成一个答案,很大程度拉近了检索词和文档之间在语义空间上的相似,因为本质上两者都是回复问题。

  • 其次,大模型的生成可能并不正确(幻觉问题),尤其是关键部位(例如时间、关键名词之类的),这个关键部位的错误可能会导致最终的检索错误。

总之是有优势也有劣势吧,在实际应用中,还是要多做实验和分析,看看问题最终来决定。

个人思考

本文的思路其实挺简单的,但是背后做的实验和分析很有价值,在现实应用中也很有意义,所以单独把这篇文章进行了分享。然而在现实中,仍旧有很多细节问题还需要进一步考虑,我还没完全想好,不过应该是逃不开的:

  • 现实场景下的召回相似度应该如何计算,尤其是向量相似度,这里需要很多的数据支撑。

  • 召回后的下一步,仍旧依赖相对完善的精排模块,也需要考虑类似的匹配机制,否则即使召回层有了召回,排序层面也会被排到后面去。

  • 大模型本身的幻觉问题,会对召回带来很大的影响,该问题对召回还是有影响的,需要考虑如何尽可能剔除或者缓解。

  • 性能问题,依赖大模型是能够有所提升,但是多一次的大模型的请求,无疑让整体耗时有了很大的影响。(这点在论文中也有提及)

进技术交流群请添加AINLP小助手微信(id: ainlp2)

请备注具体方向+所用到的相关技术点

![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSJADkmZ2IX6Z23znAibuEevotDMq9iaMxiapK7jfMibiauGFkycicAJEs6x5U9SGyDJZ0S1tRed9TPNUUDQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括LLM、预训练模型、自动生成、文本摘要、智能问答、聊天机器人、机器翻译、知识图谱、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP小助手微信(id:ainlp2),备注工作/研究方向+加群目的。

  


  


![](https://api.allorigins.win/raw?url=https://mmbiz.qpic.cn/mmbiz_jpg/nW2ZPfuYqSKABHCqVVQkVYPrM4XY1vsd0iaeuXzyJnoFc8cibd5mYb4wdA3WMQtiaPVmr0XLZHMuVibqWncibpnTSnQ/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1)

阅读至此了,分享、点赞、在看三选一吧🙏

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具