发布时间:2024 年 07 月 19 日
RAG
ChatQA 2: Bridging the Gap to Proprietary LLMs in Long Context and RAG Capabilities
我们推出的 ChatQA 2 模型,基于 Llama3,旨在提升开放访问 LLM 在长上下文理解和检索增强生成(RAG)方面的能力,使其与顶尖专有模型如 GPT-4-Turbo 相媲美。通过扩展 Llama3-70B-base 的上下文窗口至 128K 令牌,并实施三阶段指令调优,我们显著提升了模型处理大量信息的能力。实验显示,Llama3-ChatQA-2-70B 在长上下文理解任务上与 GPT-4-Turbo-2024-0409 不相上下,并在 RAG 测试中表现更佳。此外,我们发现先进的长上下文检索技术能有效解决 RAG 中的上下文碎片问题,进一步提升性能。我们还深入比较了 RAG 与长上下文解决方案的优劣,使用的是当前最先进的长上下文 LLM。
https://arxiv.org/abs/2407.14482
1. 开源模型和商业闭源模型的差距对比
开源模型(如 Llama-3-70B-Instruct 、QWen2-72B-Instruct 、Nemotron-4-340B-Instruct 、Mixtral-8x22B-Instruct-v0.1 等)虽然进展非常显著,但是在与闭源的商业大模型(如 GPT-4-Turbo )相比,仍然有一定的性能差距。
因此,缩小开源模型与GPT-4模型之间的差距成为了大家研究的重点之一。在某些特定领域,比如代码编写、检索增强等方面,陆续有与GPT-4旗鼓相当的模型出现,比如:DeepSeek-Coder-V2、ChatQA 1.5、InternVL 1.5等。
另一方面,在上下文窗口方面,随着闭源模型都支持极大的上下文窗口,比如:GPT-4 Turbo 和 Claude 3.5 Sonnet 分别提供了 128K 和 200K 的上下文窗口,Gemini 1.5 Pro 令人惊叹地支持高达 10M 的上下文。开源模型也在奋起直追,QWen2-72B-Instruct 和 Yi-34B 分别支持 128K 和 200K 的上下文窗口。
2. RAG(检索增强生成)方法的有效性和问题
检索增强方法可以轻松的从海量文本中找到相关上下文来回答问题或者完成任务,而长上下文模型在效率方面是无法与RAG方法相比的。
但是,长上下文在处理诸如总结整篇文档之类的任务上有优势,RAG在这方面表现不如长上下文。
目前主流的RAG方法还存在以下问题:
-
i) 基于top-k的分块检索可能导致上下文的断裂;
-
ii) 较小的top-k值会降低召回率,而较大的k值则可能引入过多不相关的上下文信息至LLM。
而采用最先进的长文本检索器可以大幅度减轻这些问题,并提高基于RAG的长文本理解任务的效果。
所以,基于以上两点,以及与闭源商业模型的差距,作者提出了ChatQA2,一个能与GPT-4-turbo相媲美的长上下文和RAG能力的模型。
3. 如何训练ChatQA2?
训练一个与GPT-4相媲美的长上下文RAG模型分为三个部分:
-
扩展上下文窗口到128K
-
基于长上下文数据微调模型
-
使用长上下文检索器模型
3.1 扩展上下文窗口到128K
作者使用了Llama3模型作为基础模型,从上下文窗口从8k扩展到了128k。
首先参考Slimpajama准备上下文预训练语料库的方法,生成100亿个序列长度为128K的数据。
3.2 使用长上下文指令微调模型
微调分为三个阶段,前两个阶段,参考ChatQA1.5,先是在128K高质量的指令集数据上训练,然后再包括长上下文的对话式QA的混合数据上训练。
但是因为上面两个极端涉及的上下文相对较短,最大序列长度仅为4K,所以又收集了一个长SFT数据集用于提高模型的处理128K标记上下文的能力。
这个长上下文数据集包括两个方面:
1)小于 32k 的 SFT 数据序列:借助来自 LongAlpaca12k 、来自 Open Orca 111 的 GPT-4 样本以及 Long Data Collections 222 的现有长上下文数据集。
2)对于 32k 至 128k 之间的序列长度:由于收集此类 SFT 样本颇具难度,依靠合成数据集。运用 NarrativeQA ,它涵盖了真实的摘要和语义相关的段落。整合所有相关段落并随机插入真实摘要,以此模拟真实的长文档及其 QA 对。随后将完整的长 SFT 数据集和前两个阶段的短 SFT 数据集混合起来用于训练。
3.3 使用长上下文检索器模型
当前大型语言模型的 RAG 管道存在以下问题:
- i) 按 top-k 分块式检索会引入不可忽视的上下文碎片化,这不利于生成准确答案。比如,先前最先进的基于密集嵌入的检索器仅支持 512 个标记。
- ii) 较小的 top-k(例如 5 或 10)通常导致相对较低的召回率,而较大的 k(例如 100)可能致使生成效果更差(如上表),因为以往的大型语言模型无法很好地利用过多分块的上下文。
为解决此问题,建议使用最新的长上下文检索器(作者这里使用的E5-mistral),它能够支持数千个token。
上表对 top-k 检索的不同分块大小以及上下文窗口中的总token数进行了比较。对比 3000 至 12000 的总标记,发现标记数量越多,结果往往越好。
6000 个token在成本和性能之间实现了良好的平衡。将token数设定为 6000 时,发现较大的分块尺寸会产生更优的结果。因此,在实验中,将 1200 的分块大小和 top-5 分块作为默认设置。
4. 效果测评
为了验证模型效果,作者将ChatQA2与最先进的长上下文模型进行对比,分别是:
-
GPT-4-Turbo-2024-04-09(128K 上下文窗口)
-
Qwen2-72B-Instruct(128K 上下文窗口)
-
Llama-3-70B-Instruct-Gradient-262k
对比的上下文长度分为三个类别:
-
1)超过 100K
-
2)32K 以内
-
3)4K 以内
4.1 Needle In A Haystack 测试
我们在Needle In A Haystack测试中对 Llama3-ChatQA-2-70B 模型进行评估。
上图展示了模型在多达 128K 个标记时的表现,表明模型准确率达 100%。该测试证实了模型出色的长上下文检索能力。
4.2 超过 100K 个标记的长上下文评估
上表显示,ChatQA2 优于诸多现有的先进模型,如 GPT4-Turbo-2024-04-09(33.16)、GPT4-1106 预览(28.23)、Llama-3-70B-Instruct-Gradient-262k(32.57)和 Claude 2(33.96)。与 Qwen2-72B-Instruct 所达到的最高分数 34.88 非常接近。
4.3 32K 个标记内的中长上下文评估
如上表显示,在所有模型中,GPT-4-Turbo-2024-04-09 得分最高,为 51.93。
ChatQA2 得分为 47.37,高于 Llama-3-70B-Instruct-Gradient-262k,但低于 Qwen2-72B-Instruct。
此外,所有的 RAG 解决方案表现均不如长上下文解决方案,这表明所有这些先进的长上下文大型语言模型确实能够在其上下文窗口内处理 32K 个标记。
4.4 4K 个标记内的短上下文评估
ChatQA2 平均得分 54.81。尽管不如 Llama3-ChatQA-1.5-70B,但仍优于 GPT-4-Turbo-2024-04-09 和 Qwen2-72B-Instruct。这证实了将短上下文模型扩展至长上下文并非轻而易举之事。
如何在常规短上下文任务不受影响的情况下,有效地将上下文窗口扩展至更大规模(如 Gemini 1.5 Pro 中的百万个标记),是一个令人振奋的研究方向。
4.5 RAG 与长上下文
在上面两个表中,比较了不同上下文长度下的 RAG 与长上下文解决方案。
-
在 32k 序列长度的下游任务中,长上下文解决方案要优于 RAG。这意味着使用 RAG 能节省成本,但准确性会稍降一点。
-
对于超过 100K 的上下文长度,RAG(对于Llama3-ChatQA-2-70B 采用 top-5 ,对于 Qwen2-72B-Instruct 采用 top-20)的表现要优于完整的长上下文解决方案。这表明,即便是最先进的长上下文大型语言模型(LLM),在处理超过 128K 的标记时,可能也难以有效地理解和推理。在这种情况下,如果适用于下游任务,建议使用 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 的正确特征了。