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

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

3天内不再提示

如何在不微调的情况下提高RAG的准确性?

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 2024-01-05 10:26 次阅读

数据科学家、AI 工程师、MLOps 工程师和 IT 基础设施专业人员在设计和部署检索增强生成(RAG)工作流时,必须考虑各项因素,比如大语言模型(LLM) 核心组件以及评估方法等等。

这是由于 RAG 是一个系统,而不仅仅是一个或一组模型。该系统由若干阶段组成,RAG 101:揭秘检索增强生成工作流一文对这些阶段进行了深入讨论。在这些阶段中,您都可以根据需求做出设计决策。

以下是一些常见问题与回答:

何时应微调 LLM?何时又该使用 RAG?

在 LLM 的世界里,您可以根据应用的具体需求和限制,为 LLM 选择微调、参数有效微调(PEFT)、提示工程或 RAG。

微调通过使用特定领域的数据集,更新模型大部分或全部参数,从而定制一个专门用于特定领域的预训练 LLM。这种方法需要耗费大量资源,但能为专门的用例提供很高的准确性。

PEFT 侧重于模型的一个子集,因此只需更新较少的参数就能修改预训练 LLM。该方法平衡了准确性与资源使用,在数据和计算需求可控的情况下,为提示工程提供改进。

提示工程在不改变模型参数的情况下,通过操纵 LLM 的输入来引导模型输出。这是一种最节省资源的方法,适用于数据和计算资源有限的应用。

RAG 利用外部数据库中的信息增强了 LLM 提示功能,它本质上是一种复杂的提示工程。

使用哪种技术并不是关键,实际上,这些技术可以串联使用。例如,可以将 PEFT 集成到 RAG 系统中,以进一步完善 LLM 或嵌入模型。使用哪种方法最好取决于应用的具体要求,同时还要兼顾准确性、资源可用性和计算限制。

如要进一步了解用于提高特定领域准确性的自定义技术,请参阅选择大语言模型自定义技术:https://developer.nvidia.com/blog/selecting-large-language-model-customization-techniques/

使用 LLM 构建应用程序时,首先要使用 RAG,借助外部信息提升模型的响应性。这种方法可以快速提高相关性和深度。

之后,如果您需要提高特定领域的准确性,可以采用前面所述的模型自定义技术。该流程分为两步,既能够借助 RAG 进行快速部署和通过模型定制实现有针对性的改进,又兼顾了高效开发和持续改进策略。

如何在不微调的情况下提高 RAG 的准确性?

简而言之,在利用 RAG 的企业解决方案中,获得准确性是至关重要的,而微调只是一种可能提高 RAG 系统准确性的技术,反之亦然。

首先,也是最重要的一点,是找到一种衡量 RAG 准确性的方法。在起点都不清楚的情况下,改进又从何谈起?目前有几个评估 RAG 系统的框架,如 Ragas、ARES 和 Bench 等。

在对准确性进行评估后,就可以在无需进行微调的情况下,通过多种途径来提高准确性。

虽然这听起来很麻烦,但首先要检查并确保您的数据被正确解析和加载。例如,当文档包含表格甚至图像时,某些数据加载器可能会遗漏文档中的信息。

在摄取数据后,要对其进行分块,也就是将文本分割成片段的过程。分块可以是固定长度的字符,但也有许多种其他的分块方法,如句子分割和递归分块等。文本的分块方式决定了如何将其存储在嵌入向量中以便检索。

除此之外,还有许多索引和相关检索模式。例如,可以为不同类型的用户问题构建多个索引、可以根据 LLM 将用户查询引导至相应的索引等。

检索策略也是多种多样的。最基本的策略是利用索引的余弦相似性,BM25、自定义检索器或知识图也可以用来提高检索效率。

根据特殊要求,对检索结果进行重新排序也可以提高灵活性和准确性。查询转换可以很好地分解更加复杂的问题。即使只是改变 LLM 的系统提示,也能极大地提高准确性。

归根结底,重要的是要花时间进行试验,并衡量各种方法所产生的准确性变化。

像 LLM 或嵌入模型这样的模型只是 RAG 系统的一部分。有很多方法可以在不需要进行任何微调的情况下改进 RAG 系统,使其达到更高的准确性。

如何将 LLM 连接到数据源?

有多种框架可以将 LLM 连接到数据源,如 LangChain 和 LlamaIndex 等。这些框架提供评估程序库、文档加载器、查询方法等各种功能,新的解决方案也层出不穷。建议您先了解各种框架,然后选择最适合您应用的软件和软件组件。

RAG 能否列出检索数据的来源?

可以。列出检索数据的来源能够改善用户体验。在 GitHub 资源库中的 /NVIDIA/GenerativeAIExamples 的 AI 聊天机器人 RAG 工作流示例中

RAG 需要哪类数据?如何确保数据安全?

目前,RAG 支持文本数据。随着多模态用例研究的深入,RAG 系统对图像和表格等其他形式数据的支持也在不断改进。您可能需要根据数据及其位置编写额外的数据预处理工具。LlamaHub 和 LangChain 提供了多种数据加载器。如要进一步了解如何使用链构建强化管线,请参阅保护 LLM 系统不受提示注入的影响:https://developer.nvidia.com/zh-cn/blog/securing-llm-systems-against-prompt-injection/

确保数据安全对企业来说是至关重要的。例如,某些索引数据可能只针对特定用户。基于角色的访问控制(Role-based access control, RBAC)可以根据角色来限制对系统的访问,从而实现数据访问控制。比如,在向矢量数据库发出请求时,可以使用用户会话 token,这样就不会返回超出该用户权限范围的信息。

许多用于保护环境中模型的术语,与用于保护数据库或其他关键资产的术语相同。您需要考虑您的系统将如何记录生产管线产生的活动(提示输入、输出和错误结果)。虽然这些活动可以为产品的训练和改进提供丰富的数据集,但它们同时也是 PII 等数据泄漏的来源,因此必须像管理模型管线本身一样谨慎管理。

人工智能模型有许多常见的云部署模式。您应该充分利用 RBAC、速率限制等工具以及此类环境中常见的其他控制措施,来提高 AI 部署的稳健性。模型只是这些强大管线中的一个元素。

与终端用户的交互性质是所有 LLM 部署的工作重点之一。RAG 管线大部分都围绕自然语言输入和输出。您应该考虑如何通过输入/输出调节来确保体验符合一致的期望。

人们可能会用多种不同方式提问。您可以通过 NeMo Guardrails 等工具助 LLM “一臂之力”,这些工具可以对输入和输出进行二次检查,以确保系统处于最佳运行状态、解决系统所要解决的问题,并引导用户到其他地方解决 LLM 应用无法处理的问题。

如何加速 RAG 管线?

数据预处理

数据去重是识别并删除重复数据的过程。在对 RAG 数据进行预处理时,可以使用数据去重,减少为检索而必须建立索引的相同文档数量。

NVIDIA NeMo Data Curator 使用 NVIDIA GPU,通过并行执行最小哈希算法、Jaccard 相似性计算和连接组件分析来加速数据去重,可以大大减少数据去重所需的时间。

另一个方法是分块。由于下游嵌入模型只能对低于最大长度的句子进行编码,因此必须将大型文本语料库分成更小、更易于管理的语块。流行的嵌入模型(如 OpenAI)最多可以编码 1,536 个词元。如果文本的词元超过这个数量,就会被截断。

NVIDIA cuDF 可通过在 GPU 上执行并行数据帧操作来加速分块处理,可以大大减少对大型语料库进行分块处理所需的时间。

最后,您可以在 GPU 上加速分词器,分词器负责将文本转换成整数词元供嵌入模型使用。文本分词过程的计算成本很高,对于大型数据集来说尤其如此。

索引和检索

RAG 非常适合经常更新的知识库,经常需要重复生成嵌入。检索是在推理时进行,因此要求实现低延迟。NVIDIA NeMo Retriever 可以加速这些流程。NeMo Retriever 用于提供最先进的商用模型和微服务,这些模型和微服务专为实现最低延迟和最高吞吐量而优化。

LLM 推理

LLM 至少可用于生成完全成型的回答,还可用于查询分解和路由选择等任务。

由于需要多次调用 LLM,低延迟对于 LLM 至关重要。NVIDIA NeMo 包含用于模型部署的 TensorRT-LLM,可优化 LLM 以实现突破性的推理加速和 GPU 效率。

NVIDIA Triton 推理服务器也可以部署经过优化的 LLM,以实现高性能、高成本效益和低延迟的推理。

有哪些办法可以改善聊天机器人的延迟?

除了建议使用 Triton 推理服务器和 TensorRT-LLM 来加速 RAG 管线(如 NeMo 检索器和 NeMo 推理容器等)外,您还可以考虑使用流式传输来改善聊天机器人的感知延迟。响应可能用时很久,流式传输用户界面可先显示部分已准备好的内容,减少可感知的延迟。

也可以考虑针对您的用例使用经过微调的较小 LLM。通常情况下,较小的 LLM 的延迟远低于较大的 LLM。

一些经过微调的 7B 模型在特定任务(如 SQL 生成)上的准确性已经超过了 GPT-4。例如,ChipNeMo 是 NVIDIA 为帮助公司内部工程师生成和优化芯片设计软件而定制的 LLM,该模型使用的就是 13B 微调模型,而不是 70B 参数模型。TensorRT-LLM 提供的闪存、FlashAttention、PagedAttention、蒸馏和量化等模型优化功能适合在本地运行规模较小的微调模型,这些模型可减少 LLM 所使用的内存。

LLM 的响应延迟取决于首个词元的生成时间(TTFT)和单个输出词元的生成时间(TPOT)。

7e510622-aaf4-11ee-8b88-92fbcf53809c.png

对于较小的 LLM 来说,TTFT 和 TPOT 都会比较低。

开始在您的企业中构建 RAG

通过使用 RAG,您可以轻松地为 LLM 提供最新的专有信息,并构建一个能够提高用户信任度、改善用户体验和减少幻觉问题的系统。







审核编辑:刘清

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

    关注

    206

    文章

    27052

    浏览量

    201437
  • SQL
    SQL
    +关注

    关注

    1

    文章

    738

    浏览量

    43466
  • LLM
    LLM
    +关注

    关注

    0

    文章

    202

    浏览量

    233

原文标题:RAG 101:检索增强生成相关问题解答

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    何在更换固件的情况下控制cyusb3014在USB 2.0和USB 3.0模式的读写速度?

    您好,我想通过上层机测试cyusb3014在 USB 2.0和 USB 3.0模式的读写速度。 如何在更换固件的情况下控制是通过上位机以 USB 2.0 还是 USB 3.0 速度
    发表于 02-27 06:24

    系统快速、稳定性和准确性之间的权衡

    度内无规律的波动,如果我需要得到一个较为稳定准确的温度,我可以求最近10次采集的数据的平均值,这样可以得到一个相对准确的温度,但系统快速降低,且侧到的温度有滞后,我们需要怎么求得一
    发表于 07-28 11:42

    求教高手,如何在两个电源接地连通的情况下电路有效运行?

    何在两个电源接地连通的情况下电路有效运行。
    发表于 07-01 10:52

    如何提高工程预算的准确性

    ,工程结束后,要进行决算,最终确定工程的总支出。提高工程预决算的准确性,对规范***投资管理,合理确定工程造价,提高资金的使用效率,有着极为重要的现实意义。一、造成工程预决算不准确的原
    发表于 07-25 17:35

    何在联网的情况下校正时间?

    设计了一套基于51单片机的电能计量系统,其中用到DS1302的时钟做时间,问题是,如果时间不正确了,如何在没联网的情况下校正时间?感谢各路英雄豪杰帮忙解答!
    发表于 11-24 22:42

    怎么提高频率测量的准确性

    观察到的大约少10%。有没有办法提高这种方法的准确性? 以上来自于百度翻译 以下为原文I'm trying to read a sensor that outputs frequency (pulses
    发表于 01-04 14:28

    合同智能审核软件-提高审查效率和准确性

    审查的准确性。使用软件能够提高审查速度在提高合同审查的速度方面,灵玖合同智能审核软件设定了丰富的合同审核范围:1.审查合同格式是否规范:检查内容包括字体字号行距,章节表格序号,上下标和大小写
    发表于 09-05 17:22

    NI公司u***-4065的准确性和速度问题

    我使用labview2017编程和u***-4065来测量通过继电器切换的多条线的电阻。现在有两个问题,一个是准确性,另一个是速度。对于准确性。我测量的线路电阻具有参考值。我经常遇到绝缘电阻,它
    发表于 11-24 13:24

    如何提高交流脉冲对HPMMM充磁和去磁时磁场定向的准确性

    如何提高交流脉冲对HPMMM充磁和去磁时磁场定向的准确性
    发表于 11-19 06:30

    如何确认延时函数时间的准确性

    如何确认延时函数时间的准确性
    发表于 01-27 07:35

    何在丢失的情况下正确发送CAN BUS消息?

    “HAL_OK”,但通常(大约 50/50 的机会)其他设备没有收到消息。所以消息丢失了?为什么添加 TxMessage 会失败?为什么我没有得到任何失败的迹象?如何在丢失的情况下正确发送 CAN BUS 消息?
    发表于 12-30 06:17

    在ADC输入内阻不配情况下提高ADC准确度方法

    在ADC输入内阻不配情况下提高ADC准确度方法
    发表于 10-19 07:39

    何在拆芯片的情况下读取出esp8266烧写的固件?

    何在拆芯片不使用编程器的情况下读取出esp8266烧写的固件
    发表于 11-09 06:45

    何在烧写的情况下使用软件读取ESP8266内存容量?

    何在烧写的情况下使用软件读取ESP8266内存容量
    发表于 11-10 08:06

    如何提高投标报价编制的准确性

        施工企业要在激烈的市场竞争中战胜对手,赢得工程项目,投标报价的准确性是关键。下面结合多年工作的实际,谈一下如何提高投标报价编制的准确性
    发表于 01-08 15:36 13次下载