如何使用Chat模型进行微调:一个食谱命名实体识别教程

在数字时代,人工智能技术正不断演进,为我们的生活和工作带来了革命性的变化。开放AI(OpenAI)的GPT-3.5-turbo模型是一项重要的技术,它可以用于各种自然语言处理任务,包括聊天和命名实体识别(NER)。本教程将向您展示如何使用GPT-3.5-turbo进行微调,以执行食谱命名实体识别任务。

1. 引子:解锁人工智能的潜力

在当今的数字世界中,人工智能技术正日益成熟和普及。无论是自动化客户支持,还是从大规模数据中提取有用信息,AI都发挥着关键作用。而GPT-3.5-turbo模型是一种强大的AI工具,可以用于许多自然语言处理任务,使您能够创建智能聊天机器人,或者像本教程一样执行命名实体识别任务。

2. 准备工作:设置环境

在开始微调之前,确保您已经安装了最新版本的OpenAI Python包,并已获取了OpenAI API密钥。这个密钥将用于与GPT-3.5-turbo模型进行通信。

# 安装最新版本的OpenAI Python包
!pip install --upgrade openai

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

# 添加您的OpenAI API密钥
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "")

3. 数据准备:准备数据进行微调

在进行微调之前,您需要准备训练数据。在本教程中,我们将使用食谱数据集,并从中提取通用的食材名称作为命名实体。以下是数据准备的步骤:

3.1 数据集加载和筛选

为了进行微调,我们需要一个特定领域的数据集。数据集应该足够专注,以便模型可以学习,但也要足够通用,以便不会错过未见过的示例。在本教程中,我们从RecipesNLG数据集中提取了一个子集,该子集只包含来自www.cookbooks.com的文档。

# 读取我们将在此任务中使用的数据集
recipe_df = pd.read_csv("data/cookbook_recipes_nlg_10k.csv")

# 显示数据集的前几行
recipe_df.head()

3.2 数据格式转换

在微调时,我们需要将数据转换为适用于ChatCompletion格式的训练示例。每个训练示例都是一个包含多个消息的对话列表。以下是数据转换的示例代码:

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}

# 对数据集的每一行应用数据转换函数
training_data = recipe_df.apply(prepare_example_conversation, axis=1).tolist()

3.3 上传文件

将转换后的数据保存为.jsonl文件,然后上传到OpenAI的Files端点,以供微调使用。

def write_jsonl(data_list: list, filename: str) -> None:
    with open(filename, "w") as out:
        for ddict in data_list:
            jout = json.dumps(ddict) + "\n"
            out.write(jout)

# 保存训练数据和验证数据为.jsonl文件
training_file_name = "tmp_recipe_finetune_training.jsonl"
write_jsonl(training_data, training_file_name)

validation_file_name = "tmp_recipe_finetune_validation.jsonl"
write_jsonl(validation_data, validation_file_name)

# 使用OpenAI的Files端点上传文件
training_response = openai.File.create(
    file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response["id"]

validation_response = openai.File.create(
    file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response["id"]

4. 微调模型

现在,我们可以使用准备好的文件创建微调任务。在创建任务时,我们需要指定训练文件、验证文件、模型名称和可选的后缀来标识模型。以下是微调模型的示例代码:

response = openai.FineTuningJob.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-3.5-turbo",
    suffix="recipe-ner",
)

job_id = response["id"]

您可以使用以下代码检查微调任务的状态:

response = openai.FineTuningJob.retrieve(job_id)

print("Job ID:", response["id"])
print("Status:", response["status"])

5. 跟踪微调进度

微调任务可能需要一些时间来完成。您可以使用以下代码跟踪微调进度:

response = openai.FineTuningJob.list_events(id=job_id, limit=50)

events = response["data"]
events.reverse()

for event in events:
    print(event["message"])

6. 微调成功!

一旦微调任务完成,您将获得一个微调模型的ID。以下是

如何获取微调模型的示例代码:

response = openai.FineTuningJob.retrieve(job_id)
fine_tuned_model_id = response["fine_tuned_model"]

print("Fine-tuned model ID:", fine_tuned_model_id)

7. 使用微调模型进行推理

最后,您可以使用微调的模型来执行推理。只需调用ChatCompletions并指定微调模型的名称和消息列表。以下是如何使用微调模型进行推理的示例代码:

test_df = recipe_df.loc[201:300]
test_row = test_df.iloc[0]
test_messages = []
test_messages.append({"role": "system", "content": system_message})
user_message = create_user_message(test_row)
test_messages.append({"role": "user", "content": create_user_message(test_row)})

response = openai.ChatCompletion.create(
    model=fine_tuned_model_id, messages=test_messages, temperature=0, max_tokens=500
)
print(response["choices"][0]["message"]["content"])

8. 结论

通过本教程,您已经学会了如何使用GPT-3.5-turbo模型进行微调,以执行食谱命名实体识别任务。这个过程涵盖了数据准备、模型微调和推理的所有关键步骤。希望这个教程对您在自然语言处理领域的工作和项目中有所帮助。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:如何使用Chat模型进行微调:一个食谱命名实体识别教程

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年9月13日
下一篇 2023年9月14日

相关推荐

  • OpenAI首席科学家Ilya Sutskever:AI的未来与风险

    Ilya Sutskever,OpenAI的首席科学家,是人工智能领域的一位杰出人物。他的X账号一直是科技界里的一股神秘力量,极少分享个人生活,但却频繁发表引人深思的思考和观点。在一个媒体炒作的行业中,他是那个少数不热衷…

    2023年11月1日
    00
  • GPT Store上线延期:内部动荡影响OpenAI的关键产品

    在OpenAI近期的内部动荡之后,GPT Store上线日期被宣布推迟至2024年年初。这一突如其来的延期背后,是一系列让公司陷入忙碌状态的意料之外的事件。本文将深入探讨这一问题,以及GPTs产品的发展、优势与挑战。 背景…

    2023年12月5日
    00
  • 开发者备忘录揭示OpenAI计划推出聊天机器人商店

    近日,OpenAI的备忘录透露了令人激动的消息,该公司计划在下周推出其“聊天机器人商店(Chatbot Store)”。这一举措将为AI模型开发者的客户提供共享和销售定制的聊天机器人的机会,这些聊天机器人基于OpenAI的最新技…

    2024年1月6日
    00
  • ChatGPT 4与GPT 3:您应该知道的主要区别

    人工智能(AI)技术领域近年来取得了显著的进展,而ChatGPT一直处于这一变革的前沿。随着由OpenAI与Microsoft Corp.合作开发的GPT-4的发布,AI领域再次发生了变革。在本文中,我们将深入探讨ChatGPT-3与最新版本GPT…

    2023年9月7日
    00
  • OpenAI首席执行官Sam Altman揭示用户热切期待的ChatGPT未来功能

    数字时代的浪潮中,人工智能技术日益成为改变世界的力量,而OpenAI一直处于这一浪潮的前沿。在2024年,OpenAI的首席执行官Sam Altman揭示了用户对ChatGPT未来功能的热切期待。这一消息引发了广泛关注,因为它涉及到…

    2023年12月26日
    00
  • 如何使用OpenAI的Web UI API进行文本到图像生成

    嗨,大家好!如果你对使用OpenAI的Web UI API进行文本到图像生成感到困惑,不用担心,我将为你提供一份详细的教程。在这个教程中,我将向你介绍如何设置API,构建请求,获取生成的图像以及如何修改一些重要的参数。…

    2023年9月22日
    00
  • 人工智能(AI)常用名词解释

    在当今数字化时代,人工智能(Artificial Intelligence,简称AI)已经成为了我们生活中不可或缺的一部分。无论是智能手机上的语音助手,自动驾驶汽车,还是智能家居设备,AI的应用已经渗透到了各个领域。但是,对于…

    2023年10月20日
    00
  • 如何使用多个OpenAI服务实例:详细指南

    随着技术的不断进步,有时您可能需要使用多个OpenAI服务实例来满足不同的需求。从版本6.9.0开始,OpenAI SDK提供了创建多个实例的功能,使您能够更灵活地管理和利用服务。在本文中,我们将详细介绍如何使用多个Open…

    2023年9月17日
    00
  • 聊天机器人与我——新手如何更好地与ChatGPT交流?

    在一个寒冷的夜晚,我坐在书桌前,面对屏幕,不断地试图和我的新助理——ChatGPT进行交流。每当我认为我掌握了和它聊天的技巧,结果往往让我失望。这就好像我突然进入了鲁迅笔下的小杂货铺,和店主尝试用我不太熟悉的…

    2023年10月5日
    00
  • 未来智能:OpenAI 和谷歌对战多模态 AI

    未来智能:OpenAI 和谷歌对战多模态 AI 当我在午夜巷子里走失的时候,一部神奇的手机帮我找到了回家的路。但这款手机不仅能导航,它还能识别街上的标志、告诉我附近餐厅的菜单、甚至读出随手拍到的书的内容。这是怎…

    2023年9月23日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注