0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

大模型外挂知识库优化-大模型辅助向量召回

深度学习自然语言处理 来源:NLP工作站 2023-09-08 16:50 次阅读

写在前面

大模型时代,通常采用向量召回的方式从文档库里召回和用户问题相关的文档片段,输入到LLM中来增强模型回答质量。

但是很多时候,用户的问题是十分口语化的,描述的也比较模糊,这样会影响向量召回的质量,进而影响模型回答效果。今天给大家带来一篇来自战士金大佬(@知乎战士金)的博文-大模型辅助向量召回。接下来分享两篇通过大模型的能力增强召回效果的文章,这两篇文章的内容都已经加入了langchain的标准组件,易用性还是比较好的,但是都有一些特定的使用场景。

Paper1:https://arxiv.org/abs/2212.10496
Paper2:https://arxiv.org/abs/2305.06983
知乎:https://zhuanlan.zhihu.com/p/653808554

HYDE

HYDE论文-Precise Zero-Shot Dense Retrieval without Relevance Labels,文章中强调了该文章主要适用于Zero-Shot场景。Zero-Shot指的是模型没有见过某个场景(或者某个数据集)的数据,就应用于该场景,和用数据训练模型以及在语言模型上下文中加入示例相对应。Zero-Shot体现了模型的迁移能力,我猜大部分同学都是在zero shot场景上使用向量化模型的,比如从网上下载个向量化模型权重,直接在自己的业务场景上用。其实,如果自己的业务场景有数据,微调一下向量化模型,在对应业务场景下召回率能提升不少。

既然论文题目强调了zero-shot,论文看的比较多的同学一定能马上反应过来,是不是在非zero shot(比如微调向量化模型)的场景下这方法效果就很一般呢?文章作者也给出了实验结果,该方法在结合微调过的向量化模型时,效果就没那么好了,非常依赖打辅助的LLM的能力。如果您有微调向量化模型的能力,这部分就可以跳过了。再强调一下,这篇文章是篇纯讨论召回的文章,最后的衡量指标也是nDCG和召回率这些指标,使用LLM单纯是为了提高召回效果的。

langchain链接:https://python.langchain.com/docs/use_cases/question_answering/how_to/hyde

论文思路非常简单:

  • Step1:用LLM根据用户query生成k个“假答案”。(大模型生成答案采用sample模式,保证生成的k个答案不一样,不懂LLM生成答案原理的同学可以看我这篇文章。此时的回答内容很可能是存在知识性错误,因为如果能回答正确,那就不需要召回补充额外知识了对吧。不过不要紧,我们知识想通过大模型去理解用户的问题,生成一些“看起来”还不错的假答案)
  • Step2:利用向量化模型,将生成的k的假答案和用户的query变成向量。
  • Step3:根据如下公式,将k+1个向量取平均:其中dk为第k个生成的答案,q为用户问题,f为向量化操作。

a9bb10c4-4e1e-11ee-a25d-92fbcf53809c.png

  • Step4:利用融合向量v从文档库中召回答案。融合向量中既有用户问题的信息,也有想要答案的模式信息,可以增强召回效果。

接下来我们从论文中挑一个比较重要的实验结果进行讨论。测试集为TREC DL19/20数据集,向量化模型使用的是Contriever模型,原始的该模型并未在TREC DL19/20数据集上训练过。模型有上标FT指的是向量化模型在TREC DL相关的数据集上微调过的。黄框标出来的是未使用hyde技术的baseline结果。绿框标出来的是未微调的向量化模型使用hyde技术的实验结果。红框标出来的是微调过的向量化模型使用hyde技术的实验结果。

a9d458ae-4e1e-11ee-a25d-92fbcf53809c.png

实验指标为NDCG@10,可以发现,对于没有微调过的向量户化模型(zero shot场景),hyde还是非常有用的,并且随着使用的LLM模型的增大,效果不断变好(因为LLM的回答质量提高了)。非常有意思的一点是是对于微调过的向量化模型,如果使用比较小的LLM生成假答案(小于52B参数量),hdye技术甚至会带来负面影响。

因为领域微调过的向量化模型性能已经不错了,NDCG@10指标能达到60多,LLM生成的假答案的知识性错误带来的负面影响大于回答模式信息带来的正面影响。所以向量化模型模型还是能微调就微调吧。

FLARE

和上一篇文章相比,FLARE论文比较新一点,评估的指标是直接看最后LLM的回答效果的,而非是向第一篇文章那样只讨论召回准确率。这篇文章涉及到针对同一个问题的多次召回,因此比较适合长文本回答。如果您所面对的场景大部分问题用一两句话就能回答,那收益就不是太大了。

langchain链接:https://python.langchain.com/docs/use_cases/question_answering/how_to/flare

对于大模型外挂知识库,大家通常的做法是根据用户query一次召回文档片段,让模型生成答案。只进行一次文档召回在长文本生成的场景下效果往往不好,生成的文本过长,更有可能扩展出和query相关性较弱的内容,如果模型没有这部分知识,容易产生模型幻觉问题。一种解决思路是随着文本生成,多次从向量库中召回内容。

有三种常用的多次召回策略:

  • a. 每生成固定的n个token就召回一次。
  • b. 每生成一个完整的句子就召回一次。
  • c. 将用户query一步步分解为子问题,需要解答当前子问题时候,就召回一次。

已有的多次召回方案比较被动,召回文档的目的是为了得到模型不知道的信息,a、b策略并不能保证不需要召回的时候不召回,需要召回的时候触发召回。c.方案需要设计特定的prompt工程,限制了其通用性。作者在本文里提出了两种更主动的多次召回策略,让模型自己决定啥时候触发召回操作。

策略1

通过设计prompt以及提供示例的方式,让模型知道当遇到需要查询知识的时候,提出问题,并按照格式输出,和toolformer的模式类似。提出问题的格式为[Serch(“模型自动提出的问题”)](称其为主动召回标识)。利用模型生成的问题去召回答案。召回出答案后,将答案放到用户query的前边,然后去掉主动召回标识之后,继续生成。当下一次生成主动召回标识之后,将上一次召回出来的内容从prompt中去掉。下图展示了生成拜登相关答案时,触发多次召回的例子,分别面对拜登在哪上学和获得了什么学位的知识点上进行了主动召回标识的生成。

a9edc5b4-4e1e-11ee-a25d-92fbcf53809c.png

该方法也存在一些缺陷:

  • 1.LLM不愿意生成主动召回标识。解决方法:对"["对应的logit乘2,增加生成"["的概率,"["为主动召回标识的第一个字,进而促进主动召回标识的生成。
  • 2.过于频繁的主动召回可能会影响生成质量。解决方法:在刚生成一次主动召回标识、得到召回后的文档、去掉主动召回标识之后,接下来生成的几个token禁止生成"["。
  • 3.不微调该方案不太可靠,很难通过few shot的方式让模型生成这种输出模式。

策略2

策略1存在的第3点缺陷比较知名。因此作者提出了另外一个策略。该策略基于一个假设:模型生成的词对应该的概率能够表现生成内容的置信度。(传统的chatgpt接口是用不了策略2的,因为得不到生成每个词的概率。)

分为4个步骤:

  • Step0:根据用户的query,进行第一次召回,让模型生成答案。
  • Step1:之后,每生成64个token,用NLTK工具包从64个token里边找到第一个完整句子,当作“假答案”,扔掉多余的token。(和第一篇文章思想一样,利用LLM生成符合回答模式的“假答案”)
  • Step2:如果“假答案”里有任意一个token对应的概率,低于某一阈值,那么就利用这个句子进行向量召回。触发召回的“假答案”很可能包含事实性错误,降低召回准确率。设计了两种方法解决这个问题。方法1:将“假答案”中生成概率低于某一阈值的token扔掉(低概率的token很有可能存在错误信息),然后再进行向量召回。方法2:利用大模型能力,对“假答案”中置信度低的内容进行提问,生成一个问题,用生成的问题进行向量召回。
  • Step3:利用召回出来的文本,重新生成新的“真答案”,然后进行下一个句子的生成。

依然针对拜登的问题,下图给出了例子。

aa0ce066-4e1e-11ee-a25d-92fbcf53809c.png

接下来介绍一下实验结果。先声明一下,这篇文章用的召回器(向量化模型)是BM25,2009年被提出,基于统计学的原理,属于一种词袋模型,效果一般。笔者认为,如果用一些效果更好的基于神经网络的召回器,本文提出的方法提升就没那么大了。

召回器榜单:
中文:https://github.com/FlagOpen/FlagEmbedding/tree/master/C_MTEB
英文:MTEB Leaderboard - a Hugging Face Space by mteb

多次召回方案在更加开放的任务类型上提升比较小。如果是召回并回答一些模型不知道的垂类知识,FLARE效果提升应该是还不错的。

aa1c49d4-4e1e-11ee-a25d-92fbcf53809c.png

作者证明了用生成”假答案“进行召回(Next)效果比用前一句进行召回效果更好(印证了HYDE观点)。

aa2a976e-4e1e-11ee-a25d-92fbcf53809c.png

当一个句子里生成的所有单词的概率都大于一个阈值t时,才不触发召回文档。当t=0%时,不触发召回文档;t=100%时,每次都触发召回。下图展示了不同的t的情况下LLM回答效果。可以发现t过大或者过小都不是最好的。总体上来看t=50%比较好。

aa3e377e-4e1e-11ee-a25d-92fbcf53809c.png

总结

分享的这两篇文章都需要多次调用LLM,来增强召回,虽然在一些场景下比较有效,不过开销感觉有点太大了。其实最简单有效的提高召回效果的方式就是在自己业务的数据集上微调一下向量化模型。



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 向量
    +关注

    关注

    0

    文章

    55

    浏览量

    11649
  • 数据集
    +关注

    关注

    4

    文章

    1200

    浏览量

    24613
  • 大模型
    +关注

    关注

    2

    文章

    2257

    浏览量

    2328

原文标题:大模型外挂知识库优化-大模型辅助向量召回

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于训练阶段使用知识库+KNN检索相关信息辅助学习方法

    上面收的引入知识库+KNN的方法,缓解了模型参数需要强记忆训练样本的问题。此外,文中还通过KNN检索结果来指导模型的学习过程。
    的头像 发表于 10-09 17:33 1558次阅读

    模型卷价格,向量数据“卷”什么?

    被大模型“带飞”这一年,向量数据才刚刚写下序言
    的头像 发表于 05-23 09:24 1728次阅读
    大<b class='flag-5'>模型</b>卷价格,<b class='flag-5'>向量</b>数据<b class='flag-5'>库</b>“卷”什么?

    【实操文档】在智能硬件的大模型语音交互流程中接入RAG知识库

    非常明显的短板。尽管这些模型在理解和生成自然语言方面有极高的性能,但它们在处理专业领域的问答时,却往往不能给出明确或者准确的回答。 这时就需要接一个专有知识库来满足产品专有和专业知识的回复需求,理论
    发表于 09-29 17:12

    基于知识库的智能策略翻译技术

    提出基于知识库的策略翻译方法,设计策略翻译组成结构,分析策略知识及其表示形式,建立动态可扩展的策略知识库,开发可扩展的策略编译器和策略组装器。实例测试表明,该
    发表于 04-22 09:42 11次下载

    一种基于解释的知识库综合

    知识库的解释出发,对概念和概念间关系的解释进行了分析,定义了知识库系统的最小概念集合,设计了生成最小概念集合的方法,提出了基于解释的知识库综合算法,讨论了该
    发表于 05-07 20:44 16次下载

    领域知识库的研究与设计

    领域知识库的构建有利于知识的检索和共享。分析了领域知识库应具备的条件,指出构建领域知识库的有效方法;介绍了构建知识库的一般步骤,并设计出领域
    发表于 08-29 14:39 0次下载

    NXP NFC知识库

    NXP NFC知识库
    发表于 12-30 17:32 49次下载

    本体知识库的模块与保守扩充

    模块化是软件工程的一种方法,近年来被引入到本体领域,用以支持本体的重用和本体的整合。已有的工作没有讨论同时含有TBox和ABox的本体知识库的模块化的相关问题。在定义本体知识库的模块和知识库的保守
    发表于 11-24 09:58 0次下载

    虚拟仪器知识库文件的结构组成和知识库文件自动生成器的设计与应用

    在前几章中,重点介绍了VISA规范、仪器驱动程序规范及软面板规范,这些构成了虚拟仪器及系统设计的关键部分。为了将VXI产品更有效地集成到虚拟仪器系统中去,VXI总线即插即用系统联盟还定义了虚拟仪器知识库文件的结构。本章介绍了虚拟仪器知识库文件的结构组成,并重点介绍了
    发表于 12-05 14:21 2次下载
    虚拟仪器<b class='flag-5'>知识库</b>文件的结构组成和<b class='flag-5'>知识库</b>文件自动生成器的设计与应用

    介绍几篇EMNLP&apos;22的语言模型训练方法优化工作

    训练过程中引入知识库,提升语言模型对事实知识的抽取能力——Pre-training Language Models with Deterministic Factual Knowledge; 针对目标域效果
    的头像 发表于 12-22 16:14 934次阅读

    借助亚马逊云科技大语言模型等多种服务打造下一代企业知识库

    /算法/软件工程师的人力投入和包括硬件在内的物力投入。其次,为了进一步提高搜索准确率,如何引导用户搜索描述更加准确和充分利用用户行为优化搜索引擎也是常见的用户痛点。此外,如何根据企业知识库直接给出用户提问的答案
    的头像 发表于 11-02 11:22 624次阅读
    借助亚马逊云科技大语言<b class='flag-5'>模型</b>等多种服务打造下一代企业<b class='flag-5'>知识库</b>

    如何基于亚马逊云科技LLM相关工具打造知识库

    背景 本篇将为大家阐述亚马逊云科技大语言模型下沉到具体行业进行场景以及实施案例的介绍,是亚马逊云科技官方《基于智能搜索和大模型打造企业下一代知识库》系列的第四篇博客。感兴趣的小伙伴可以进入官网深入
    的头像 发表于 11-23 17:53 946次阅读
    如何基于亚马逊云科技LLM相关工具打造<b class='flag-5'>知识库</b>

    如何手撸一个自有知识库的RAG系统

    用于自然语言处理任务,如文本生成、问答系统等。 我们通过一下几个步骤来完成一个基于京东云官网文档的RAG系统 数据收集 建立知识库 向量检索 提示词与模型 数据收集 数据的收集再整个RAG实施过程中无疑是最耗人工的,涉及到收集、
    的头像 发表于 06-17 14:59 472次阅读

    视语坤川大模型智能体平台亮相2024世界人工智能大会

    视语坤川大模型智能体平台兼容多种多尺寸的大语言模型及多模态模型,并可以使用训推平台组件进行模型微调,以适配不同的应用场景。平台还具备外挂
    的头像 发表于 07-09 14:38 210次阅读
    视语坤川大<b class='flag-5'>模型</b>智能体平台亮相2024世界人工智能大会

    科技云报到:大模型时代下,向量数据的野望

    科技云报到:大模型时代下,向量数据的野望
    的头像 发表于 10-14 17:18 182次阅读