OpenAI微调模型测试
前言
之前只是使用了现成的OpenAI的模型,每次调用都要给出一大堆的重复提示词,而且效果也不是太好,这次尝试用其称为微调(fine-tuning)
来训练个新的模型。可以节省token,顺便看看微调后的模型效果和之前有多大区别。
OpenAI已经给出了详尽的说明,下面就只记录下具体的步骤。
安装
直接在容器里操作吧,不想污染主机。
起一个python的环境。
version: "2.3"
services:
app:
image: python
container_name: openai
environment:
- HTTP_PROXY=http://clash:7890
- HTTPS_PROXY=http://clash:7890
- no_proxy=localhost,127.0.0.1,::1
entrypoint: "sleep infinity"
volumes:
- ./data:/data
networks:
default:
external: true
name: nginxproxynet
docker exec -it openai /bin/bash
export OPENAI_API_KEY="<OPENAI_API_KEY>"
pip install --upgrade openai
pip install openai[datalib]
数据准备
我感觉这是工作量最大的内容了。这里先用几个试一下:
prompt,completion
xxxx,xxxx
然后用工具整理一下
openai tools fine_tunes.prepare_data -f /data/data.csv
这里他会自动帮我们添加提示的结束字符,以及回答的开头空格和结束的\n
{"prompt":"xxxx ->","completion":" xxxx\n"}
训练
然后就是上传文件开始训练了。
openai api fine_tunes.create -t /data/data_prepared.jsonl -m davinci --suffix "test001"
要等很久。主要是排队,期间可以用openai api fine_tunes.list
查看状态:
{
"data": [
{
"created_at": 1675758078,
"fine_tuned_model": null,
"hyperparams": {
"batch_size": null,
"learning_rate_multiplier": null,
"n_epochs": 4,
"prompt_loss_weight": 0.01
},
"id": "ft-xxxxxxxxxxxxx",
"model": "davinci",
"object": "fine-tune",
"organization_id": "org-xxxxxxxxxxxxxxxxxx",
"result_files": [],
"status": "pending",
"training_files": [
{
"bytes": 189,
"created_at": 1675758077,
"filename": "/data/data_prepared.jsonl",
"id": "file-xxxxxxxxxxxxxxxxxx",
"object": "file",
"purpose": "fine-tune",
"status": "processed",
"status_details": null
}
],
"updated_at": 1675758078,
"validation_files": []
}
],
"object": "list"
}
一直是pending
,等训练好再写吧。
过了7分钟终于进入队列了,排在13。
如果按他们的提示,每个任务要一个半小时,那就得近20小时。。。。
实际也就等了半小时不到。但结果不尽人意。数据量太少了。
样本属性
这里设计一下样本应该包含哪些
这里只需要保存变量即可
- 时间,文本模型无法知道当前的时间
- 内容,直播的内容
- 对话列表,为了有一定的上下文联系,列表不一定是要一一对应。
- 观众名称
- 弹幕内容
- 回答内容
样本采集
真是有多少人工就有多少智能。按Openai的说法,这种聊天类需要的样本量至少数千,这还只是最低。模型的质量与样本量成指数关系,想想都头大。
程序的问题还得程序来解决。
初步想法是录制别人的直播视频,加语音识别,同时录制弹幕,然后程序化生成样本。
总结
仅就调用Openai的接口来说,并不复杂,难度还是在于样本的获取,就等样本采集完毕后再来试一试模型的训练吧。
OpenAI微调模型测试
https://www.kuanmi.top/2023/02/06/OpenAI/