赞
踩
LLMs:业务角度路线—基于开源大模型实现对中文语料实战应用(企业级ChatGPT领域大模型-私有化实战八大步骤、提高LLMs模型中文性能的三大策略(直接原始LLMs进行指令微调/基于原始模型扩充词表再二次预训练/直采国内LLMs)、两条路线(国外模型方案LLaMA/Falcon/Chinese-LLaMA等、国内模型方案ChatGLM/BaiChuan等)的设计流程实战集合之详细攻略
本文章创建日期于2023年7月,当前版本是20240216版本,行业领域认知截止2024年2月,并于2024年5月8日23点,正式开源发布!
导读:ChatGPT的核心技术,因为基础的思路都是众所周知的(基于GPT-style+PFE+SFT),但是吊炸天的模型都是闭源,比如OpenAI最后的关键技术公开应该是RLHF技术。
>> 常说通用模型的领域化可能是伪命题,那么领域大模型的通用化是否也是伪命题。比如盘古大模型只做事不做诗;
>> 领域大模型落地,任务场景要比模型能力更重要。如何对大模型进行包装,当模型能力不足的时候,如何让用户更好的体验。
>> 所谓的领域大模型会更新的越来越快,越来越多;目前开源领域大模型集中在医疗领域、法律领域、金融领域和教育领域。
>> 100B以上参数量的模型研究很重要,但不代表7B或13B的模型(落地反而更友好)不重要。
>> 更大模型需要对应更充分的数据量:比如,有的团队,基于ChatGLM,对6B模型采用2万条数据,13B模型采用5万条数据,结果发现精度差不多;>> 大树底下好乘凉:如果既想要中文词表,又没有很大的算力,那建议直接使用ChatGLM-6B/BaiChuan-7b,或者使用BELLE/Chinese-LLaMA-Alpaca/Colossal-LLaMA-2进行中文词表扩充后训练好的模型作为Base模型。
>> 关于选择训练框架:对于同一模型,选择不同的训练框架,对于资源的消耗情况可能存在显著差异(比如使用Huggingface Transformers和DeepSpeed训练OPT-30相对于使用Alpa对于资源的消耗会低不少)。
>> 关于设计模型路线:进行大模型模型训练时,先使用小规模模型(如:OPT-125m/2.7b)进行尝试,然后再进行大规模模型(如:OPT-13b/30b...)的尝试,便于出现问题时进行排查。目前来看,业界也是基于相对较小规模参数的模型(6B/7B/13B)进行的优化,同时,13B模型经过指令精调之后的模型效果,已经能够到达GPT4的90%的效果。
>> 关于创建分布式训练环境:针对已有的环境进行分布式训练环境搭建时,一定要注意之前环境的python、pip、virtualenv、setuptools的版本。不然创建的虚拟环境即使指定对了Python版本,也可能会遇到很多安装依赖库的问题(GPU服务器能够访问外网的情况下,建议使用Docker相对来说更方便)。
遇到需要升级GLIBC等底层库需要升级的提示时,一定要慎重,不要轻易升级,否则,可能会造成系统宕机或很多命令无法操作等情况。-----------近期更新版本:20240216版本,行业领域认知截止2024年2月---------
大模型垂直领域(拥有私域数据)落地应用三步走:
第一步引入RAG赋能司内,创建或者优化现有数据输出方式,不管是搜索、知识图谱、还是 CMS(内容管理系统即企业信息化建设,比如网站【博客文章/留言板等】等)、内部文档,先用起来再说。
第二步打造司内Chat,把RAG使用过程中产生的数据和原有数据结合、清洗,找一个开源的大模型做底座进行微调,引入几个最新的优化技巧(你懂得),产生自己的行业 LLM(垂直一下),巴拉巴拉小吹一下(影响力)、干活(工程化)、发paper(创新性)、迭代V个版本(社区生态)、弄它个1000K的大窗口(炫技),开源个新基准data拉高一下分数(就我最强),有里有面(小有成就)。
第三步统一垂直领域,基于自己的垂直方向 XXX-GPT或XXX-Chat,提炼业务流程,采用自己写+开放社区共创的方式统一自己垂直领域里面的 SOP(标准作业流程),创建自己的业务大脑给到社区和业内。
目录
一、LLMs业务角度/产品角度的设计路线——企业级ChatGPT(领域大模型)私有化实战:
1、企业级ChatGPT—如何选择优质的应用场景:主流思路(产品与技术分开)、四大步骤(以问题为导向)、两种赋能(对做过的应用进行优化/提升业务环节的效率)
(1)、微调的场景—微调之前的业务场景思考:解决方案的选择(fine tuning还是优化prompt→LoRA还是全调)、RAG场景(开源方案基本一致)、垂直领域是否新场景(学习新概念?)
2、企业级ChatGPT:通用大模型到领域大模型的八大步骤:选择底座模型→准备数据→准备资源→模型迁移→模型评估→模型评价→模型修正→模型应用
第1步,选择底座模型:背景的两大痛点(中文不友好/领域知识不足)、两大选型(Base/Chat)、原则(不影响Base模型效果)
第3步,准备资源(多机多卡)+选择框架(DeepSpeed为主)
第4步,模型迁移四种方法(增量预训练/高效参数训练/TCL/PL)
第8步,模型应用(横向赋能应用):两大内容(模型量化降显存/加速推理框架)、两大场景(RAG/Agent)
LLMs之Agent:Agent的简介、实现案例(ChemCrow/AutoGPT/GPT-Engineer/Generative Agents等)、案例应用之详细攻略
3、企业级ChatGPT实战案例(纵向赋能场景,文旅/医学等垂直领域已有案例):让大模型做最后一公里
LLMs之Law:大语言模型领域行业场景应用之大模型法律行业的简介、主流LLMs(PowerLawGLM/ChatLaw)、经典应用之详细攻略
2.1、提升LLMs性能的三大工具:Prompt→RAG→FineTuning(PEFT)
(1)、三者对比(Prompt/FineTuning/RAG)——如何用好大模型?混合三种效果最佳
解决LLMs与生俱来的幻觉劣势:三大优化(RLHF拒绝/Prompt明文限制/RAG追根溯源技术)
LLMs之PE:大模型核心技术—提示工程(Prompt Engineering)的简介、常用工具、使用方法之详细攻略
T1、直接采用国外原始模型(比如LLaMA)+指令微调(含中文语料):比如Vicuna
T2、采用国外原始模型(比如LLaMA)+扩充中文词表+加持增量二次预训练:比如BELLE、Chinese-LLaMA-Alpaca、Colossal-LLaMA-2
(1)、基于词表扩展的LoRA微调,选择训练整个embedding层还是只训练新增token的embedding?取决于新增词汇量的大小
2.2、探究训练数据类别对模型性能的影响:词表扩充、数据质量、数据语言分布、数据规模等因素
LLMs之BELLE:BELLE(一款能够帮到每一个人的中文LLM引擎)的简介(基于Alpaca架构+中文优化+考察词表扩充/数据质量/数据语言分布/数据规模的量化分析)、使用方法、案例应用之详细攻略
T3、直接采用国内LLMs大模型:比如ChatGLM-6B系列、Baichuan-7B系列、InternLM系列
LLMs之LLaMA:《LLaMA: Open and Efficient Foundation Language Models》翻译与解读
LLMs之LLaMA2:LLaMA-2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略
LLMs之LLaMA-2:基于LocalGPT利用LLaMA-2模型实现本地化的知识库(Chroma)并与本地文档(基于langchain生成嵌入)进行对话问答图文教程+代码详解之详细攻略
T1.2、基于原始LLaMA+国外指令精调的版本:比如Alpaca、Vicuna,Phoenix、Chimera
LLMs之Alpaca:《Alpaca: A Strong, Replicable Instruction-Following Model》翻译与解读
LLMs之Vicuna:《Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90%* ChatGPT Quality》翻译与解读
☆T1.4、LLaMA的汉化版本之Chinese-LLaMA-Alpaca:词表扩充的预训练2阶段+指令微调
LLMs:《Efficient And Effective Text Encoding For Chinese Llama And Alpaca—6月15日版本》翻译与解读
LLMs:Chinese-LLaMA-Alpaca的简介(扩充中文词表+增量预训练+指令精调)、安装、案例实战应用之详细攻略
LLMs:Chinese-LLaMA-Alpaca-2(基于deepspeed框架)的简介、安装、案例实战应用之详细攻略
T1.5、LLaMA的汉化版本之Colossal-LLaMA-2
LLMs之Colossal-LLaMA-2:Colossal-LLaMA-2的简介(基于LLaMA-2架构+中文优化+扩充词表+仅千美元成本)、安装、使用方法之详细攻略
T2、Bloom及其衍生的大模型:Bloomz、Phoenix等
LLMs:《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》翻译与解读
LLMs之Falcon 180B:Falcon 180B的简介、安装、使用方法之详细攻略
LLMs之GLM-130B/ChatGLM:《GLM-130B: AN OPEN BILINGUAL PRE-TRAINED MODEL》翻译与解读
LLMs之ChatGLM:ChatGLM Efficient Tuning(一款高效微调ChatGLM-6B/ChatGLM2-6B的工具【LoRA/P-Tunin】)的简介、安装、使用方法之详细攻略
LLMs之ChatGLM2:ChatGLM2-6B的简介、安装、使用方法之详细攻略
LLMs之ChatGLM2:基于ChatGLM Efficient Tuning(微调工具包)实现对ChatGLM2进行LoRA微调并进行推理测试图文教程之详细攻略
LLMs之Baichuan:Baichuan-7B/13B模型的简介、安装、使用方法之详细攻略
LLMs之Baichuan 2:Baichuan 2的简介、安装、使用方法之详细攻略
LLMs之Baichuan 2:《Baichuan 2: Open Large-scale Language Models》翻译与解读
LLMs之Baichuan2:基于RTX 4090-24GB硬件部署并测试Baichuan2-13B-BF16系列模型并对8bits/4bits两种量化模型的模型效果、推理速度图文教程之详细攻略
LLMs之InternLM:InternLM-7B模型的简介、安装、使用方法之详细攻略
LLMs之InternLM:InternLM-20B的简介、安装、使用方法之详细攻略
https://yunyaniu.blog.csdn.net/article/details/131332074
https://yunyaniu.blog.csdn.net/article/details/133801929
https://yunyaniu.blog.csdn.net/article/details/131607074
背景 | 国内使用存在网信办审核风险—OpenAI两头堵:在国内使用ChatGPT属于是两头堵的状况,OpenAI对中国大陆用户是明确禁用的,国家对于非可控信源也是有严格的使用说明的。 (1)、如果你只是自己搭建在家里或者公司内容研究用,那可能风险相对较小。但是如果要基于LLM和RAG技术对外提供经营服务,那基本上你还是需要退回到使用国内经过网信办审核的大模型。 | ||||
简介 | 选择优质的应用场景,应用场景的选择关系着大模型最终的价值呈现,企业可以逐步梳理能够与ChatGPT结合的业务场景,有序开展小规模的双果验证工作,便于在基座大模型上线后实现快速的场景应用迁移。 | ||||
主流思路 | 目前主流做法是将产品和技术分开,主流实现(目前主要是Chat形式,但最后还是要集成到业务系统中),逐步接受容忍度(效率提升而非准确的100%),以前是通过搜索得到精确解而现在AIGC给出的是近似解(可进一步带来启发)。
| ||||
四大步骤 | 提出思路→方案设计→效果验证→应用落地 思路—以问题为导向: 可靠性的基座大模型(保障模型生成精度)→丰富的数据准备(让LLMs提供行业服务能力)→清晰的场景设计(直观体现大模型的业务价值) | ||||
应用 | T1、对做过的应用进行优化:如智能搜索(生成检索报告)、智能客服(生成回复话术)等; T2、提升业务环节的效率:营销(生成回复话术)、设备(挖掘故障案例)等; | ||||
经验 | (1)、模型训练要实现模块化/组件化,进而可以及时更新基座大模型。主要是因为我们自己做的模型,花了很久的训练,最后很可能不如最新的模型性能,比如最新的BaiChuan2模型。 (2)、需要为大模型本身的能力差距做很多辅助组件→来达到最优模型的性能:如果使用国产大模型,或本地部署的开源大模型,确实在整体效果上和OpenAI是存在一些差距的,有时候事倍功半。所以,需要为大模型本身的能力差距做很多”胶水组件“,其实就是很多中间件,比如表格处理,使用OpenAI的话我们可以直接使用开源的PandasAI,它会产生一些代码执行语句,给到ChatGPT,就能生产很好的结果。但是在国产大模型里面,没有这么强的程序执行能力,我们就需要做一些表格存储、处理和计算的额外功能,像这样的例子还有很多。 (3)、复杂场景利用CoT拆解技术解决—多次查询—朝着一个目标多次执行:思维链在一定程度上能够提升模型的效果,但对于比较复杂或者需要多次判断的任务,将步骤进行人为的拆解为多次执行,效果上比一次执行多个步骤要好一些。每个步骤都是简单的任务,模型能够更加理解输入,且对上下文长度的依赖有所降低。 |
简介 | 以业务场景为导向:从更多的角度来思考怎么更好的完成具体的业务需求。 |
解决方案的选择 | (1)、解决方案—fine tuning还是优化prompt—优化prompt的输出可能比微调后的输出更优 >>如何优化prompt—比如prompt中提供更多的示例比prompt中写各种约束效果更好:但是这里的问题是大模型小概率可能会把一些例子的内容输出出来,这个除了规则过滤似乎没有更好的办法。 >>是否采用RLHF微调,感觉这个做的会少一点,但是有的场景还是比较有用的。比如实际应用的例子,RAG问答中,有很多问题在知识库中可能检索不到答案,你需要模型回复"我不知道",当然,你可以选择在SFT阶段随机创造一些这种数据,但是相比于在SFT阶段来对齐这个知识,通过RLHF让模型学会这种拒绝能力评测的效果更好。 |
(2)、微调的选择—LoRA微调还是全参微调 如果你没有足够的资源来进行全参数微调,并不是所有的任务使用LoRA 都能追齐全参微调的效果,比如gsm8k数学推理任务,全参微调与lora微调的差异就比较大。 LoRA微调的分析:因此,对于某些类型的任务来说, 一些数据集可能更容易对齐,而另一些数据集可能会有效果损失。相比之下,全参数微调则没有这个约束, 学习到的权重保留了原始模型的表达能力,可能简化了拟合不同数据的任务。 | |
RAG场景 | 检索增强生成RAG场景:RAG是大模型时代的hello world项目了,但是开源的方案基本都比较一致,不过实际做下来也有比较多的坑要走。 |
垂直领域是否新场景 | 垂直领域是否学习新词汇概念—比如解决相应的任务是否是要让模型学习新的概念; |
背景 | 目前主流的开源基座大模型为Bloom、OPT、LLaMA 1&2及其汉化版本BELLE/Chinese-LLaMA-Alpaca1&2、FlanT5、GLM/ChatGLM 1&2、BaiChuan 1&2、Qwen等。 |
两大痛点 | 语言不匹配—国外模型中文不友好——分词模型和LLMs模型:大多数开源基座对中文的支持都不太友好,例如:Llama、mpt、falcon 等,这些模型在英文上效果都很优秀,但在中文上却差强人意。 专业知识有限—中文领域知识不足:当我们需要一个专业领域的 LLM 时,预训练模型中的知识就尤为重要。由于大多数预训练模型都是在通用训练语料上进行学习,对于一些特殊领域(金融、法律等)中的概念和名词无法具备很好的理解。我们通常需要在训练语料中加入一些领域数据(如:xuanyuan 2.0),以帮助模型在指定领域内获得更好的效果。 |
选择最强基座 | 不少工作选择在一个较强的基座模型上进行微调,且通常效果不错,比如LLaMA、Alpaca、Vicuna等。但是,这有一个成功的前提,那就是预训练模型和下游任务的差距不大,预训练模型中通常已经包含微调任务中所需要的知识。 |
目标 | 目标:不影响Base模型效果上,再在特定任务的领域数据上继续提高模型效果。 |
选择原则 | 选择LLMs的标准:前提是开源+可商用 如果没有私有化需求的话,国内可首选清华智谱的API。 (1)、以需求为导向:如果是RAG场景,着重考虑LLMs的归纳能力,我们不需要LLM在各个方面都很优秀,不需要它会很强的coding和复杂逻辑推理能力,在RAG场景中,最重要的还是出色的归纳能力; (2)、以成本为考量:LLMs模型不需要太大,最好在13B及以下,因为再大就需要一张A100等专业显卡,或者要多张消费级显卡。很多业务的目标是一张RTX 4090可以解决问题,对很多客户来说,A卡很难买,而且价格太高了; >>10B以下级别的选择:Chinese-LLaMA-Alpaca-2-7B、ChatGLM2-6B、Baichuan2-7B、BLOOM-7B; >>10B级别的选择:Chinese-LLaMA-Alpaca-2-13B、Baichuan2-13B; |
分类 | 1、基础模型版本的选择(利用SFT进行领域大模型迁移时):宗旨是在不影响Base模型效果上,再在特定任务上继续提高模型效果。一般基础模型都有两个版本: >> Base版本:适合资源充足情况下,比如100w的数据量); >> Chat版本:适合资源受限的情况下,比如0.5w的数据量;不建议采用全量参数训练会导致原理模型遗忘较多)。 (1)、非常不建议在Chat模型上做增量预训练,还是要在最原始的Base模型上做更好!在Chat模型上进行SFT时,请一定遵循Chat模型原有的系统指令&数据输入格式。 |
经验总结 | 大多的开源模型都会提供一个base版和一个chat版。 1、base版本更适合微调、chat版本更适合prompt工程— >> 基于base版本模型微调能在相应的任务上获得更好的效果,但是不能保证微调后的效果在这个任务上一定比chat版不进行特定任务微调效果好。不过,针对未微调的chat模型可能需要尝试一些适合的prompt来得到有效的效果; >> 做了指令微调的chat模型也不一定会比base模型获得更好的效果,例如llama2-70B-chat效果低于base(8-shot)的效果,但是在base上微调之后的模型基本都会比不微调的base模型使用few shot prompt效果更好; 2、微调很重要—微调后的模型在所有尺寸的base模型上都能获得最优的效果,同时推理的时候也可以用更短的prompt,推理速度也更快; >>如果先让模型在mathqa(3w pair)上微调,再在gsm 8k上微调,尽管mathqa的答案是多项选择,而且质量更低,但是仍能获得大概10+%的准确率提升; >>目前作者没进行chat模型的微调; 3、如何汉化国外优秀大模型如LLamA? 现状:一个较为普遍的问题是:国外大部分优秀的语言模型都没有进行充分的中文预训练。 解决方案:照搬BELLE/Chinese-LLaMA-Alpaca的思路,采用增量预训练方案。即在进行预训练之前,我们需要先选择一个预训练的模型基座。 主流思路:许多工作都尝试将在英语上表现比较优秀的模型用中文语料进行二次预训练,期望其能够将英语上的优秀能力迁移到中文任务中来。比如Chinese-LLaMA-Alpaca=基于原始LLaMA+词表扩充。 |
准备数据 | 准备领域数据集:原始行业数据集(清洗)→语义通顺数据集(过滤)→高质量数据集(去重)→非重复数据集(加工)→最终数据 领域技术标准文档或领域相关数据是领域模型Continue PreTrain的关键。领域数据训练后,往往通用能力会有所下降,需要混合通用数据以缓解模型遗忘通用能力。领域模型Continue PreTrain时可以同步加入SFT数据,即MIP,Multi-Task Instruction PreTraining。 准备指令数据集:自动化生成、人工设计+机器生成、手工注入 |
经验 | (1)、数据构造—混合数据集【通用数据集+领域数据集】:通用数据和领域数据的比例,BaiChuan模型验证了一般为5:1较好! 文旅行业预训练模型—从头自训练(没有使用原始权重+从CLM开始训练):基于BLOOM-7B+8块A100+PT阶段(200G通用数据+30G垂直领域数据)→SFT阶段(420W指令)→BLOOM-7B-Chat 参考地址:实战!私有化部署RAG,选ChatGLM2-6B还是Baichuan2-13B? (2)、特定场景需要对应的数据集:多轮对话的复杂任务场景,需要构造多轮对话数据集; |
痛点 | 大模型时代的硬件痛点:传统的单机单卡导致的内存墙和通信墙→单机多卡或者多机多卡 大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说,传统的单机单卡训练模式肯定不能满足上千(万)亿级参数的模型训练,这时候我们就需要解决内存墙和通信墙等一系列问题,在单机多卡或者多机多卡进行模型训练。 |
选择方案 | 配置计算资源:多机多卡,资源=数据占用+显卡占用,比如RTX309024G、RTX 409024G、A40-48G、A6000-48G、A800-80GB、H100-80GB、A100-80GB |
选择框架 | 选择训练框架:DeepSpeed、Megatron-LM、Clossal-AI、OneFlow |
模型迁移 | 模型领域迁移 >>增量预训练: >>高效参数训练: >>提示学习Prompt Learning(被动指示): |
https://yunyaniu.blog.csdn.net/article/details/133801929
模型评估 | 领域大模型评估: T1、人工抽样评估 T2、自动评估工具:题型为选择题 |
模型评价 | 评价模型训练:训练评价模型;比如答案排序、多个任务答案、Prompt取样; |
领域大模型评价策略 (1)、领域评测集时必要内容,建议有两份,一份选择题形式自动评测、一份开放形式人工评测。 (2)、三种方法 T1、模板做题客观规则自动打分:收集各种类型数据,构建各维度能力评价数据集;一般是多项选择题为主; T2、GPT-4模型自动主观打分:对模型输出结果,利用GPT-4进行评价打分。 T3、竞技场PK:基于相同的输入,人工评价两个模型输出结果的好坏,给出胜-平-负; |
模型修正 | 人类偏好对齐:任务模型与评价模型相互迭代; |
主要方法 | 可以采用RLHF【对齐性+与专家对齐+真实无害任务】+存在对齐税 |
简介 | 领域大模型落地验证 |
加速推理 | 模型量化降显存技术:模型量化技术,采用4bit或8bit量化; 加速推理框架:比如FasterTransformer |
两大场景 | RAG场景: Agent场景: |
经验总结 |
RAG | |
Agents |
https://yunyaniu.blog.csdn.net/article/details/130215772
https://yunyaniu.blog.csdn.net/article/details/131255944
高质量文案编写 | 高质量文案编写:控制成本前提下+利用LLMs高效生成高质量的文案(替代传统基于模板匹配规则的方法) |
工业制造维修经验资产知识化 | 工业制造维修经验资产知识化:将专家的维修经验转为知识库让LLMs提供检修故障方案 在大型工厂的工业设备检修场景下,设备的复杂性和故障的多样性使设备检修对专家经验依赖度极高。可以利用现有的检修经验资产,基于检修经验构建知识图谱,为检修人员提供基于实际故障的处置建议(现有故障推理和结果匹配+类ChatGPT的生成能力对答案进行融合),为一线工人提供可执行的处理方案,提高一线检修工人的检修效率。 |
舆情风控—突发事件分析 | 舆情风控—突发事件分析:存在突发事件快速处置的需求+需要从大量记录中快速梳理事件脉络及核心要点+让LLMs以最小代、最快速输出可信的事件报告 |
文旅两阶段 | 文旅行业预训练模型=基于BLOOM-7B-CHat模型 增量预训练阶段CLM(200G通用数据+30G垂直数据)→指令微调阶段(SFT,420W指令数据) |
医学三阶段 | 医学领域大模型=基于BaiChaun-7B CPT无监督增量/持续预训练阶段【NSP任务】→SFT有监督微调阶段→RKHF的DPO直接偏好优化阶段(与医学领域的知识对齐) 2023年10月13日,Qilin-Med,基于BaiChuan-7B+多阶段训练方法(CPT增量/持续预训练阶段→SFT有监督微调阶段→RKHF的DPO直接偏好优化阶段) |
LLMs之Law:大语言模型领域行业场景应用之大模型法律行业的简介、主流LLMs(PowerLawGLM/ChatLaw)、经典应用之详细攻略_一个处女座的程序猿的博客-CSDN博客
图片地址:3 Ways To Improve Your Large Language Model - Maarten Grootendorst
痛点 | 随着人们对大型语言模型 (LLMs) 的兴趣激增,许多开发人员和组织正忙于利用其能力构建应用程序。然而,当开箱即用的预训练LLM没有按预期或希望执行时,如何提高LLM应用的性能的问题。那么,如何充分用好大模型? | ||||||||||||||||||||
对比 | 考虑点:外部数据源、调整模型适配风格、减少幻觉性、训练数据的规模性、敏捷性(数据的动态性/模型保持最新的必要性)、决策的可解释性
(1)、RAG比FineTuning更适合需要访问外部数据源的场景:如果应用程序需要利用外部数据源,使用RAG系统可能比仅仅试图通过FineTuning“融入”所需知识,更有效和可扩展。 >>RAG系统旨在通过在生成响应之前从知识源检索相关信息来增强LLMs的能力。这使得该技术非常适合需要查询数据库、文档或其他结构化/非结构化数据存储库的应用程序。可以利用这些外部源优化检索器和生成器组件。 >>微调LLM虽然可以学习一些外部知识,但这需要大量来自目标领域的带标签的问答数据集。此数据集还必须随着基础数据的变化而不断更新,这对于频繁变化的数据源来说是不切实际的。 (2)、FineTuning比RAG更适合需要适应具体语言风格的场景(behaviour/writing/vocabulary):比如,如果我们希望模型听起来更像医学专业人士,或者以诗意的风格写作,或者使用特定行业的术语,那么对特定领域的数据进行微调可以让我们实现这些定制。 (3)、RAG更易引入延迟:与基于内化知识生成响应的微调LLM相比,RAG系统涉及在生成响应之前检索数据,可能会引入更多延迟。 | ||||||||||||||||||||
使用经验总结 | (1)、建议在进行微调之前尝试使用 RAG,如果能用低成本就不要去微调;因为RAG 更简单、更便宜,但其质量可能不匹配。可以从 RAG 开始,评估其性能,如果发现不足,则转向微调。 (2)、不同方案会有很大差别的项目规划和预算:RAG 和微调之间的细微差别涉及模型架构、数据要求、计算复杂性等。忽视这些细节可能会破坏你的项目时间表和预算。 |
https://yunyaniu.blog.csdn.net/article/details/131237789
https://yunyaniu.blog.csdn.net/article/details/131333408
https://yunyaniu.blog.csdn.net/article/details/130215772
简介 | 如果不扩充词表,对于中文效果怎么样?根据Vicuna官方的报告,经过Instruction Turing的Vicuna-13B已经有非常好的中文能力。 |
背景 | (1)、开源最强LLaMA模型对中文不友好:LLaMA模型主要在英语语料库上训练,并且它的原生tokenizer词表中包含不到一千个汉字,因此在有效编码全面的中文文本方面表现不佳。在对中文字进行tokenzation时,一个中文汉字往往被切分成多个token(比如需要2-3个Token才能组合成一个汉字),这显著降低编解码的效率。 当然,如果不扩充词表,也可以通过进一步微调适应中文能力,但是很可能能力有限。根据Vicuna官方的报告,经过Instruction Turing的Vicuna-13B已经有非常好的中文能力。 (2)、主流的BPE分词法不太适合中文:使用BPE字节标记对于Transformers编码器,来捕捉汉字的语义细微差别构成了挑战。比如对中文字进行tokenzation时,一个中文汉字往往被切分成多个token,即2-3个Token才能组合成一个汉字,显著降低编解码的效率。 |
相关研究—LLaMA需不需要扩充词表? 根据Chinese-LLaMA-Alpaca、BELLE的报告,扩充中文词表,可以提升中文编解码效率以及模型的性能。但是扩词表,相当于从头初始化开始训练这些参数。如果想达到比较好的性能,需要比较大的算力和数据量。 同时,Chinese-LLaMA-Alpaca也指出在进行第一阶段预训练(冻结transformer参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量)时,模型收敛速度较慢。如果不是有特别充裕的时间和计算资源,建议跳过该阶段。因此,虽然扩词表看起来很诱人,但是实际操作起来,还是很有难度的。 排疑:可以不进行增量预训练而直接采用指令微调吗? | |
简介 | 提升LLaMA-2中文能力的两大步骤 = 扩展词表 + embedding 词表扩充是指向现有词汇库中添加新词或术语,以适应不断变化的语言和新兴领域的需求。这些新token主要是一些低频词或崭新词汇,可以补充原词表的不足。 >> 在传统的词表中,只包含了一些常见和常用的词汇,但无法覆盖所有可能的词汇。 >> 随着时间的推移和社会的发展,新的词汇和术语不断涌现,例如科技、流行文化、社交媒体等领域的新词汇。 >> 因此,词表扩充变得越来越重要,以便有效地处理和理解新的文本数据。 |
实现方法 | 比如:在中文语料库上训练一个中文tokenizer模型,然后将中文 tokenizer与 LLaMA原生的 tokenizer进行合并,通过组合它们的词汇表,最终获得一个合并后的 tokenizer 模型。 |
意义 | 提高非英语(目标语言)场景的LLMs的适应能力—解决国外模型对中文不友好:提高在非英语语言场景中适应LLaMA等开源模型,可进一步使用目标语言的指令数据进行微调来提高模型性能。 扩充中文词表,可以提升中文编解码效率以及模型的性能。大多数开源基座对中文的支持都不太友好,例如:Llama、mpt、falcon 等,这些模型在英文上效果都很优秀,但在中文上却差强人意。 |
作用 | (1)、解决词表中的OOV问题:即遇到未在训练数据中出现的词语。通过在更大规模的数据集上训练新的标记嵌入,可以丰富模型对于未知词语的理解能力,并提高模型在自然语言处理任务中的性能。 (2)、提高字符串序列编码的压缩率—提高模型的编解码的效率:在LLaMa原来的词表上,一个汉字平均1.45个token,扩充后的Chinese-LLaMa为0.65个token;那在垂直领域内呢?比如在LLaMa在继续扩充领域内词表,金融或者医疗等等,把“负债表”,“糖尿病”等领域词汇也加入词表里,那更加能提高其编解码的效率。 (3)、提高中文应用时模型的上下文窗口长度,原LLaMa上下文长度是4096个token,不扩充词表前,按1.45来算就是最多只能输入2824个汉字,扩充后以0.65来算的话就是6301,垂直领域会更大。 备注:上下文窗口长度参数解释,模型在处理文本时会关注多远距离的单词或标记。比如当context length=512时,如果模型要生成一个词或标记,它会考虑它前面和后面各512个单词或标记的上下文,以确定生成的词或标记应该是什么。 (4)、增强信息的完整性:表达语义会更加完整。 (5)、提高信息价值性:使编码的序列包含更多有价值的信息,从而在理论上提高了章节级编码的能力。 (6)、有可能会提高LLaMa在中文+垂直应用的上的表现:如果在垂直领域扩充词表后,垂直领域词太多过拟合,但会影响通用领域效果。 |
缺点 | (1)、扩充完词表后必须要进行二次增量预训练—导致耗费较大的算力:扩充完词表后还要经过一系列的后续处理和训练,但需要很多的资源。扩词表,相当于从头初始化开始训练这些参数。如果想达到比较好的性能,需要比较大的算力和数据量。 (2)、过多的词汇表标记会带来高内存:过多的词汇扩展会导致与嵌入相关的参数增加,从而导致更高的内存使用,进而影响训练过程的效率。 (3)、有限的训练集场景下+过多的词汇表标记=使得一些标记无法被有效学习→也会导致模型性能不佳:如果训练数据集有限,导致许多标记没有被有效地学习到和使用。这些未使用的标记可能是因为数据集中的样本数量不足,无法充分覆盖所有可能的标记。因此,这些未使用的标记可能没有被模型有效地学习到,无法发挥作用。 |
捆绑组合 | 词表扩充和二次预训练的组合方法可以增强模型的词汇表覆盖能力和语义理解能力,从而提高自然语言处理任务的性能和鲁棒性。 (1)、扩充词表阶段+二次增量预训练阶段(去理解新token的语义,但只更新embedding层参数)+指令精调阶段(理解特定领域):目的是在预训练中引入更多的中文词汇,以提高模型对中文语境的理解能力。在更大量的数据集上对这部分新token的embedding进行重新训练,使其更贴合目标领域。 (2)、预训练阶段(可理解为两个子阶段);第一阶段是原始的Pretraining,思路很简单,就是输入一堆文本,让模型做 Next Token Prediction 的任务,这个很好理解。第二阶段只训练embedding层,固定模型transformer大部分的参数(比如只开放q和v参数),以适配新增的中文词向量。模型可以学习到适应中文语料的词表示。 (3)、指令精调阶段—提升模型对指令的理解和执行能力:使用LoRA技术,训练embedding层的同时更新LoRA参数,以提升表示能力。指令精调阶段与Stanford Alpaca项目类似,通过LoRA技术进行高效的精调,提升模型对指令的理解和执行能力。 注意:高效微调技术(LoRA /PTuning)大多只用在二次训练阶段或微调(Finetune)阶段,不能用在最初预训练阶段。 |
经验总结 | 扩充词表诱人但实际操作比较难:Chinese-LLaMA-Alpaca模型中,指出在进行第一阶段预训练(冻结transformer参数,仅训练embedding,在尽量不干扰原模型的情况下适配新增的中文词向量)时,模型收敛速度较慢。如果不是有特别充裕的时间和计算资源,建议跳过该阶段。因此,虽然扩词表看起来很诱人,但是实际操作起来,还是很有难度的。 最好使用扩充中文词后的开源模型:如果既想要中文词表,又没有很大的算力:建议直接使用基于中文的国内模型(如ChatGLM-6B、BaiChuan-7B、InternLM等)或者使用国外的汉化模型(如BELLE、Chinese-LLaMA-Alpaca、Colossal-LLaMA-2进行中文词表扩充后训练好的模型)作为Base模型。 |
疑问 | (1)、建议准备“垂直领域”的训练语料,但最好和“通用领域”的训练语料混合一下; (2)、“垂直领域”词表多大更合适?会不会影响“通用领域”的效果; (3)、这些新增的词在模型的embedding如何初始化,以及后续的如何训练也是更为重要的! |
案例实战 | (1)、BELLE模型扩充中文词表:在BELLE中,首先,在120w行中文文本上训练出一个 5w 规模的 token 集合;其次,将这部分 token 集合与原来的 LLaMA 词表做合并;最后,再在 3.2B 的中文语料上对这部分新扩展的 token embedding 做二次预训练。 (2)、Chinese-LLaMA-Alpaca模型扩充中文词表:利用哈工大开源分词器将从32000扩充到49953个词汇。发现Chinese-LLaMA在原始 tokenizer上新增了17953个tokens,且加入 token的大部分为汉字。 其中,Chinese-LLaMA-2在原版Llama-2的基础上扩充并优化了中文词表,使用了大规模中文数据进行二次增量预训练,进一步提升了中文基础语义和指令理解能力,相比一代相关模型获得了显著性能提升。 (3)、Colossal-LLaMA-2模型扩充中文词表:Colossal-LLaMA-2分词器将LLaMA-2词汇表从32000扩展到69104。通过计算原始LLaMA-2嵌入的均值来初始化新的单词嵌入,然后将这些新行附加到原始嵌入矩阵的末尾。 |
背景 | 在LLMs中,如果通过词表扩展,额外新增了token,那使用LoRA微调时是训练整个embedding层,还是只训练新增token的embedding? |
对LLM进行词表扩展时,LoRA微调时的处理方式有以下两种选择: T1、只训练新增token的embedding:这种方法的优点是参数量小,训练时间短。缺点是只学习新增词汇的表示,而不学习原词表中词汇表示的微调,容易导致新老词汇表示不协调。 T2、训练整个embedding层:这种方法可以同时微调原词表和新增词汇的表示,使新老词汇表示更协调。但需要训练更多参数,训练时间更长。 | |
个人建议 | 新增词汇量的多少是决定只训练部分embedding还是全部embedding的关键。我们应该根据词汇新增的比例,选择合适的训练方式,既保证模型性能,又控制训练时间。 >>如果新增词汇量较小=节省计算资源+保留预训练模型的知识+避免过拟合:如果只占词表的一小部分,则可以只训练新增词汇的embedding,以节省训练时间。更重要的是,LLMs的预训练模型已经通过大规模数据进行了训练,其中的embedding层已经学习到了丰富的知识(语法、语义和世界知识)。如果微调整个embedding层,可能会破坏这些已经学到的知识,导致性能下降。 (1)、一般情况下,采用主流的通用大模型,词汇已足够多,可首选该方法,除非学习一种新的语言。 >>如果新增词汇量较大,占词表较大比例,则最好训练全部embedding层。因为大量新增词汇可能会影响模型对语义的理解,全量训练可以帮助模型学习词汇之间的关系,使新老词汇表示更协调,比如学习一种新的语言。 |
https://yunyaniu.blog.csdn.net/article/details/131137574
https://yunyaniu.blog.csdn.net/article/details/133834183
LLMs之Colossal-LLaMA-2:Colossal-LLaMA-2的简介(基于LLaMA-2架构+中文优化+扩充词表+仅千美元成本)、安装、使用方法之详细攻略-CSDN博客
LLMs之LLaMA:《LLaMA: Open and Efficient Foundation Language Models》翻译与解读_ai自然语言处理_一个处女座的程序猿的博客-CSDN博客
https://yunyaniu.blog.csdn.net/article/details/131526139
LLMs之LLaMA2:LLaMA2的简介(技术细节)、安装、使用方法(开源-免费用于研究和商业用途)之详细攻略_一个处女座的程序猿的博客-CSDN博客
LLMs之Alpaca:《Alpaca: A Strong, Replicable Instruction-Following Model》翻译与解读_一个处女座的程序猿的博客-CSDN博客
https://yunyaniu.blog.csdn.net/article/details/131016620
https://yunyaniu.blog.csdn.net/article/details/131137558
https://yunyaniu.blog.csdn.net/article/details/131318974
LLMs:Chinese-LLaMA-Alpaca的简介(扩充中文词表+增量预训练+指令精调)、安装、案例实战应用之详细攻略_一个处女座的程序猿的博客-CSDN博客
https://yunyaniu.blog.csdn.net/article/details/131319010
https://yunyaniu.blog.csdn.net/article/details/122274996
https://yunyaniu.blog.csdn.net/article/details/113482076
https://yunyaniu.blog.csdn.net/article/details/131016046
LLMs:Chinese-LLaMA-Alpaca-2的简介、安装、案例实战应用之详细攻略_一个处女座的程序猿的博客-CSDN博客
LLMs之Colossal-LLaMA-2:Colossal-LLaMA-2的简介(基于LLaMA-2架构+中文优化+扩充词表+仅千美元成本)、安装、使用方法之详细攻略-CSDN博客
LLMs:《BLOOM: A 176B-Parameter Open-Access Multilingual Language Model》翻译与解读_一个处女座的程序猿的博客-CSDN博客
https://yunyaniu.blog.csdn.net/article/details/131137560
LLMs之Falcon 180B:Falcon 180B的简介、安装、使用方法之详细攻略_一个处女座的程序猿的博客-CSDN博客
更新中……
LLMs之GLM-130B/ChatGLM:《GLM-130B: AN OPEN BILINGUAL PRE-TRAINED MODEL》翻译与解读_一个处女座的程序猿的博客-CSDN博客
https://yunyaniu.blog.csdn.net/article/details/120249551
https://yunyaniu.blog.csdn.net/article/details/130998758
LLMs之ChatGLM2:ChatGLM2-6B的简介、安装、使用方法之详细攻略_一个处女座的程序猿的博客-CSDN博客
https://yunyaniu.blog.csdn.net/article/details/132613495
https://yunyaniu.blog.csdn.net/article/details/132882773
LLMs之Baichuan:Baichuan-13B模型的简介(包括Baichuan-7B)、安装、使用方法之详细攻略_一个处女座的程序猿的博客-CSDN博客
LLMs之Baichuan 2:Baichuan 2的简介、安装、使用方法之详细攻略_一个处女座的程序猿的博客-CSDN博客
LLMs之Baichuan 2:《Baichuan 2: Open Large-scale Language Models》翻译与解读_一个处女座的程序猿的博客-CSDN博客
https://yunyaniu.blog.csdn.net/article/details/132867299
https://yunyaniu.blog.csdn.net/article/details/133108406
LLMs之InternLM:InternLM-7B模型的简介、安装、使用方法之详细攻略_一个处女座的程序猿的博客-CSDN博客
LLMs之InternLM:InternLM-20B的简介、安装、使用方法之详细攻略_一个处女座的程序猿的博客-CSDN博客
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。