完蛋!我把AI喂吐了!

news2025/6/30 7:55:44

当我们用 [RAG] 构建一个知识库问答应用的时候,总是希望知识库里面灌的数据越多,问答的效果越好,事实真是如此吗?这篇文章给大家答案。

引言

在人工智能问答系统的发展中,RAG(Retrieval-Augmented Generation)技术以其独特的检索增强生成方式,为减少大模型幻觉开辟了新的天地。然而,在实际落地过程中有一个很大的疑问:RAG 系统,数据越多效果越好吗?本文将深入分析数据量如何影响 RAG 系统的问答效果,并讨论如何优化这一系统以适应不断增长的海量数据。

什么是 RAG?

大型语言模型(LLMs)已经展现出了强大的能力,但在实际应用中仍面临很多挑战,如模型幻觉、知识更新缓慢以及答案缺乏可信度等。LLM 虽然是在非常庞大的数据集上训练的,但并不是在您的数据上训练的。检索增强生成(RAG)通过将您的数据链接到 LLMs 来解决这个问题。

RAG 是一种将知识检索与生成模型相结合的技术,可以提高问答系统的准确性和相关性。它通过从外部知识源中动态检索信息,并将检索到的数据作为参考来组织答案,从而能有效缓解 LLM 中存在的幻觉问题。

RAG 系统

RAG 的工作流程主要包含三个模块:

  • 索引(indexing): 文本索引的构建包括以下步骤:文档解析、文本分块、Embedding 向量化和创建索引。先将不同格式的原始文件解析转换为纯文本,再把文本切分成较小的文本块。通过 Embedding 为每一个文本块生成一个向量表示,用于计算文本向量和问题向量之间的相似度。创建索引将原始文本块和 Embedding 向量以键值对的形式存储,以便将来进行快速和频繁的搜索。

  • 检索(Retrieval) :使用 Embedding 模型将用户输入问题转换为向量,计算问题的 Embedding 向量和语料库中文本块 Embedding 向量之间的相似度,选择相似度最高的前 K 个文档块作为当前问题的增强上下文信息。

  • 生成(Generation) :将检索得到的前 K 个文本块和用户问题一起送进大模型,让大模型基于给定的文本块来回答用户的问题。

RAG 系统:数据越多,效果越好吗?

从宏观层面来看,RAG 包含两个核心的要素:数据和系统。RAG 的应用场景非常多,包括文档助手,智能客服机器人,领域 / 行业知识库问答等。不同的应用场景优化的侧重点可能有所差异。

对于文档助手这类应用来说,数据是已知的,我就上传几篇文档,就针对这些文档来问问题。我们几乎不用关注数据侧的事情,把精力放在优化系统就可以了。

而对于领域 / 行业知识库问答来说,需要从数据侧和系统侧同时优化。因为如果用户问题回答不上来,有可能是没相关数据,也有可能是有数据但 RAG 系统没找到。

数据侧的优化很 “简单”,就是尽可能多的收集领域内相关的数据,通通灌进知识库里面。但是, 请先别着急!在开始组织人力收集整理数据之前,我们首先得弄清楚一件事情:RAG 系统,数据越多,效果越好吗?

如果答案是肯定的,意味着:

  • 海量数据放心灌,我可以一批一批地往知识库中加数据,不用担心数据量太大相互干扰导致效果不佳。

  • 快速迭代快速优化,对于上线之后的 badcase,业务侧可以直接通过加相应数据来快速迭代优化。

  • 降低数据成本,收集和整理的成本,不用费劲心思去做数据去重和脏数据的处理。

  • 增加系统的稳定性,如果我加的数据不相关,问答的效果不一定会变好,但是起码能保证以前的效果不会变差。

反之,那工作量可就大了😭

实验:数据量对于问答效果的影响

以教育领域的知识库问答为例,我们基于 RAG 做了一个升学百科问答的应用,专门解答用户关于高考升学规划和志愿填报政策相关的问题。

图片升学百科问答

升学百科问答不是给定数据,给定问题,然后只需要去优化算法或者系统的 Benchmark 任务。它的问题是开放的,数据也是开放的(你可以收集到尽可能多的相关数据来提升问答的效果)。所以优化的变量就多了一个:系统是一部分,数据也是一部分。问答效果的好坏不光取决于好的 RAG 系统,还取决于你的数据量够不够,覆盖的知识全不全?如何优化 RAG 能让它完全发挥出海量数据的价值是我们研究的重点。

关于数据量对 RAG 问答质量的影响,我们在升学百科问答项目中做了比较详细的研究。实验设置如下:

  • 用户问题: 收集了 176 个升学百科相关的问题,包括升学路径、志愿填报、选科等相关政策咨询问题。

  • RAG 系统: 一个经典的 RAG 系统,包括文本解析切片,embedding 向量化建库,检索相关片段,语言模型总结问答等模块。

  • 领域数据: 我们收集了海量升学规划相关的资料来验证数据的问题,包括教育领域的互联网数据,书本资料,FAQ 问答对等。

图片

RAG 在升学百科问答中的实践

结果:检索退化问题

我们分批往 RAG 知识库中灌入数据,每加一批数据都做一次评测,观察随着数据量变大,问答效果的变化情况:

  • [baseline**]:第一批数据加入后问答正确率有 42.6%,此时有一些问题没回答上来是因为确实缺少相关资料。我们继续加数据…

  • 迎来上涨:第二批加了更多数据,覆盖知识范围更广。准确率提升到了 60.2%,提升非常明显,看来加数据确实还是挺有用的。

  • 坏消息:当加入第三批数据的时候,我们最担心的事情还是发生了。正确率急剧下降,跌了将近 8 个百分点。

图片

到这里,我们的问题有了答案,不是所的 RAG 系统都能保证:数据越多,效果越好。海量数据有可能会把 AI 喂吐,随着数据的增多,数据之间可能会有相互干扰,导致检索退化的问题,影响问答的质量。

具体问题具体分析

先抓一个典型看看,大连医科大学怎么样?这个问题在 v2 版本(加入第三批数据前)是能回答对的,v3 版本(加入第三批数据后)回答错了。看了一下送到 LLM 的文本片段,居然全部都是大连理工大学相关的信息。

图片

问题分析:大连医科大学的问答结果

主要原因是第三批加入的某些文档中恰好有大连理工大学 xxx 怎么样?的句子,和 query 大连医科大学怎么样?表面上看起来确实非常像,Embedding 给它打了比较高的分。

而类似大连医科大学师资介绍这样的片段相关性就稍微低了些。而 LLM 输入 token 有限制,前面两个最相关但是实际并不能回答 query 问题的片段就已经占满了 token 的窗口,只能把他俩送进 LLM 里。结果可想而知,啥都不知道。

图片

RAG 中的检索退化问题

语义检索:相似≠相关

文本片段与 query 的相似性和文本片段是否包含 query 的答案(相关性)是两回事。RAG 中一个非常重要的矛盾点在于检索召回的片段比较多,但是 LLM 输入 token 是有限制,所以必须把能回答 query 问题的片段(和问题最相关)给 LLM。

Embedding(Bi-Encoder)

Embedding 也可以给出一个得分,但是这个得分描述的更多的是相似性。Embedding 本质上是一个双编码器,两个文本在模型内部没有任何信息交互。只在最后计算两个向量的余弦相似度时才进行唯一一次交互。所以 Embedding 检索只能把最相似的文本片段给你,没有能力来判断候选文本和 query 之间的相关性。但是相似又不等于相关。

如下图所示,从某种程度上,Embedding 其实就是在算两个文本块中相似字符的个数占比,它分不清 query 中的重点是大连医科大学,在它看来每个字符的重要性都是一样的。感兴趣的话可以计算一下下图中红字部分的占比,和最后余弦相似度的得分基本是吻合的。

图片

Embedding 原理

Rerank(Cross-Encoder)

Rerank 本质是一个 Cross-Encoder 的模型。Cross-Encoder 能让两个文本片段一开始就在 BERT 模型各层中通过 self-attention 进行交互。它能够用 self-attention 判断出来这个 query 中的重点在于大连医科大学,而不是怎么样?。所以,如下图所示,大连医科大学怎么样?这个 query 和大连医科大学创建于 1947 年… 更相关。

图片

Rerank 原理

Cross-Encoder 这么好,为什么不直接用?

因为速度慢。这里说的速度慢不是 cross-encoder 的模型比 bi-encoder 的模型速度慢。关键在于 bi-encoder 可以离线计算海量文本块的向量化表示,把他们暂存在[向量数据库]中,在问答检索的时候只需要计算一个 query 的向量化表示就可以了。拿着 query 的向量表示去库里找最相似的文本即可。

但是 cross-encoder 需要实时计算两个文本块的相关度,如果候选文本有几万条,每一条都需要和 query 一起送进 BERT 模型中算一遍,需要实时算几万次。这个成本是非常巨大的。

所以,我们可以把检索过程分为两个阶段:召回(粗排)和重排。

  • 第一个阶段的目标是尽可能多的召回相似的文本片段,这个阶段的文本得分排序不是特别靠谱,所以候选的 topK 可以设置大一些,比如 topK=100;

  • 第二个阶段的目标是对 100 个粗排的候选文本片段进行重新排序,用 cross-encoder 计算 100 个候选文本和 query 的相关度得分;

两阶段检索结合可以兼顾效果和效率。

两阶段检索在 RAG 中的实验

我们对上面升学百科中的文本片段用 Rerank 模型再做一次排序,重排序后的结果如下图所示,左右可以对照着看,左边是 Rerank 之前的文本片段,右边是 Rerank 重排之后的文本片段。可以明显看到右边文本片段的得分和排序更加合理,和人的感受基本上是一致的。重排序之后送进 LLM 窗口内的文本和 query 是最相关的,语言模型也能轻松根据相关信息回答出问题,再也不会说不知道了。

图片

两阶段检索在 RAG 中的实验

QAnything:两阶段检索问答框架

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统。基于有道自研两阶段检索框架,能够做到数据越多,问答效果越好!

QAnything 具有以下特点:

  • 数据安全放心用,完全离线使用;

  • 跨语种知识随意问,中英文问答随意切换,无所谓文件是什么语种;

  • 海量数据放心灌,两阶段向量排序,解决了大规模数据检索退化的问题,数据越多,效果越好;

  • 生产级系统直接装,可直接部署企业级应用;

  • 一键安装轻松用,无需繁琐的配置,一键安装部署,拿来就用;

  • 多知识库随时切,支持多个知识库联合问答。

  • 完全开源,完全免费!

图片

最终结果

至此,我们可以在以上两阶段检索的 QAnything 系统上重新跑前三批数据的实验了。结果如下:

图片

在数据不变的情况,两阶段检索问答准确率从 52.8% 提升到 65.9%,这个结果再次证明了一阶段检索中存在数据互相干扰的情况。两阶段检索可以最大化的挖掘出数据的潜力,我们继续加数据,效果能够稳定提升。

图片

QAnything 实现数据越多效果越好

QAnything 两阶段检索最大的意义不是在某一个实验上面提升了 10 个点。它最大的意义在于让 “数据越多,效果越好” 变成了现实。这是在准备开始优化一个 RAG 系统之前要确保的第一件事情。

QAnything 应用

QAnything 和有道领世联合推出*「AI 升学规划师」*。基于 QAnything 强劲的检索增强生成能力和有道领世多年深耕的海量升学数据资料,可以为每个学生和家长配备一名私人 AI 升学规划师,提供更加全面、专业、及时的升学规划服务。

基于*「QAnything」*,有道 AI 升学规划师在升学百科问答中准确率达到 95%,可以解答用户关于高考政策、升学路径、学习生活以及职业规划等各种问题。并且随着不断地数据补充和更新,这个准确率会一直上涨。

展望

两阶段检索是一个大的框架,给 RAG 提供了一个好的基础。未来可以在两阶段的基础上做更多细致的优化。这里有一些想法,贴出来和大家一起探讨:

  • 切片策略: 切片策略对检索召回的影响非常大,目前主流的切片策略还比较机械,经常造成一些信息的损失,未来可能会出现更加智能的切片方式。
  • 多路召回: 可以在 embedding 检索的基础上增加 BM25 检索,或者通过 LLM 改写 query 的方式生成多个检索 query 增加召回率。
  • 意图分类: 不同的问题走不同的知识库,或者用不同的处理逻辑。
  • Agent: 基于文档的问答能做的事情非常有限,Agent 和 RAG 结合起来可以做更多事情。

自从_「QAnything」_项目开放源代码以来,受到了开发社区的热烈欢迎和广泛认可。截至 2024 年 2 月 1 日,项目在 GitHub 上已经积累了 3600 多个星标,这反映出了其流行度和用户对其价值的高度评价。

图片

如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

努比亚开局连发两款旗舰机,其中一款还能卫星通话?

在智能手机市场竞争日益激烈的当下,努比亚作为国内知名手机品牌,始终致力于为消费者带来兼具创新性和实用性的产品。 近日,努比亚正式发布了两款备受瞩目的旗舰手机——努比亚Z60 Ultra领先版和努比亚Z60S Pro。两款手机不仅在硬件配置上实现…

Macbook Pro升级macOS 10.15及以上的全过程

Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言升级步骤选择指定macOS版本并下载安装升级macOS安装过程安装完成 前言 由于现在更多软件安装所需系统要求10.15及以上,导致很多app应用不能使用,如edge mac的操作系统要求…

LlamaIndex vs LangChain: 理解关键差异

LLM(大型语言模型)已成为各行各业不可或缺的工具,用于生成类人文本、翻译语言和回答问题等任务。有时,LLM的响应令人惊叹,因为它们比人类更迅速、更准确。这表明了它们对当今技术格局的重大影响。 今天让我们聊聊 Llam…

i2c中结构体 数据传输 i2c Tools使用

I2C中重要结构体 在I2C(Inter-Integrated Circuit)通信中,涉及的主要结构体通常用于描述设备、消息和传输的配置。以下是一些常见的I2C结构体及其作用: i2c_adapter: 这是一个代表I2C总线适配器的结构体。它包含与该I2C总线相关的…

【Django5】模型定义与使用

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理(Cookies&Session) 第八章 文件上传…

【ai】 2005年 rule based expert system学习笔记1

PPT 是2005年的? Negnevitsky, Pearson Education 使用两种推理引擎的选择 backward chaining(逆向链接)推理过程 backward chaining(逆向链接)推理过程的GPT解释 这幅图展示了一个基于规则的专家系统如何通过backward chaining(逆向链接)推理过程来达到最终的推理目标…

[tomato]靶机复现漏洞详解!

靶机地址: https://download.vulnhub.com/tomato/Tomato.ova 靶机环境:Vmware 网络:NAT模式 信息收集: arp-scan -l 扫描靶机ip地址 扫描开放的端口信息 nmap -sS -sV -p- 192.168.77.135 发现开放端口21&#xff…

Matplotlib柱形图大揭秘:让数据‘站’起来,比增高鞋垫还管用!

1. Matplotlib绘制柱形图/柱状图/条形图 柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其表示的数据成正比关系 # 导包 import numpy as np import pandas as pd import matplotlib.pyplot as p…

黑马Java零基础视频教程精华部分_9_面向对象进阶(1)

系列文章目录 文章目录 系列文章目录一、static(表示静态) 是Java中的一个修饰符,可以修饰成员方法,成员变量1、静态变量2、静态变量底层原理3、static静态方法4、工具类、测试类、Javabean类5、static注意事项从代码层面从内存层面 6、重新认识main方法…

[ WARN:0@0.014] global loadsave.cpp:248 cv::findDecoder imread_

[ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 目录 [ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…

网工必装软件,SecureCRT从零到精通,不可错过

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 中午好,我的网工朋友。 相信在平时的日常工作中,大家经常需要通过安全的方式远程访问各种设备和服务。SecureCRT作为一款强…

JavaWeb的三层架构和分层解耦

博客主页:音符犹如代码系列专栏:JavaWeb关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 三层架构 分层解耦 三层架构是哪三层? Controller:表现层…

云微客短视频矩阵能带来流量吗?有哪些产品特色?

短视频平台,现如今已经成为了互联网最大的流量池,诸如抖音、快手、小红书、视频号、哔哩哔哩等平台,日活量都在上亿。短视频赛道汇聚了无数的用户群体,所以商企品牌的营销定位就应该在这里。 许多企业看到了这样的营销商机&#x…

AI绘画模型之:CLIP 与 DALL-E 2

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

自动驾驶:SLAM

什么是SLAM SLAM,即Simultaneous Localization and Mapping(同时定位与地图构建) 最早由Smith、Self和Cheeseman于1988年提出。是自动驾驶领域中的一项核心技术。它允许自动驾驶车辆在使用各种传感器(如激光雷达、摄像头、IMU等&…

计算机毕业设计选题推荐-服装生产管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

大模型开闭源之争,本质是商业化的争夺

大模型从发展之初,即存在开源与闭源两条路线,孰优孰劣,也处于持续争论之中。2024年7月,在“2024世界人工智能大会”上,众多业内领军人物对大模型开闭源表达了针锋相对的观点。例如,百度创始人李彦宏站在闭源…

成功解决:java.security.InvalidKeyException: Illegal key size

在集成微信支付到Spring Boot项目时,可能会遇到启动报错 java.security.InvalidKeyException: Illegal key size 的问题。这是由于Java加密扩展(JCE)限制了密钥的长度。幸运的是,我们可以通过简单的替换文件来解决这个问题。 解决…

LeetCode 17.电话号码的字母组合 C++写法

LeetCode 17.电话号码的字母组合 C写法 思路🧐: 使用深度优先搜索递归进行解题。首先建立一个号码与字母的映射表,当接收传过来的号码字符串时减去字符0就可以拿到该号码。其次使用string存储当前号码所对应字母,然后for循环遍历字…

用Java手写jvm之尝试解析clazz文件内容

写在前面 源码 。 本文尝试来解析下class文件的内容,了解了class文件内容后,对我们提升java认知将会带来很大的帮助,有多大呢,不好说,总之很大很大,大到受不了😍😍😍。 …