前言
上一篇讨论 OpenAI API基本的用法,接着我们利用微调(Fine-tuning)建立企业专属的模型,作为特定领域的资料库,让使用者以 ChatGPT 提问。
『微调』是转移学习(Transfer Learning)重要的概念,大型语言模型(LLM)是一个基础模型(Foundation Model),好比是一支万用的螺丝起子,接上各种插头,就会有不同的功能,例如情绪分析、Q&A、文本生成...,这个方式就是微调(Fine-tuning)。
图一. 模型微调(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又分为以下模型:
表二. GPT-3各类模型
Playground测试画面如下,右边选单可选择刚训练好的模型,要注意其他参数的设定,例如temperature、Maximum length,才能得到正确的回答:
图三. 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应用与开发。
ChatGPT企业实践指南 | 技术透析与整合应用。
深度学习PyTorch入门到实战应用。
书籍:
ChatGPT 完整解析:API 实测与企业应用实战。
Scikit-learn 详解与企业应用。
开发者传授 PyTorch 秘笈
深度学习 -- 最佳入门迈向 AI 专题实战。