大模型时代下的知识库问答实践:如何快速利用大模型生成可信答案?

科技   2024-06-25 08:16   浙江  

朗新研究     您身边的业务专家



前言


RAG是前大模型时代的一种知识库问答实现范式,其思想虽简洁,但在工程实践中却颇具挑战。其中,信息检索和内容生成两大核心环节决定了RAG应用系统的性能表现。尽管RAG的应用潜力可延伸至图像等多元化领域,但本文聚焦于文本类数据的探讨。在之前的篇章中,我们详细探讨了信息检索中关键的语义检索技术在RAG中的应用,详见《大模型时代下的知识库问答实践:如何借助语义检索更快更准确地召回上下文?本文则作为第二篇内容,专注于内容生成方面的探讨。


技术挑战


RAG实现范式中的内容生成模块承担着答案生成的重要任务。它依赖于检索模块所召回的上下文信息,并利用大模型(LLM)的上下文理解、归纳、推理等强大能力来抽取或生成答案(如图1所示)。作为应答结果的提供方,内容生成模块在保障答案可信度和准确性的同时,还需满足在线系统对低延迟性能的要求。

图1  基本实现流程

(一)模型能力限制

在RAG系统的实现中,由于成本、性能等实际因素的考量,项目通常选择使用30B以下(如6B、14B等)规模的开源模型。然而,当前这些模型在指令遵循、规划和推理等关键能力上仍存在一定的局限,应用中可能会出现准确性或稳定性方面的问题。此外,随着LLM技术的快速发展和不断迭代,模型能力也在持续提升。因此,RAG系统需要具备快速迭代的能力,以便及时适应技术更新的步伐。

(二)生成内容偏差

由于LLM本质上是一种概率语言模型,它存在“幻觉”现象,即生成的内容可能并不完全准确或可靠。然而,在知识问答的应用场景中,对答案的正确性和可信度有着极高的要求。因此,为了确保生成内容的准确性,需要设计额外的机制对模型的输出结果进行引导或干预。

(三)部署成本挑战


即便选择相对较小的10B级别的模型,其计算复杂度和对显存的需求也远超传统应用,因此模型硬件部署需要充分考虑硬件资源的投入和优化,以确保系统的高效运行和成本控制。


总体思路

    
本文在应用框架设计、内容生成控制、模型推理优化等层面进行了一系列的探索实践,以期能够缓解或者解决上述问题。

可扩展的系统框架。应用框架支持支持配置化和插件机制,能够有效地屏蔽模型服务接口与应用之间的差异,从而最小化模型切换的成本,使得系统能够灵活地适应不同规模和能力的模型,提升了系统的可扩展性和灵活性。

可控的内容生成过程。通过特别构造的Prompt来约束和控制LLM的输出结果,确保生成的内容更加符合期望。此外,实践发现,相比粗粒度的任务,在更具体的任务上,LLM的输出往往更可控,基于此特性,我们可以通过自动或者人工设计,将答案生成过程拆解为更细粒度的可管理子任务,以引导大模型生成可信度更高的内容。

模型压缩和推理加速。大模型压缩技术包括量化、蒸馏、剪枝和低秩分解等方法,其中量化是开源模型中常见的一种手段。简单来说,量化就是在保证较低的推理精度损失的前提下,将具有连续取值(通常为float32或大量可能的离散值)的浮点型权重近似为有限多个离散值(通常为int8)的过程。由于使用较少的位数表示浮点数据,因此能够有效地减小模型尺寸,从而减少推理时的内存消耗。前主流的LLM通常提供从8bit到4bit等多种量化版本,以适应不同的需求。


推理加速也是近期业界热点研究方向,有不少较成熟的开源框架。它是通过充分利用并行计算、显存读写优化、缓存等技术,来加速推理过程。我们可以综合利用模型压缩和推理加速技术,提升推理性能并降低部署成本。



关键技术实现


本章基于电力知识库问答系统的实践过程,详细阐述了应用框架、内容生成、模型部署等关键层面的技术实现,包括其技术原理、具体的实现策略以及相应的结果分析。

(一)统一应用接口管理


为了能够快速接入和应用不同的模型,本文采用两层架构以解耦模型和应用之间的依赖。在模型服务层,遵循被业界广泛接受的OpenAI API“标准”,支持快速接入自定义模型服务或者各类第三方推理引擎;在应用驱动层,集成包括Prompt管理、上下文管理和模型路由等功能,以满足不同模型应用接口的个性化要求,且无缝、动态地切换所需的模型。

图2  LLM应用两层架构

(二)内容生成


本章节专注于从大型语言模型(LLM)的角度,介绍电力知识库问答系统中与内容生成相关的技术。这些技术涵盖了影响内容生成结果的各种处理策略、QA语料生成以及微调知识注入等方面。

1、上下文组合策略


在内容生成环节,我们采用了基于相似度组合的策略来召回多个文本块,并将它们组合成上下文。不同的上下文组合方式会直接影响LLM的内容生成质量。根据Lost in the Middle: How Language Models Use Long Contexts》论文中的实验结论,大型语言模型在生成内容时往往更加关注上下文的开始和结束位置。


基于这一发现,本文提出了一种实现策略:根据精确重排的结果,将最相关的信息优先放置在上下文的首尾两侧。通过实践测试,我们发现这种组合方式有助于提升模型Prompt的健壮性,并在一些场景中能够更稳定地保证生成答案的准确性。


图3  包含答案的文本块位置对准确性的影响
(图片引用自https://arxiv.org/pdf/2307.03172.pdf)


2、答案生成方案


通常答案生成方案可以分为抽取式和生成式两类。

抽取式:抽取式的典型方式主要基于阅读理解实现,它是文本问答任务的一个重要分支。这种方案要求根据给定的上下文和问题,从上下文中抽取出相应的答案。其优势在于描述型问题场景中表现良好,且抽取得到的答案具有较高的可信度。然而,其缺点也显而易见,即不具备归纳和推理能力,因此在处理较复杂的场景时表现不佳

生成式:生成式方案的代表模型包括早期的GPT2、T5以及当前的LLM。LLM通过专门构造的Prompt,能够根据问题从上下文中生成答案。这种方案的优势在于具备强大的归纳能力,能够适应多样化、复杂的场景。然而,其生成的答案有时可能包含一定的幻觉,导致结果的不可控性

在综合考虑指令遵循能力、上下文理解、内容归纳等方面的能力后,本文选择了基于LLM的生成式方案。


3、多步骤答案生成


在答案生成过程中,最简单的方式是直接通过Prompt让大模型根据上下文和问题直接给出答案,如下图4。然而,这种方式的缺点是稳定性不足,不同的问题和上下文都有可能导致模型对Prompt的理解出现偏差。在问答场景中,典型问题就是无法保证模型会遵循上下文内容进行作答,而是可能给出错误或者编造的答案。

图4  答案生成Prompt示例


为了减轻这一问题的影响,本文提出了一种多步骤答案生成策略,将答案生成过程拆解为一系列细粒度的子任务:

首先,让大模型判断上下文是否满足答案生成的要求,如果无法满足,则给出拒识结果;其次让大模型根据上下文和问题生成答案;最后,再次让大模型判断第2步生成的答案是否正确。

通过上述多步骤策略,可在一定程度上提升模型回答的准确性和稳定性。

4、SELF-RAG


上节“多步骤答案生成”详细阐述了基于人工预设的固定执行流程的方法。然而,《SELF-RAG》论文则提出了一种更为激进的框架,它不仅对子任务进行了更细致的拆解,还通过进一步训练模型,使其能够通过生成reflection tokens自适应地检索和应答,自发地驱动整个RAG(Retrieval-Augmented Generation,检索增强生成)的执行过程。本文不深入探讨其具体的训练实现过程,只参考其推理过程的思路:

首先,判断是否通过检索模型召回上下文,这本质上是评估模型是否能够在不依赖外部信息的情况下直接回答问题;然后判断召回的上下文是否和问题相关;其次判断模型的回答是否是来源于召回的上下文,输出的支持度细分为完全支持、部分支持和不支持三类;最后,判断其生成的回答是否有价值,即是否真正回答了用户的问题。

图5  SELF-RAG 推理算法

(图片引用自https://arxiv.org/pdf/2310.11511.pdf)


综上所述,SELF-RAG框架能够自发地驱动并执行问答过程,同时具备自我评估和调整的能力,展现出了更高的智能化水平。这种技术值得我们进一步探讨其工程落地的可行性和应用前景。

5、QA语料生成


大模型以其卓越的知识输出能力,为训练语料的自动生成提供了巨大的应用价值。其中最知名的例子就是《SELF-INSTRUCT》论文提出的方案,它能够自动生成多样化的指令遵循语料。本文借鉴了这一思想,实现了一种基于类似阅读理解任务的Prompt方案,利用私有部署的较小规模大模型,自动生成QA语料。作为问答系统的重要辅助手段,这样做有以下好处

第一使用私有模型能够确保企业数据的安全,有效防止数据泄露;第二大幅减少了人工采编QA语料的工作量,因为其通常需要人工二次审核以过滤无效或错误的QA结果;第三随着QA数据量的增加,Q-Q对称检索的比例也随之提高,使得对称检索任务变得更加容易,间接提升了检索效果和质量;第四,生成的高质量QA数据进一步被用于微调向量模型和Rerank模型,优化了问答系统的整体性能。

QA语料生成的质量直接取决于大模型的能力。实验结果表明,本文选用的ChatGLM3-6b模型能够较好地生成QA对,并且生成速度较快。然而,其不足之处在于无法直接输出json或yaml等格式的结果。为了弥补这一缺陷,本文对ChatGLM3-6b模型进行了微调,使其能够更好地遵循格式指令,满足特定输出格式的需求。

图6  自动生成的QA对示例(json格式)

6、微调知识注入


微调是一种通过直接调整模型参数来实现知识注入的方法,与检索增强中通过Prompt动态注入信息的方式不同。本文尝试采用微调手段来提升知识问答系统的质量。

鉴于语料规模、成本等因素的限制,本文选择在现有的Chat模型基础上进行微调以注入QA知识。具体的实现步骤如下:

首先,进行领域QA语料准备,这些语料包括人工收集的以及基于上节介绍的使用大型语言模型(LLM)生成的QA语料(总计约2k问答对);其次,进行微调,基于Chat模型,采用QLoRA等PEFT技术微调QA语料;最后进行,参数合并。合并原生模型参数和QLoRA参数,形成最终模型版本。

通过初步的实验和测试,我们发现微调方案在知识注入过程中存在以下问题(以Llama-2-7b-chat模型为例):

第一在低强度训练条件下,如仅进行5个epoch的训练或仅微调部分模块(如q_proj, v_proj),虽然能在一定程度上改变答案的分布概率,但无法有效地让模型记住训练中的知识。

第二高强度训练条件下,如进行50个epoch以上的训练或微调全部相关模块(包括q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj),虽然可以较好地实现知识注入,但这种“暴力”注入方式相当于过拟合,容易导致所谓的“灾难性遗忘”,即在一定程度上影响模型的其他既有能力。


第三为Question提供多个相似问题,可以一定程度上缓解训练强度和知识注入的矛盾。

综上所述,对于知识库问答场景而言,微调作为一种知识注入方法,除了面临模型方案自身的局限性,例如需要定期训练以引入新知识、语料和训练成本较高等外,还存在学习困难等问题。因此,在本文中,我们将微调仅视为一个辅助机制。


(三)模型量化和推理加速


本文的模型部署方案支持在各种主流开源模型上使用推理加速技术,以下以千问14B模型为例进行介绍:

1、压缩技术:采用基于GPTQ的int8量化模型。经过不完全的对比测试,模型的推理精度下降在可接受范围内,显存占用显著降低,如下图7。

图7  量化后最低所需显存对比


2、推理加速:针对推理过程,我们选择了开源的vLLM推理加速框架。该框架采用PagedAttention等技术,有效地管理张量的显存使用,有效缓解了显存瓶颈问题。此外,通过KV cache、并行计算等优化手段,实现了高速推理,使得在RTX4090 24G显卡上的性能相较于原生HuggingFace Transformers提升了10至20倍的吞吐量。以下是优化前后的对比结果:

图8  vLLM加速后内容生成时间对比


总结


综合本文对从信息检索到内容生成各个阶段实践的详尽介绍,我们可以看到,尽管RAG(Retrieval-Augmented Generation)作为大模型时代问答系统的主要实现方式,本质上并未脱离传统的pipeline架构,但其执行过程中仍然需要依赖各种NLP任务(如意图识别、指代消解、阅读理解等)作为“粘合剂”来推动整个流程。在实施上,除了传统的NLP模型外,现在的选择更为丰富,例如基于大型语言模型(LLM)的Prompt技术。

从这一角度来看,传统NLP中间层任务在当前的AI应用中仍然扮演着核心角色,远未走到被淘汰的边缘。此外,从大型语言模型的角度来看,除了其擅长的内容生成、指令遵循和规划推理能力外,它们也能够反过来帮助简化传统NLP任务的实现难度:

  • 大型语言模型能够将NLP问题从外部领域转化为内部问题,从而极大地简化了信息检索的复杂性。因此,在某些情况下,可以直接利用大型语言模型通过few-shot或zero-shot学习来实现NLP任务,减少了为特定任务训练小型模型所需的成本。

  • 大型语言模型的另一个重要应用是生成各类NLP任务的训练语料,这在很大程度上降低了构建专用NLP任务的难度。


RAG作为前大模型时代最适宜落地的应用场景之一,要做好并不容易,其所涵盖的内容也在不断扩展。囿于篇幅、时间和经验等因素,本文仅探讨了内容生成模块的常用策略,并未涵盖一些关键功能或方向,如长文档问答、多模态问答、归因分析、系统评估以及智能代理支持等,这些将是我们后续研究和开发的重点方向。抛砖引玉,欢迎大家的交流和互动。

【参考文献】

[1]SELF-RAG: LEARNING TO RETRIEVE, GENERATE, AND CRITIQUE THROUGH SELF-REFLECTION

https://arxiv.org/pdf/2310.11511.pdf

[2] SELF-INSTRUCT: Aligning Language Models with Self-Generated Instructions

https://arxiv.org/pdf/2212.10560.pdf

[3] Lost in the Middle: How Language Models Use Long Contexts

https://arxiv.org/pdf/2307.03172.pdf


审核:章胜

作者:黄映挺
部门:朗新科技集团技术研发中心



END



注:文章仅代表作者观点,欢迎转发和评论。转发、转载、转帖等须注明稿件来源:朗新研究院违者朗新研究院将依法追究责任,谢谢!






【概念热词】聚焦领域新趋势

数字化转型 综合能源服务 | 能源大数据 | 电力市场化 | 营商环境 | 乡村振兴 | 充电聚合 | 泛在物联网 | 新型电力系统 | 双碳战略 | AI与电力能源 | 绿证绿电 | 虚拟电厂 | 电力现货市场 | 报告解读 

【技术热词】探索技术创新与应用
电力大数据 | 产品技术 | 新技术应用实践 | 微服务技术实践 | 区块链技术 | 电力企业中台 | 移动应用实践

【业务热词】筑牢业务发展根基
营销趋势 | 网格化服务 | 客户标签 | 客户服务 | 营销服务运营 | 安全管理 | 渠道管理与运营 | 海外扩展 | 体验设计 | 充电桩运营 | 电动汽车充电 精益管理 | 电力营业厅 | 数字化供电所 | 负荷管理 


朗新研究院
展现朗新研究观点,包括不限于能源电力领域的深度观察,创新业务解决方案,行业热点评论、优秀产品及应用案例等。
 最新文章