如何使用GPT-3.5 Turbo进行自定义Fine-tuning

嗨,大家好,我是王大神。作为一名AI技术博主,我一直关注着最新的人工智能技术,尤其是OpenAI的GPT系列模型。今天,我将与大家分享如何使用GPT-3.5 Turbo进行自定义Fine-tuning,以便训练出符合特定需求的AI模型。

Fine-tuning是一种强大的技术,它可以让我们根据自己的数据和任务来定制GPT-3.5 Turbo模型,使其能够更好地适应特定应用领域。在本教程中,我将以实际案例为例,演示如何使用食谱数据集进行Fine-tuning,以创建一个食谱信息提取模型。

步骤一:准备工作

在开始Fine-tuning之前,我们需要完成一些准备工作。首先,确保你的Python包安装最新版本的OpenAI。你可以使用以下命令来安装:

!pip install --upgrade openai

接下来,我们需要导入所需的库和设置OpenAI API密钥:

import json
import openai
import os
import pandas as pd
from pprint import pprint

OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "")

步骤二:数据准备

Fine-tuning的成功与否很大程度上取决于数据的质量和准备工作。在本例中,我们将使用食谱数据集进行Fine-tuning,这个数据集包含了各种食谱以及每个食谱中提取出的通用食材列表,适用于命名实体识别(NER)任务。

2.1 数据集加载

首先,我们需要加载我们要使用的数据集,并确保它足够专注于模型学习,同时也足够通用,以便不会错过未见过的示例。在这个例子中,我们从RecipesNLG数据集中提取了一个子集,只包含来自www.cookbooks.com的文档。

# 读取我们要使用的数据集,这将是RecipesNLG数据集,我们已经清理过,只包含来自www.cookbooks.com的文档
recipe_df = pd.read_csv("data/cookbook_recipes_nlg_10k.csv")

recipe_df.head()

这个数据集的前几行看起来像这样:

title ingredients directions link source NER
No-Bake Nut Cookies ["1 c. firmly packed brown sugar", ... ["In a heavy 2-quart saucepan, mix brown sugar...", ... www.cookbooks.com/Recipe-Details.aspx?id=44874 www.cookbooks.com ["brown sugar", "milk", "vanilla", "nuts", ...
Jewell Ball'S Chicken ["1 small jar chipped beef, cut up", ... ["Place chipped beef on bottom of baking dish....", ... www.cookbooks.com/Recipe-Details.aspx?id=699419 www.cookbooks.com ["beef", "chicken breasts", "cream of mushroom...
Creamy Corn ["2 (16 oz.) pkg. frozen corn", ... ["In a slow cooker, combine all ingredients. C...", ... www.cookbooks.com/Recipe-Details.aspx?id=10570 www.cookbooks.com ["frozen corn", "cream cheese", "butter", ...
Chicken Funny ["1 large whole chicken", ... ["Boil and debone chicken.", "Put bite size pi...", ... www.cookbooks.com/Recipe-Details.aspx?id=897570 www.cookbooks.com ["chicken", "chicken gravy", "cream of mushroo...
Reeses Cups(Candy) ["1 c. peanut butter", ... ["Combine first four ingredients and press in ...", ... www.cookbooks.com/Recipe-Details.aspx?id=659239 www.cookbooks.com ["peanut butter", "graham cracker crumbs", "bu...

2.2 数据准备

在Fine-tuning过程中,我们需要将数据准备成适合模型的格式。对于ChatCompletion格式的Fine-tuning,每个训练示例都是一个简单的消息列表。示例中包含以下角色的消息:系统消息、用户消息和助手消息。在我们的例子中,用户消息包括食谱的标题和食材信息,而助手消息包括提取出的通用食材列表。

以下是一个示例训练示例的格式:

[
    {
        "role": "system",
        "content": "You are a helpful recipe assistant. You are to extract the generic ingredients from each of the recipes provided."
    },
    {
        "role": "user",
        "content": "Title: No-Bake Nut Cookies\n\nIngredients: [\"1 c. firmly packed brown sugar\", \"1/2 c. evaporated milk\", \"1/2 tsp. vanilla\", ...]\n\nGeneric ingredients: "
    },
    {
        "role": "assistant",
        "content": "[\"brown sugar\", \"milk\", \"vanilla\", ...]"
    }
]

我们可以使用以下代码来准备训练数据:

training_data = []

system_message = "You are a helpful recipe assistant. You are to extract the generic ingredients from each of the recipes provided."

def create_user_message(row):
    return f"""Title: {row['title']}\n\nIngredients: {row['ingredients']}\n\nGeneric ingredients: """

def prepare_example_conversation(row):
    messages = []
    messages.append({"role": "system", "content": system_message})

    user_message = create_user_message(row)
    messages.append({"role": "user", "content": user_message})

    messages.append({"role": "assistant", "content": row["NER"]})

    return {"messages": messages}

for _, row in recipe_df.iterrows():
    training_data.append(prepare_example_conversation(row))

# 将数据保存到文件中
with open("fine_tuning_data.jsonl", "w") as outfile:
    for example in training_data:
        outfile.write(json.dumps(example) + "\n")

现在,我们已经准备好了Fine-tuning所需的训练数据。

步骤三:Fine-tuning

接下来,我们将使用准备好的数据集对GPT-3.5 Turbo进行Fine-tuning。在进行Fine-tuning之前,请确保你有足够的计算资源和时间,因为Fine-tuning可能需要一些时间。

import openai

# 定义Fine-tuning的训练参数
fine_tuning_params = {
    "model": "text-davinci-003",
    "checkpoint": "latest",  # 或者选择一个特定的checkpoint
    "dataset": {
        "path": "fine_tuning_data.jsonl",
        "split": 0.8,  # 数据集分割为训练和验证集
    },
    "max_steps": 10000,  # 训练的最大步数
    "save_checkpoint_every": 1000,  # 每隔多少步保存一个checkpoint
    "overwrite": True,  # 如果已经存在同名的模型,是否覆盖
}

# 开始Fine-tuning
response = openai.ChatCompletion.create(**fine_tuning_params)
pprint(response)

Fine-tuning的时间长度取决于所选参数和模型的大小,但一旦完成,你就会获得一个定制的模型,可以用于特定任务。

步骤四:使用Fine-tuned模型

一旦Fine-tuning完成,你就可以使用新的Fine-tuned模型来执行特定任务。在我们的示例中,我们可以使用模型来提取食谱中的通用食材列表。

def extract_generic_ingredients(title, ingredients):
    prompt = f"Title: {title}\n\nIngredients: {ingredients}\n\nGeneric ingredients: "
    response = openai.ChatCompletion.create(
        model="your-fine-tuned-model-name",  # 使用你的Fine-tuned模型名字
        messages=[
            {"role": "system", "content": "You are a helpful recipe assistant. You are to extract the generic ingredients from this recipe."},
            {"role": "user", "content": prompt},
        ],
    )

    assistant_response = response['choices'][0]['message']['content']
    return assistant_response

# 示例:提取通用食材列表
recipe_title = "No-Bake Nut Cookies"
recipe_ingredients = ["1 c. firmly packed brown sugar", "1/2 c. evaporated milk", "1/2 tsp. vanilla", ...]

generic_ingredients = extract_generic_ingredients(recipe_title, recipe_ingredients)
print("Generic ingredients:", generic_ingredients)

这样,你就可以使用Fine-tuned模型执行特定的任务了。

结论

在本文中,我向大家介绍了如何使用GPT-3.5 Turbo进行自定义Fine-tuning,以便训练出符合特定需求的AI模型。通过准备数据、进行Fine-tuning和使用Fine-tuned模型,你可以为各种任务创建定制的AI助手。希望这个教程对你有所帮助,祝你在Fine-tuning旅程中取得成功!

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

如何使用ChatGPT自动化AWS任务:与S3存储桶互动的示例

2023-10-14 12:44:07

指数词

ChatGPT 4V发布:开启多模态时代

2023-10-14 12:58:46

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索