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/
作者
KuanMi
发布于
2023年2月7日
许可协议