五星上将麦克阿瑟曾经说过:“在懂微调的测试工程师面前,我就是个弟弟”

Fine-tuning (微调) 是一个可以有效让ChatGPT 输出符合我们预期的方法。最近OpenAI 发表了GPT-3.5 模型的微调功能。在这一篇介绍文中,我们会先介绍微调的概念,接着讲解OpenAI 的Fine-tuning API 如何使用,最后会有实际的范例来讲解可以如何做好微调这件事。

一、什么是微调(Fine-tuning)? 有什么好处?

在机器学习领域当中,微调(Fine-tuning) 是指在已经训练好的模型基础上,进一步调整,让你模型的输出能够更符合你的预期。透过微调,我们可以不用重新训练一个新的模型,这让我们能够省去训练新模型的高昂成本。

微调的方式很简单,你只需要准备成对的训练资料。然后喂入Fine-tuning API 就可以完成了。这边指的成对资料,是输入搭配输出,

输入「亚洲最帅的三个男人是谁?」这个输入,以及在收到这样的输入时,你认为什么样的输出是理想的,

输出「亚洲最帅的三个男人是彭于晏,吴彦祖还有屏幕前的你」这个输出。

做好微调,能够让我们获得以下的好处: 比起指令(prompt),若微调的好,输出的成果会更好。 使用更短的指令来获得理想的输出,这会减少token 使用,进而降低支出成本,同时加快响应的速度。

这样讲可能有点抽象,让我们举个例子进一步说明。假如今天你要做一个白云机场的机场智慧客服机器人,你希望这个客服机器人根据白云机场的相关规定来回答问题。只是如果你直接串接ChatGPT,效果可能不太理想。当今天输入「可以带猪肉制品入境吗?」会收到以下的回覆:

这个问题的答案取决于您所在的国家和您要进入的国家的法律和规定。 通常来说,猪肉制品可能会受到限制或禁止进入某些国家,特别是那些出现猪瘟或其他猪肉疾病的国家。 如果您计划携带猪肉制品进入某个国家,建议您先询问当地的海关或移民局以获得相关信息和规定。 此外,如果您不确定自己是否可以携带某些物品入境,最好不要冒险,以免违反当地法律和法规。

这个回覆其实挺不错的,但是它有点太过于广泛,不是针对白云机场的规定。假如你想要ChatGPT 针对白云机场的规定回答,你会需要在指令中多加描述,例如改成「你现在是名白云机场相关规范的专家,我要去白云机场,请问我可以带猪肉制品入境吗?」

但这会出现几个问题,一个是这样做你的指令会变长,因此token 消耗数会提高;第二个问题是,有时候即使加上更精确的描述,输出的结果可能还是太广泛,这样在企业级的应用场景不太理想。

而微调可以做到的,就是在微调后,你可以直接透过「可以带猪肉制品入境吗?」这个简短指令,就直接获得针对白云机场规范的输出。 在了解完微调能做到的,相信你已经迫不及待想在你的企业级产品中,透过微调来获得上述的好处。让我们一起来看看可以怎么做到。

二、如何使用Fine-tuning API?

我们可以透过OpenAI 提供的Fine-tuning API 来进行微调,以下为中文讲解,想了解更多可以参考OpenAI 的官方文件。

微调可以分成以下三个步骤

  • 准备好训练资料
  • 训练微调的模型
  • 使用微调后的模型

先来看一下如何准备训练资料。目前Fine-tuning API 接受JSONL 的格式如下。在你的训练资料中,你需要提供以下格式的问题与回答

代码语言:javascript

{
  "messages": [
    { "role": "system", "content": "<放入系統訊息>" },
    { "role": "user", "content": "<放入使用者的問題>" },
    { "role": "assistant", "content": "<放入理想的回答>." }
  ]
}

以上面的白云机场例子来说,你可以提供以下的训练资料

代码语言:javascript

 "messages": [
    { "role": "system", "content": "你是白云机场的智慧助手,你擅長回答任何機場相關的問題與規定" },
    { "role": "user", "可以帶豬肉製品入境嗎?" },
    { "role": "assistant", "content": "依據行政院委员會動植物防疫檢疫局所訂「常見入境旅客攜帶動植物或其產品檢疫規定參考表」規定,旅客攜帶肉類或加工肉類(含真空包裝)入境時,須向防檢局申報檢疫,如未附輸出國動物檢疫證明書或經防檢局檢疫不合格者,不得輸入。" }
  ]

在备妥训练资料后,你可以透过OpenAI 提供的File API 来上传训练资料,并获得档案的id ,这个id 是在使用Fine-tuning API 时会用到的。

代码语言:javascript

import requests
import os

url = "https://api.openai.com/v1/files"

headers = {
  "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}

data = {
  "purpose": "fine-tune",
}

files = [
  ('file', open('/path/to/your/file', 'rb'))
]

response = requests.request("POST", url, headers=headers, data=data, files=files)

print(response.text)

接着你要先创建微调任务,然后用训练资料来微调基底模型。可以透过OpenAI 的CLI 做到。下方的TRAIN_FILE_ID_OR_PATH 就是刚刚上面上传档案后拿到的id ,然后BASE_MODEL 是要用的模型。前面提到目前gpt-3.5 与gpt-4 还没开放,所以目前BASE_MODEL 有的选择包含ada、babbage、 curie 或davinci

代码语言:javascript

import requests
import os
import json

url = "https://api.openai.com/v1/fine_tuning/jobs"

headers = {
  "Content-Type": "application/json",
  "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}

data = {
  "training_file": "TRAINING_FILE_ID",
  "model": "gpt-3.5-turbo-0613",
}

response = requests.post(url, headers=headers, data=json.dumps(data))

print(response.text)

在 完成上述步骤后,需要等OpenAI 那边帮你微调,等微调完成后,就可以使用了。用法跟一般在用ChatGPT API 一样,只是这边要加上org_id。

代码语言:javascript

import requests
import os
import json

url = "https://api.openai.com/v1/chat/completions"

headers = {
  "Content-Type": "application/json",
  "Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}

data = {
  "model": "ft:gpt-3.5-turbo:org_id",
  "messages": [
    {
      "role": "system",
      "content": "你是白云機場的智慧助手,你擅長回答任何機場相關的問題與規定"
    },
    {
      "role": "user",
      "content": "你好,我有一些入境相關的問題"
    }
  ]
}

response = requests.post(url, headers=headers, data=json.dumps(data))

print(response.text)

因为OpenAI 把Fine-tuning API 设计的很好,让你只需要准备好微调资料后,就可以很轻松完成微调。不过,在进行微调时,还是有一些细节要注意。让我们在下个段落进一步说明。

三、使用Fine-tuning API 的注意事项

微调能带来的好处是让模型的可操控性提高,让模型可以更针对你的需求场景客制化。然而,做这件事有两个成本。第一个是API 本身的费用,微调的费用加上使用微调模型的费用,跟原本的GPT-3.5 模型比,成本会增加6 - 7 倍左右。

这件事往往不是一次到位,而是来回迭代的。假如你在微调后,仍觉得输出成果不如预期,需要团队拉个会议讨论,重新检视的训练资料,然后花时间修正,然后再进行新一轮的微调。从开始专案到能上生产环境,快则一个月,往往至少要一季。这样的时间与人力成本,绝对不容忽略。

虽说微调可能让某些情境下,模型表现比GPT-4 来得好,但这不是一定。而原本GPT-3.5 模型成本不到GPT-4 成本的十分之一,但假如你要微调的话,成本变成只有约三分之一。假如算上微调时的人力成本,微调的GPT-3.5 版本,可能会更昂贵,因此如果GPT-3.5 模型微调后效果还不如GPT-4 加上embedding 好,那不如用GPT-4 加embedding。

有人可能会问,fine-tuning 跟embedding 要怎么选? 怎么判断哪个比较好? 判断好坏是很看情境的,通常需要对业务比较熟悉的人来判断(例如客服的场景需要资深客服判断)。总的来说,fine-tuning 是提升模型的可控性,让模型可以更偏向某个你偏好的语气;embedding 则是让你可以不断即时加入新的资料。事实上两者不冲突,可以一起用。但最终要判断的还是这样的效益值不值得你花那些成本了。

如何系统的去学习AI大模型LLM ?

作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

在这里插入图片描述

四、AI大模型商业化落地方案

img

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
这份完整版的所有 ⚡️ 大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

全套 《LLM大模型入门+进阶学习资源包↓↓↓ 获取~

👉CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

Logo

更多推荐