ChatGPT 应用系统开发(二) -- 微调(Fine-tuning)企业专属的模型

前言

上一篇讨论 OpenAI API基本的用法,接着我们利用微调(Fine-tuning)建立企业专属的模型,作为特定领域的资料库,让使用者以 ChatGPT 提问。

『微调』是转移学习(Transfer Learning)重要的概念,大型语言模型(LLM)是一个基础模型(Foundation Model),好比是一支万用的螺丝起子,接上各种插头,就会有不同的功能,例如情绪分析、Q&A、文本生成...,这个方式就是微调(Fine-tuning)。

http://img2.58codes.com/2024/20001976Dw4B9FavQ6.png
图一. 模型微调(Fine tuning),可实现不同的任务

一般企业会有专有的商品或服务,例如金控公司会有各式的基金、保险、金融商品...,如果向ChatGPT提问相关商品资讯,很难得到正确答案,这时就可以利用『微调』,建立企业专属的模型,提供客户或内部使用者查询。

依官网文件说明,『微调』还有以下优点:

相对于一般提示,微调得到的答案有更高的品质,因为微调模型範围较聚焦。相对于一般提示,微调可提供更多的训练案例,因为一般提示通常是小样本学习(Few-shot learning)。对微调模型发问,可使用较少的单字或词(Tokens),因为模型已限定提问範围。回答较迅速,低延迟(Lower latency),因为模型较小,推论自然较快。

微调程序

微调不需要写程式,步骤如下:

确定openai套件升级至最新版,并在环境变数OPENAI_API_KEY内设定密码(Secret)。準备资料:最终格式须为JSONL,每一列含一个提示及其答案,範例如下。OpenAI指令可以将CSV、TSV、XLSX、JSON档案转换为JSONL格式,并验证是否正确,所以,只要準备CSV或Excel档案即可。
{"prompt": "<提示>", "completion": "<答案>"}
{"prompt": "<提示>", "completion": "<答案>"}
{"prompt": "<提示>", "completion": "<答案>"}
...

以下进行一个简单的情绪分析测试,部分资料如下,完整资料可自GitHub sentiment_simple_CN.csv下载:

prompt,completion这部达文西密码真棒。,1这部蝙蝠侠真棒。,1这部断背山真棒。,1这部哈利波特真棒。,1这部惊魂记真棒。,1这部星际大战真棒。,1这部不可能的任务真棒。,1这部达文西密码糟透了。,0这部蝙蝠侠糟透了。,0这部断背山糟透了。,0这部哈利波特糟透了。,0这部惊魂记糟透了。,0这部星际大战糟透了。,0这部不可能的任务糟透了。,0

在终端机或cmd中,执行以下指令,会有一系列的问答,通常使用预设值即可:
openai tools fine_tunes.prepare_data -f <档案>

建立微调模型,在终端机或cmd中,执行以下指令,模型请参考表二:
openai api fine_tunes.create -t <资料档> -m <模型>

微调模型训练完成后,会产生模型代码,即可测试模型:
openai api completions.create -m <模型代码> -p <提示>
注意,提示要遵守训练资料的格式来撰写。

也可以使用API或在Playground测试。

目前只限在GPT-3模型进行微调,不支援最新的GPT-3.5或4.0,GPT-3又分为以下模型:
http://img2.58codes.com/2024/20001976olm4pMRLsk.png
表二. GPT-3各类模型

Playground测试画面如下,右边选单可选择刚训练好的模型,要注意其他参数的设定,例如temperature、Maximum length,才能得到正确的回答:
http://img2.58codes.com/2024/20001976H1Bkf8z803.png
图三. Playground

程式撰写

使用API测试很简单,只要把模型设定为微调模型代码即可,例如将以下程式码存成fine_tune_test.py。

# 载入套件import openai    if len(sys.argv) < 3:    print("执行方式:python fine_tune_test.py <prompt> <model>")    exit()# 呼叫 API    prompt = sys.argv[1] + '->'response = openai.Completion.create(    model=sys.argv[2],    prompt=prompt,    temperature=0,    max_tokens=1,)# 显示回答print(response.choices[0].text.strip())

执行 python fine_tune_test.py "The movie is great." "curie:ft-digibank-2023-03-14",即可得到答案,最后一个参数为模型代码,须修改为读者微调的模型。虽然训练资料是中文,但输入英文提示也是可以得到正确答案,而且提示也没指名哪部电影,也OK。

结语

微调的功能基本上属于监督式学习,训练资料必须标注答案,因此,一个问题如果能有各式各样的提示,训练出来的模型就愈强大,这可以透过『资料增补』(Data Augmentation)方式,产生更多的训练资料。除了情绪分析外,也可以应用在问答、分类...等任务。

微调的成本看似低廉,但若使用大量资料训练,成本还是不低,网路上有人训练一个模型花了8,000美元,因此,训练时先小量测试,确定程序及準确性没问题后,再使用大量训练资料,避免荷包大失血。

另外还有一种作法『文本嵌入』(Text Embedding),我们下次再来讨论喽。

更详细的说明可参考拙着或OpenAI官网文件。

工商广告:)

影音课程:

开发者必学:OpenAI API应用与开发。
开发者必学:OpenAI API应用与开发
ChatGPT企业实践指南 | 技术透析与整合应用。
深度学习PyTorch入门到实战应用。

书籍:

ChatGPT 完整解析:API 实测与企业应用实战。
ChatGPT 完整解析:API 实测与企业应用实战
Scikit-learn 详解与企业应用。
开发者传授 PyTorch 秘笈
深度学习 -- 最佳入门迈向 AI 专题实战。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章