本假期参与了Datawhale AI 夏令营第四期,主要是对大模型应用开发方向感兴趣。希望在夏令营可以学到更多知识,认识更多小伙伴。
跑完Task1,感觉没有想象中那么难,对新手很友好!!!
个人学习计划 | |||
---|---|---|---|
序号 | 日期 | 今日目标 | 今日学习资料 & 学习计划 |
Day1 | 8月9日 | 跑通Baseline并学习大模型开发基础 | |
Day2 | 8月10日 | 继续学习大模型开发基础并完成认证 | 大模型开发工程师考试 |
Day3 | 8月12日 | 完成组队 | |
Day4 | 8月13日 | 打卡task2 案例直播分享 与队友探讨项目 | |
Day5 | 8月14日 | RAG技术原理与实践 | |
Day6 | 8月15日 | 案例分析 | |
Day7 | 8月18日 | 模型微调技术原理与实践 | |
··· | ··· | ··· | ··· |
Task1
Task1.1 动手学大模型应用全栈开发
学习内容提要:通过学习大模型部署、大模型检索增强生成(Retrieval Augmented Generation, RAG)实战、大模型微调实战,掌握大模型应用全栈开发.
Step0:开通阿里云PAI-DSW试用
-
开通免费试用
-
在魔搭社区进行授权
链接:https://www.modelscope.cn/my/mynotebook/authorization
如果这一步授权失败,可跳过此步骤,继续往下进行
-
新用户需要先注册 & 绑定阿里云账号
-
新用户还需要完成阿里云账号的实名认证,直接完成即可
-
新用户还需要完成阿里云账号的实名认证,直接完成即可
Step1:在魔搭社区创建PAI实例!(点击即可跳转)
链接:https://www.modelscope.cn/my/mynotebook/authorization
Step2:Demo搭建!
第一步:文件下载
点击终端,然后输入如下命令,回车运行!
git lfs install git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_yuan_baseline.git
第二步:环境安装
点击终端,然后输入如下命令,回车运行!
pip install streamlit==1.24.0
等待依赖安装成功!
第三步:启动Demo
点击终端,然后输入如下命令,回车运行!
streamlit run AICamp_yuan_baseline/Task\ 1:零基础玩转源大模型/web_demo_2b.py --server.address 127.0.0.1 --server.port 6006
Step3:对话体验!
点击链接,跳转到浏览器新页面!
注意⚠️:这里一定要保存效果截图去打卡哦!!一定要保存效果截图去打卡哦!!一定要保存效果截图去打卡哦!
显示Demo名称,后台正在运行中!
等待后台完成模型下载和加载!
弹出对话框,现在开始对话吧!
下面,让你的编程助手简单写个代码吧!输入后回车即可运行!
参考Prompt:
给我一个python打印helloword的代码
改成c++的
关闭PAI实例!!!!(点击即可跳转)
链接:https://www.modelscope.cn/my/mynotebook/authorization
Task2
一些项目的idea
1.文档处理类应用
参考需求表 (可根据自身队伍能力进行删减和增加预期功能) | |
---|---|
项目背景 | 在信息时代,文档处理是日常工作和学术研究中不可或缺的一部分。然而,传统的文档处理方式往往效率低下,且难以满足个性化和智能化的需求。AI技术的引入,特别是Yuan2.0-2B-Mars大模型,为文档处理提供了新的解决方案。 |
预期产品功能 |
|
参考技术方案 |
|
预期运行效果 |
|
预期应用价值 |
|
2.领域知识类应用
参考需求表 (可根据自身队伍能力进行删减和增加预期功能) | |
---|---|
项目背景 | 当前,随着人工智能技术的快速发展,越来越多的行业开始寻求AI解决方案以提高效率和准确性。特别是在法律、医学、金融和教育领域,专业知识的深度和广度要求极高,传统的搜索引擎和问答系统往往难以满足专业人士的需求。Yuan2.0-2B-Mars大模型提供了强大的语言理解和生成能力,为开发领域知识类AI原生应用提供了基础。 |
预期产品功能 |
|
参考技术方案 |
|
预期运行效果 |
|
预期应用价值 |
|
3.数据分析类应用
参考需求表 (可根据自身队伍能力进行删减和增加预期功能) | |
---|---|
项目背景 | 在数据驱动的商业环境中,数据分析已成为决策过程中的关键步骤。企业和研究人员需要从大量数据中提取有价值的信息,进行深入分析以指导决策。Yuan2.0-2B-Mars大模型提供了处理和分析数据的能力,使得开发一个高效的数据分析应用成为可能。 |
预期产品功能 |
|
参考技术方案 |
|
预期运行效果 |
|
预期应用价值 |
|
4.编程助手类应用
参考需求表 (可根据自身队伍能力进行删减和增加预期功能) | |
---|---|
项目背景 | 编程是一项需要高度专业知识和技能的工作。随着技术的发展,编程语言和框架不断更新,开发者需要一个能够提供即时帮助和指导的工具。Yuan2.0-2B-Mars大模型具备处理和生成代码的能力,为开发编程助手类应用提供了强大的基础。 |
预期产品功能 |
|
参考技术方案 |
|
预期运行效果 |
|
预期应用价值 |
|
开发&执行路径
常见的AI应用开发经验(Agent可以理解为一种AI应用方向)
做事、做开发的经验路径
Task3 源大模型RAG实战
1.引言
1.1 什么是RAG
在上一节,我们成功搭建了一个源大模型智能对话Demo,亲身体验到了大模型出色的能力。然而,在实际业务场景中,通用的基础大模型可能存在无法满足我们需求的情况,主要有以下几方面原因:
-
知识局限性:大模型的知识来源于训练数据,而这些数据主要来自于互联网上已经公开的资源,对于一些实时性的或者非公开的,由于大模型没有获取到相关数据,这部分知识也就无法被掌握。
-
数据安全性:为了使得大模型能够具备相应的知识,就需要将数据纳入到训练集进行训练。然而,对于企业来说,数据的安全性至关重要,任何形式的数据泄露都可能对企业构成致命的威胁。
-
大模型幻觉:由于大模型是基于概率统计进行构建的,其输出本质上是一系列数值运算。因此,有时会出现模型“一本正经地胡说八道”的情况,尤其是在大模型不具备的知识或不擅长的场景中。
为了上述这些问题,研究人员提出了检索增强生成(Retrieval Augmented Generation, RAG)的方法。这种方法通过引入外部知识,使大模型能够生成准确且符合上下文的答案,同时能够减少模型幻觉的出现。
由于RAG简单有效,它已经成为主流的大模型应用方案之一。
如下图所示,RAG通常包括以下三个基本步骤:
-
索引:将文档库分割成较短的 Chunk,即文本块或文档片段,然后构建成向量索引。
-
检索:计算问题和 Chunks 的相似度,检索出若干个相关的 Chunk。
-
生成:将检索到的Chunks作为背景信息,生成问题的回答。
1.2 一个完整的RAG链路
从上图可以看到,线上接收到用户query
后,RAG会先进行检索,然后将检索到的 Chunks
和 query
一并输入到大模型,进而回答用户的问题。
为了完成检索,需要离线将文档(ppt、word、pdf等)经过解析、切割甚至OCR转写,然后进行向量化存入数据库中。
接下来,我们将分别介绍离线计算和在线计算流程。
1.2.1 离线计算
首先,知识库中包含了多种类型的文件,如pdf、word、ppt等,这些 文档
(Documents)需要提前被解析,然后切割成若干个较短的 Chunk
,并且进行清洗和去重。
由于知识库中知识的数量和质量决定了RAG的效果,因此这是非常关键且必不可少的环节。
然后,我们会将知识库中的所有 Chunk
都转成向量,这一步也称为 向量化
(Vectorization)或者 索引
(Indexing)。
向量化
需要事先构建一个 向量模型
(Embedding Model),它的作用就是将一段 Chunk
转成 向量
(Embedding)。如下图所示:
一个好的向量模型,会使得具有相同语义的文本的向量表示在语义空间中的距离会比较近,而语义不同的文本在语义空间中的距离会比较远。
由于知识库中的所有 Chunk
都需要进行 向量化
,这会使得计算量非常大,因此这一过程通常是离线完成的。
随着新知识的不断存储,向量的数量也会不断增加。这就需要将这些向量存储到 数据库
(DataBase)中进行管理,例如 Milvus 中。
至此,离线计算就完成了。
1.2.2 在线计算
在实际使用RAG系统时,当给定一条用户 查询
(Query),需要先从知识库中找到所需的知识,这一步称为 检索
(Retrieval)。
在 检索
过程中,用户查询首先会经过向量模型得到相应的向量,然后与 数据库
中所有 Chunk
的向量计算相似度,最简单的例如 余弦相似度
,然后得到最相近的一系列 Chunk
。
由于向量相似度的计算过程需要一定的时间,尤其是 数据库
非常大的时候。
这时,可以在检索之前进行 召回
(Recall),即从 数据库
中快速获得大量大概率相关的 Chunk
,然后只有这些 Chunk
会参与计算向量相似度。这样,计算的复杂度就从整个知识库降到了非常低。
召回
步骤不要求非常高的准确性,因此通常采用简单的基于字符串的匹配算法。由于这些算法不需要任何模型,速度会非常快,常用的算法有 TF-IDF
,BM25
等。
另外,也有很多工作致力于实现更快的 向量检索
,例如 faiss,annoy。
另一方面,人们发现,随着知识库的增大,除了检索的速度变慢外,检索的效果也会出现退化。
这是由于 向量模型
能力有限,而随着知识库的增大,已经超出了其容量,因此准确性就会下降。在这种情况下,相似度最高的结果可能并不是最优的。
为了解决这一问题,提升RAG效果,研究者提出增加一个二阶段检索——重排
(Rerank),即利用 重排模型
(Reranker),使得越相似的结果排名更靠前。这样就能实现准确率稳定增长,即数据越多,效果越好(如上图中紫线所示)。
通常,为了与 重排
进行区分,一阶段检索有时也被称为 精排
。而在一些更复杂的系统中,在 召回
和 精排
之间还会添加一个 粗排
步骤,这里不再展开,感兴趣的同学可以自行搜索。
综上所述,在整个 检索
过程中,计算量的顺序是 召回
> 精排
> 重排
,而检索效果的顺序则是 召回
< 精排
< 重排
。
当这一复杂的 检索
过程完成后,我们就会得到排好序的一系列 检索文档
(Retrieval Documents)。
然后我们会从其中挑选最相似的 k
个结果,将它们和用户查询拼接成prompt的形式,输入到大模型。
最后,大型模型就能够依据所提供的知识来生成回复,从而更有效地解答用户的问题。
至此,一个完整的RAG链路就构建完毕了。
1.2 开源RAG框架
目前,开源社区中已经涌现出了众多RAG框架,例如:
-
TinyRAG:DataWhale成员宋志学精心打造的纯手工搭建RAG框架。
-
LlamaIndex:一个用于构建大语言模型应用程序的数据框架,包括数据摄取、数据索引和查询引擎等功能。
-
LangChain:一个专为开发大语言模型应用程序而设计的框架,提供了构建所需的模块和工具。
-
QAnything:网易有道开发的本地知识库问答系统,支持任意格式文件或数据库。
-
RAGFlow:InfiniFlow开发的基于深度文档理解的RAG引擎。
-
···
2 源2.0-2B RAG实战
1.首先创建一个PAI实例。
2.环境准备
进入终端
运行下面代码,下载文件,并将Task 3:源大模型RAG实战
中内容拷贝到当前目录。
git lfs install git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_yuan_baseline.git cp AICamp_yuan_baseline/Task\ 3:源大模型RAG实战/* .
双击打开Task 3:源大模型RAG实战.ipynb
,然后运行所有单元格。
通过下面的命令,我们可以看到ModelScope已经提供了所需要的大部分依赖,如 torch
,transformers
等。
# 查看已安装依赖
pip list
但是为了进行模型微调以及Demo搭建,还需要在环境中安装streamlit
。
# 安装 streamlit pip install streamlit==1.24.0
安装成功后,我们的环境就准备好了。
2.2 模型下载
在RAG实战中,我们需要构建一个向量模型。
向量模型通常采用BERT架构,它是一个Transformer Encoder。
输入向量模型前,首先会在文本的最前面额外加一个 [CLS]
token,然后将该token最后一层的隐藏层向量作为文本的表示。如下图所示:
(在基于BERT的文本分类中,这个表示会送入分类器,得到标签。)
目前,开源的基于BERT架构的向量模型有如下:
-
BGE Embedding:智源通用embedding(BAAI general embedding, BGE)
-
BCEmbedding:网易有道训练的Bilingual and Crosslingual Embedding
-
jina-embeddings:Jina AI训练的text embedding
-
M3E:MokaAI训练的 Massive Mixed Embedding
-
···
除了BERT架构之外,还有基于LLM的向量模型有如下:
-
LLM-Embedder:智源LLM-Embedder
-
···
其次,还有API:
在本次学习中,我们选用基于BERT架构的向量模型 bge-small-zh-v1.5
,它是一个4层的BERT模型,最大输入长度512,输出的向量维度也为512。
bge-small-zh-v1.5
支持通过多个平台进行下载,因为我们的机器就在魔搭,所以这里我们直接选择通过魔搭进行下载。
模型在魔搭平台的地址为 AI-ModelScope/bge-small-zh-v1.5。
单元格2.2 模型下载
会自动执行向量模型和源大模型下载。