- A+
领500g书库,关注公众号:程叫兽的宝藏 (长按可复制!)
热门下载区==>点此链接进入<<<
目录(点击切换)
扫上面二维码获取原文
从零开始:使用微调和嵌入训练自己的
AI
个性化
大模型
一.前言
ChatGPT
是“大力出奇迹”的经典表现,
大模型
给ChatGPT带来了惊人的智能,但是要训练这样的大模型,可是十分烧钱的,根据
OpenAI
给出的数据,1700亿参数的Davinci模型从头训练一遍,大概需要耗时3个月,耗资150万美元。那我们普通人或者小公司面对这个高门槛,对自定义模型是不是就完全没有希望了呢?其实除了从头训练一个模型,我们还可以选择基于一个基础模型进行训练,这样,我们可以往里添加自己的个性化数据,最终得到一个领域增强的个性化模型,目前有两种训练语料的方式embedding(嵌入)、Fine-tuning(微调)。
个性化模型有什么用?我们知道,
OpenAI
给的模型(如Davinci、Curie、gpt3.5-turbo)都是通用化模型,而现代社会的行业和知识如此之庞大,每个领域都有自己细分的专业知识,比如,我们知道
ChatGPT
的一个典型应用场景就是智能客服,但同样是客服,保险领域的客服和淘宝店铺的客服需要面对的客戶和需要解答的问题就完全不一样,想要给出更好的答案,我们就需要打磨自己的个性化模型。我们也可以用自己之前写的文章训练一个
AI
版的自己,以个性化的口吻回复用户的问题。
二.主流的训练模型的两种方式Fine-tuning和Embedding
(一).概念介绍:
Fine-tuning(微调):Fine-tuning是指在
预训练模型
的基础上,使用特定的任务数据对模型进行重新训练,以适应具体的应用场景或任务。通常,预训练模型通过大规模数据集进行事先训练,获得了广泛的语言理解和生成能力。而Fine-tuning则是在此基础上,针对特定任务的数据集进行进一步训练,以使模型更好地适应该任务,并提高其性能。通过Fine-tuning,可以使模型更加专业化,提高在具体任务上的准确性和效果。
Embedding(嵌入):Embedding是将高维的离散数据转化为低维连续向量表示的过程。在
自然语言处理
中,
Word Embedding
是一种常见的技术,将词汇表中的单词映射为实数向量。这些向量在低维空间中对应着单词的语义信息,使得计算机可以更好地理解和处理文本数据。通过将词汇嵌入到低维
向量空间
中,可以捕捉到单词之间的关联和语义相似性,从而使得模型能够更好地进行语言理解和相关任务。
在使用
GPT
模型进行
自然语言处理
任务时,通常会先进行预训练得到一个通用的语言模型,然后根据具体的任务数据对模型进行Fine-tuning,使其适应特定任务的需求。同时,模型将单词和文本嵌入到低维
向量空间
中,用于表示和处理文本数据,从而提高模型的语义理解能力和任务性能。Fine-tuning和Embedding可以共同帮助模型更好地适应特定任务,并提升模型在该任务上的表现。
(二).Fine-tuning和Embedding的区别
微调就像你通过学习准备考试,是一种
长期记忆
,但过了一周后考试来临,模型可能会忘记袭击,或者记错它从来没有读过的事实。
嵌入就像记笔记,是一种短期记忆,当考试的时候,你把笔记带上,随时翻看笔记,对于笔记上有的内容可以得到准确的答案。
另外嵌入的搜索提问方式相对于微调有一个缺点就是它每次附带的文本数量是有限制的,因为除了原始的问题,它还需要带上搜索出来的问题,
GPT-3.5
是4K(大约5页),
GPT-4
最大是32K(大约40页)。
就好比你有成书的教科书可以借鉴,但每次却只能翻看其中几页笔记。
如果你想构建一个对大量文本问答的系统,
OpenAI
建议“搜索-问”(Search-Ask)的方法。
也就是先在本地文档库中Search,拿到本地的数据结果,再去Ask,把搜索结果和问题一起交给
GPT
,这样GPT可以根据你提供的内容以及它模型中的数据,一起将结果返还给你。
三.两种技术的实现原理
(一).Fine-tuning(微调)的实现原理:
Fine-tuning是一种
迁移学习
的方法,它基于预先训练好的模型,提供特定语料进行微调,让机器人学习指定的
数据格式
进行模仿创新,使之适应特定的任务。
比如可以让
GPT
学习不同类型的古诗是怎么写的,他将拆解学习案例的语言结构、用词特点和格式等,以此作为依据进行创作。
这种方法能够节省大量的计算资源和时间,因为我们不需要从头开始训练一个全新的模型。
在
OpenAI
的情境下,我们通常会使用一个大型的
预训练模型
(如GPT-3),然后通过Fine-tuning的方式,让它适应我们特定的任务,例如文本分类、
命名实体识别
等。
OpenAI的Fine-tuning技术基于
预训练模型
,通过在小规模任务上对该模型进行微调来快速适应具体的任务。
其核心原理是将
预训练模型
的权重进行微调,以适应新任务的输入和输出。
Fine-tuning特点是:模仿再创新。
而嵌入模型则是忠于语料再稍加完善,两者是有显著区别的。
实际上Fine-tuning这种模式日常基本不使用。因为效果不太好,同时可能存在敏感数据安全问题,训练费用也比较高。
官方地址:
https://platform.openai.com/docs/guides/fine-tuning
(二).Embedding(嵌入)的实现原理:
1.准备数据
收集:
准备一个本地知识库,提供需要的文本,如文章、报告、日记、博文、网页、论文等等;
分块:
将整篇的文档切分成小的文本片段(Chunk);
嵌入:
将文本片段使用
OpenAI
API
或者本地 Embedding 模型来将文本向量化为多维向量数组;
存储:
对于大型数据集,需要将向量数组存储,以便于以后调用。对于小型数据集可以选择临时存储的方式;
2.语义检索
将用户问题使用
OpenAI
Embedding
API
或者本地 Embedding 模型来将问题生成 Embedding 嵌入;
通过向量值之间的相似度检索(如
余弦相似度
或欧式距离算法),查询与问题最相似的文本片段;
3.文本注入和回答
将用户问题和查询到的最相似的文本片段(TopK)作为提问消息上下文注入到
大模型
中;
大模型根据用户问题和注入的少样本提示回答出问题;
4.整体流程图
Embedding(嵌入)实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt 中 -> 提交给 LLM 生成回答。

| 任务 | 问题 |
| 文本 | 任务 |
| 数据 | 进行 |
| 任务 | 模型 |
| tuning | 任务 |

