上下文是关键
大型语言模型(LLM)是一种生成式人工智能技术,在过去两年中获得了极大的关注。然而,当我们将LLM应用于实际场景时,仍然面临知识局限性和“幻觉”问题。检索增强生成(RAG)通过为LLM提供额外的记忆和上下文来解决这些问题。在2024年,RAG已成为应用生成式AI领域最受欢迎的技术之一。事实上,可以假设任何基于LLM的应用程序都以某种方式使用了RAG。
RAG通过访问非参数化记忆增强了LLM的参数化记忆
RAG评估
通过指标评估超越简单RAG(Naive RAG)
为了让RAG兑现其将LLM响应扎根于数据的承诺,我们需要超越简单的索引、检索、增强和生成的实现。然而,要改进某件事,首先需要衡量其性能。RAG评估有助于为您的RAG系统性能设定基准,以便后续进行优化。
构建一个概念验证(PoC)RAG管道并不复杂。LangChain 和 LlamaIndex 等工具已经使其变得相当简单。通过简短的培训和对有限示例集的验证即可完成。然而,为了提高其鲁棒性,必须在一个能够准确反映生产用例的数据集上进行全面测试。RAG管道可能会产生自身的“幻觉”。从高层次来看,RAG系统有三个主要的失败点:
-
检索器未能检索到完整的上下文,或检索到了无关的上下文;
-
即使提供了上下文,LLM也未考虑它;
-
LLM没有回答查询,而是从上下文中选择了无关的信息。
检索质量是RAG管道的第一个可能的失败环节
在这篇文章中,我们将重点介绍一些评估指标,这些指标专注于第一个失败点——“检索器未能检索到完整的上下文,或检索到了无关的上下文”。 换句话说,这些指标用于评估检索器的质量。
检索指标
评估RAG(检索增强生成)系统的评价指标可以分为三大类:
-
用于信息检索任务的检索指标(本文重点讨论的内容)
-
生成特定指标,如BLEU、ROUGE、METEOR等,这些指标关注生成内容的流畅性,并衡量相关性和语义相似性。
-
RAG特定指标,随着RAG应用的普及而逐渐发展改变。
RAG中的检索组件可以独立评估,以判断检索器是否能够很好地满足用户查询需求。接下来,我们将介绍七种流行的指标,它们不仅适用于RAG系统,还广泛应用于搜索引擎、推荐系统等信息检索任务中。
知识库的概念
在RAG中,知识库是一个非常重要的概念。它是一种非参数化的存储器,保存了RAG系统所处理的所有文档。
七大检索指标详解
1. 准确率(Accuracy)
准确率通常定义为正确预测的比例(包括真正例和真负例)与总案例数之比。如果你熟悉监督学习中的分类问题,可能已经对这个指标有所了解。在检索和RAG的背景下,它的计算方式如下:
公式:
准确率 = (检索到的相关文档数量 + 未检索到的不相关文档数量) / 知识库中文档总数
虽然准确率是一个简单直观的指标,但它并不是检索任务的主要指标。在大型知识库中,大多数文档通常与任何给定查询无关,这可能导致误导性的高准确率分数。此外,它没有考虑检索结果的排序。
2. 精确率(Precision)
精确率关注的是检索结果的质量,衡量检索到的文档中有多少是与用户查询相关的。它回答的问题是:“在所有检索到的文档中,有多少是真正相关的?”
公式:
精确率 = 检索到的相关文档数量 / 总检索文档数量
较高的精确率意味着检索器表现良好,主要返回相关文档。
注意:
精确率也是分类任务中常用的指标,在分类任务中,它被定义为模型预测为正类的样本中实际为正类的比例,即:
精确率 = 真正例 / (真正例 + 假正例)
Precision@k:
这是精确率的一个变体,衡量前“k”个检索结果中相关文档的比例。它特别重要,因为它专注于顶部结果,而不是所有检索到的文档。对于RAG来说,这一点尤为重要,因为只有顶部结果最有可能被用于增强生成。
公式:
Precision@k = 前“k”个结果中的相关文档数量 / k
例如,如果我们的RAG系统考虑前5个文档进行增强,那么Precision@5就变得至关重要。一个Precision@5值为0.8或4/5表示,在前5个结果中,有4个是相关的。
优点:
Precision@k还可以用来比较不同系统,尤其是在不同系统检索结果总数不同的情况下。然而,其局限性在于“k”的选择可能是任意的,且该指标不会考虑超出“k”范围的结果。
3. 召回率(Recall)
召回率关注的是检索器的覆盖范围,衡量从知识库中所有相关文档中检索出的相关文档比例。它回答的问题是:“在所有相关文档中,有多少被实际检索到了?”
公式:
召回率 = 检索到的相关文档数量 / 知识库中的相关文档总数
需要注意的是,与精确率不同,召回率的计算需要事先知道相关文档的总数。在拥有大量文档的知识库中,这一点可能会变得具有挑战性。
注意:
与精确率一样,召回率也不考虑检索结果的排序。它可能会产生误导,因为检索知识库中的所有文档会导致完美的召回率值。
Recall@k:
类似于Precision@k,Recall@k衡量的是前“k”个结果中相关文档的比例,相对于知识库中所有相关文档的数量。
公式:
Recall@k = 前“k”个结果中的相关文档数量 / 知识库中的相关文档总数
召回率和准确率的不同场景
4. F1分数(F1-score)
F1分数是精确率和召回率的调和平均值,提供了一个平衡质量和覆盖率的单一指标。
公式:
F1-score= 2 x (Precision x Recall) / (Precision + Recall)
f1 分数平衡了准确率和召回率。准确率和召回率都为中等时,其 f1 分数会高于一个值非常高而另一个值非常低的情况。
该公式的特点是,当精确率或召回率较低时,F1分数会被惩罚;只有当两者都较高时,才能获得较高的F1分数。这意味着单靠某一项指标无法使F1分数偏高。
优点:
F1分数提供了一个单一、平衡的度量标准,可以轻松比较不同系统。然而,它不考虑排序,并且对精确率和召回率赋予相同的权重,这可能并不总是理想的。
注意:
“相关”文档:我们讨论的大多数指标都涉及“相关”文档的概念。例如,精确率是通过检索到的相关文档数量除以总检索文档数量来计算的。问题是——如何确定某个文档是相关的?简单的答案是采用人工评估方法。领域专家查看文档并判断其相关性。人工评估会带来主观性,因此通常由专家组而非个人完成。但人工评估在规模和成本上存在限制。任何能够可靠建立相关性的数据都会变得极其有用。
Ground Truth 是已知真实或正确的信息。在RAG和生成式AI领域中,Ground Truth是一组预先准备好的Prompt-Context-Response或Question-Context-Response示例,类似于监督学习中的标注数据。为你的知识库创建的Ground Truth数据可用于评估RAG系统。
前四个指标不考虑文档的排名。它们从整体检索角度评估系统的有效性。接下来的三个指标也会考虑结果的排名。
5. 平均倒数排名(MRR, Mean Reciprocal Rank)
MRR特别适用于评估相关文档的排名。它衡量的是第一个相关文档在结果列表中的倒数排名。MRR是针对一组查询计算的。
公式:
MRR= 1/N x [Summation i=1 to N (1/rank(i))]
MRR 考虑排名,但不考虑所有文档
其中,N是查询总数,rank(i)是第i个查询中第一个相关文档的排名。
优点:
MRR特别适合关注系统找到相关文档的速度,并考虑结果的排序。然而,由于它只关注第一个相关结果,因此在多个相关结果重要的场景下可能不够理想。
6. 平均精度均值(MAP, Mean Average Precision)
MAP是一种结合了精确率和召回率的指标,它在不同“k”截断水平下计算。首先计算每个查询的平均精度(Average Precision),然后对所有查询取平均值。
公式:
Average Precision (单个查询) = 1/R(i) × [求和 k=1 到 n (Precision@k × 第k个文档的相关性)]
MAP 考虑所有检索到的文档,并给出更高的分数以获得更好的排名
其中,是查询i的相关文档数量,是截断“k”时的精确率,rel@k是一个二进制标志,指示第k个文档的相关性。
MAP公式:
MAP= 1/N x [Summation i=1 to N (Average Precision (i)]
优点:
MAP提供了一个跨召回水平的单一质量度量,非常适合关注结果排序的场景,但计算较为复杂。
7. 归一化折损累计增益(nDCG, Normalized Discounted Cumulative Gain)
nDCG通过考虑相关文档在结果列表中的位置来评估排序质量,并为出现在前面的相关文档分配更高的分数。它特别适用于文档具有不同程度相关性的场景。
公式:
DCG = 求和 i=1 到 n ((2^rel(i) - 1) / log(i+1))
其中,是位置i处文档的相关性得分。IDCG是理想情况下的DCG,即完美排序的DCG。nDCG是实际DCG与理想DCG的比值。
公式:
nDCG = DCG / IDCG
优点:
nDCG考虑了文档的不同相关程度,并对高排名的项目赋予更高的权重。然而,它计算复杂,需要为文档分配相关性得分,这可能带来主观性,同时折扣因子的选择会显著影响结果。
总结
检索系统不仅用于RAG,还广泛应用于网络和企业搜索引擎、电商产品搜索、个性化推荐、社交媒体广告检索、档案系统、数据库、虚拟助手等领域。这些检索指标有助于评估和改进性能,从而更好地满足用户需求。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。