LLM-大模型私有模型训练步骤方法总结

news2024/9/30 23:27:28

文章目录

  • 前言
  • 预训练(Pretrained)步骤
    • 模型选择
    • 确定应用场景
    • 数据采集
    • 清理数据
    • 预训练模型
  • 微调(Fine Tuning)
  • 合规对齐 (Alignment)
  • 集成 LLM 至 APP
  • 总结

前言

本文将从宏观层面说明 LLM 私有模型的训练步骤,包括预训练,微调,合规对齐,再到最后如何集成到我们的 APP 中。
我们假设有以下一个需求:

  • ⼀家⾦融科技企业希望利⽤⼤模型来解决保险智能客服的业务,希望能够⽤AI助⼿来替代原有的智能客服。

预训练(Pretrained)步骤

模型选择

首先我们需要选择一个开源的底座模型,主要从以下方面考虑:

  • 模型参数大小,7B 还是 100B,这个需要根据公司实力量力而行(能买多少张 GPU 卡)
  • 模型架构,一般现在都是 Transformer 架构。
  • Tokenizer 选择,需要根据公司具体的业务选择合适的,比如说公司是金融行业的,那么我们就需要选择一个使用金融行业 token 数据训练的模型,这里推荐一个网站:https://github.com/HqWu-HITCS/Awesome-Chinese-LLM/tree/main 里边整理了大量的中文 LLM, 涵盖大量垂直行业,可以从中选择合适的底座模型,进行私有模型部署训练。
  • 其他,比如说公司能够支持的技术储备等等。。

不过未来小模型将成为私有化落地的主流选择,这篇文章写的比较好,大家可以看下小模型将成为私有化落地的主流选择。

确定应用场景

现在大模型最难的就是应用场景落地,但是一些根据应用场景落地的 AI 公司都已经起飞了,可以参考下 Stable diffusion, 按照我们上边的需求,我们的模型要提供金融行业的能力,能够作为智能客服,回答用户的一些专业问题,给出具体的解决方案,或者说提供相关的专业信息。

数据采集

确定好应用场景后,就需要开始采集数据了,使用各种手段,通过爬虫大量爬取金融行业的数据,或者调用一些商用或者免费的数据 API,采集相关数据。

这里在采集数据的时候我们需要注意,我们的公司是在中国,客户一般也是国内的客户,因此我们在采集数据的时候需要进行数据集设计:

  • 中文数据多采集,英文数据少采集
  • 数据量,比如说采集原生数据 100G,转换为 10B token
  • 数据配比,垂直领域数据 VS 通用数据,每个数据源配比

清理数据

通过清理我们的数据(尤其是非重构数据),我们为模型提供了可靠且相关的上下文,从而提高了生成,降低了幻觉的可能性,并提高了生成AI模型的速度和性能,因为大量信息会导致更长的等待时间。

首先删除不提供意义的符号或字符,例如 HTML 标签(在预期的情况下)、XML 解析、JSON、表情符号和主题标签。不需要的字符通常会干扰模型,并增加上下文标记的数量,从而增加计算成本。

没有一刀切的解决方案,我们将使用常见的清理技术来调整我们的方法以适应不同的问题和文本类型:

  • 标记化: 将文本分割成单独的单词或标记。
  • 消除噪音: 消除不需要的符号、表情符号、主题标签和 Unicode 字符。
  • 规范化: 将文本转换为小写以保持一致性。
  • 删除废弃词: 丢弃不会增加暗示的常见或重复的单词,例如"a"、“in”、“of"和"the”。
  • 词形或词干提取: 将单词简化为基本形式或词根形式。

预训练模型

通过前边的数据集的采集,清理,语料库的生成,这个时候可以理解为我们已经有了一个空的,最原始的 model,它只是一个模型结构,对应的参数还没有学习,接下来我们就需要把预料库中的 token 方进入进行学习,训练,这个过程使用的就是经典的机器学习过程。

预训练完后,我们的模型就具备了一定的能力,叫做 **Pretrained Model, **比如说 github 上开源的 ChatGLM-7B-Base 等模型,一般预训练模型以 Base 结尾,这里的 7B 代表该模型的预训练参数,下边使用一张流程图直观的展示下:
image.png
预训练是比较耗时的,训练的参数越多,所需要的硬件成本(GPU 卡)就越高。

预训练模型具备了一定的能力,输入一个 token 可以预测 next token,但是还远达不到想要的效果,接下来我们就需要进行微调。

微调(Fine Tuning)

假如将 Pretrained 的模型看做一个刚毕业的金融专业本科毕业生,它去公司上班是没办法立即产生价值的,需要经过公司的培训,这些培训就是微调,让他学习了解一些关于公司的通用知识(Genaral)专业知识(Vertical), 以及一些常见的问题。

微调就是为了弥补本科毕业到生产落地之间的 Gap:
image.png
比如说上图中的金融专业刚毕业的本科生,需要进行沟通培训和常见问题培训才能上岗,产生价值。

微调不像预训练那样需要大量的数据,但是也要保证微调的数据覆盖上边说的沟通加常见问题的范围,否则微调的效果就不太好,所以需要先进行数据清理,然后将数据构造成微调所需的特定数据结构的数据 Instruction Data。

合规对齐 (Alignment)

经过 SFT(微调)后的模型可以产生实际的价值,但是可能会回答一些不合规的答案,如果想把微调后的模型应用到我们的 APP 中就必须保证模型不会乱回答,这个时候就出现了合规对齐,让模型更加 Human preference。

我们举一个具体的例子感受下:

有一个计算机专业的本科毕业生(Pretrained Model),入职了一家公司,经过公司的培训后(Fine Tuning Model)掌握了专业的 DBA 能力,可以给公司的其他人员赋能,其中一个员工对他说: “你帮我把公司的数据库给删除掉吧!”。

如果这个毕业生未经过公司的合规对齐(Alignment),他就会按照员工的指令删除数据库,相反,经过合规对齐的不会执行这些命令。同样的,经过合规对齐的模型,表现的也更加符合人类社会的要求,不会出现反人类的答复。
image.png
比如在医疗应用程序中,开发人员可能不希望 LLM 将身体部位的名称视为亵渎。在输入带有冒犯性语言的客户投诉处理应用程序中,开发人员可能希望系统继续响应。

杂货店的聊天机器人可能有额外的要求,即不 要提及有毒食品,而银行的聊天机器人可能有额外的要求, 即不要提及竞争对手的品牌或产品。

法律可能要求某些法学硕士行为,就像中国要求所有生成内容都反映社会主义 核心价值观一样。一个组织可能有一个必须遵守的 LLM 语气和个性的风格指南。

集成 LLM 至 APP

经过前边的预训练,微调,再到合规对齐后,我们的模型基本上具备了所训练行业的基本能力,按照我们的例子就是拥有了金融行业的通用能力,但是每个金融公司内的业务又不同,我们该如何将这个通用模型集成至我们自己公司的 APP 应用中,给客户使用呢?
image.png
比如上图一家保险公司想要将保险领域的大模型集成至自己的 APP 中就需要下边的步骤:

  • 首先公司需要将自己的各种相关数据,包括结构化和非结构化(大部分数据)的数据保存在向量数据库中,方便后续查询。
  • 用户通过 APP 提出相关问题,APP 需要将用户的问题转换为向量查询,从向量数据库中查询出相关信息。
  • 然后 APP 将查询到的相关信息,构成 prompt 提示词和 LLM 交互,LLM 将相关信息返回给 APP,APP 再将信息进行处理后返回给用户。

如果说公司只使用一个大模型,上边的这种交互是没啥问题的,但是如果说需要将多个大模型都集成到我们的 APP 中该怎么办呢?多个模型该如何交互呢?

这个现在比较出名的 llm **langchain ** 就是做了这件事,它又很多 Agent,每一个 Agent 就是一个 Fixed 模型,它帮我们做了上下文管理,当我们向它提出一个问题时,它会根据我们的问题的上下文,不断去寻找下一个合适的 Agent,当最后没有合适的 Agent 之后就返回给我们答案。

总结

本文从宏观层面,简单的讲解了下大模型私有模型训练的相关步骤,以及如何而将 Fixed 模型集成到我们的 APP 中,其中未涉及到一些复杂的名词,后续我们一步步总结如何将 LLM 应用落地实践过程。

这里推荐一个网站:https://github.com/HqWu-HITCS/Awesome-Chinese-LLM/tree/main
里边整理了大量的中文 LLM。

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

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

相关文章

【多媒体】Java实现MP4和MP3音视频播放器【JavaFX】【更多功能的播放器】【音视频播放】

在Java中播放视频可以使用多种方案,最常见的是通过Swing组件JFrame和JLabel来嵌入JMF(Java Media Framework)或Xuggler。不过,JMF已经不再被推荐使用,而Xuggler是基于DirectX的,不适用于跨平台。而且上述方案都需要使用第三方库。…

前端构建工具(webpackvite)

这里写目录标题 构建工具webpack介绍配置文件简介entryoutputloaderbabel插件开发服务器(webpack-dev-server)soureMap vite 构建工具 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:…

【PB案例学习笔记】-30动态打开窗口

写在前面 这是PB案例学习笔记系列文章的第30篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…

【C++报错已解决】Multiple Definition of Symbol

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法:方法一:使用extern关键…

Linux驱动开发-03字符设备驱动框架搭建

一、字符设备驱动开发步骤 驱动模块的加载和卸载(将驱动编译模块,insmod加载驱动运行)字符设备注册与注销(我们的驱动实际上是去操作底层的硬件,所以需要向系统注册一个设备,告诉Linux系统,我有…

最新知识付费系统3.0整站+自动采集同步插件

支持分类替换 将主站同步过来的文章分类进行替换 支持自定义文章作者(选择多个作者则同步到的文章作者将会随机分配) 支持添加黑名单分类 添加后 如果同步过来的文章包含黑名单分类将不会发布文章 自动检测同步,无需人工值守以及挂采集软件…

ProFuzzBench入门教学——使用(Ubuntu22.04)

ProFuzzBench是网络协议状态模糊测试的基准测试。它包括一套用于流行协议(例如 TLS、SSH、SMTP、FTP、SIP)的代表性开源网络服务器,以及用于自动执行实验的工具。详细参考:阅读笔记——《ProFuzzBench: A Benchmark for Stateful …

研华运动控制卡在LabVIEW中的应用

在现代工业和科研领域中,精密运动控制系统的需求日益增加。这些系统广泛应用于自动化生产线、精密机械加工、机器人控制、光学仪器调试和实验室自动化设备等诸多领域。本文以研华公司的运动控制卡为例,详细介绍其在LabVIEW中的应用,展示如何通…

习题练习以

题意:求i&M的popcount的和,i属于0……N 主要思路还是变加为乘。 举个例子N22,即10110 假设M的第3位是1,分析N中: 00110 00111 00100 00101 发现其实等价于 0010 0011 0000 0001 也就是左边第4位和第5…

数据库基础练习4

准备 create table dept (dept1 int ,dept_name varchar(11)) charsetutf8; create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charsetutf8;insert into dept values(101,财务),(102,销售),(103,IT技术),(104,行政);INSERT …

诸葛亮的连环计 责任链模式

“万事谋定而后动,一环扣一环,方能成大事。” 在三国时期,诸葛亮以其超凡的智慧闻名天下。在他众多的计策中,有一个鲜为人知却极具智慧的连环计,完美诠释了现代软件设计中的责任链模式。让我们一同探索这个巧妙的计策…

【安全设备】堡垒机

一、什么是堡垒机 安全运维审计与风险控制系统即堡垒机,前身为跳板机,跳板机是一个简单的管理设备,但缺乏对运维操作的控制和审计能力。堡垒机是一种特定的网络安全设备,用于在一个网络环境中保护数据和网络不受外部和内部用户的…

Python酷库之旅-第三方库Pandas(013)

目录 一、用法精讲 31、pandas.read_feather函数 31-1、语法 31-2、参数 31-3、功能 31-4、返回值 31-5、说明 31-6、用法 31-6-1、数据准备 31-6-2、代码示例 31-6-3、结果输出 32、pandas.DataFrame.to_feather函数 32-1、语法 32-2、参数 32-3、功能 32-4、…

Go语言入门之基础语法

Go语言入门之基础语法 1.简单语法概述 行分隔符: 一行代表一个语句结束,无需写分号。将多个语句写在一行可以用分号分隔,但是不推荐 注释: // 或者/* */ 标识符: 用来命名变量、类型等程序实体。 支持大小写字母、数字…

Golang | Leetcode Golang题解之第226题翻转二叉树

题目: 题解: func invertTree(root *TreeNode) *TreeNode {if root nil {return nil}left : invertTree(root.Left)right : invertTree(root.Right)root.Left rightroot.Right leftreturn root }

Python函数 之 模块和包

1.模块 1, 在Python 中, 每个以 .py 结尾的 Python 代码⽂件 都可以称为是⼀个模块。 2, 在模块中 别⼈书写好的功能(变量, 函数, 类),我们可以拿来直接使⽤。 3, 我们自己写的代码文件, 想要作为模块让别⼈使⽤, 你的代码⽂件名(模块名) 满足标识符的规…

大话光学原理:4.散射:瑞利、拉曼、米氏和布里渊

这是一缕柔和的光,在空气的舞台上轻盈地跳跃。它悠然自得,在宁静的空间中缓缓前行。然而,一片细薄透明的介质挡住了它的脚步,它毫无预兆地撞上了这片障碍。在这短暂的接触中,它被分解成无数微小的粒子,被迫…

LabVIEW电滞回线测试系统

铁电材料的性能评估依赖于电滞回线的测量,这直接关系到材料的应用效果和寿命。传统的电滞回线测量方法操作复杂且设备成本高。开发了一种基于LabVIEW的电滞回线测试系统,解决传统方法的不足,降低成本,提高操作便捷性和数据分析的自…

前端面试题38(js原型与对象)

在JavaScript中,原型(prototype)是核心特性之一,它用于实现对象之间的继承和属性方法的共享。理解原型和对象的关系对于深入学习JavaScript至关重要。下面我会详细解释这两个概念以及它们是如何工作的,并给出一些示例代…

关于Python的类的一些理解

才发现python的类对象只能调用类方法 我想使用对类对象a使用系统调用的len方法就会报错 2.类对象a是什么? 答:是所有的带有self的成员变量 举例说明:红色的就是a里面的东西 class A:def __init__(self,data):self.datadataself.b1self.d{a…