ChatGPT微调分类示例

我们将微调 ada 分类器以区分两种运动:棒球和曲棍球。

from sklearn.datasets import fetch_20newsgroups
import pandas as pd
import openaicategories = ['rec.sport.baseball', 'rec.sport.hockey']
sports_dataset = fetch_20newsgroups(subset='train', shuffle=True, random_state=42, categories=categories)

数据探索

可以使用 sklearn 加载新闻组数据集。 首先,我们将查看数据本身:

print(sports_dataset['data'][0])
From: dougb@comm.mot.com (Doug Bank)
Subject: Re: Info needed for Cleveland tickets
Reply-To: dougb@ecs.comm.mot.com
Organization: Motorola Land Mobile Products Sector
Distribution: usa
Nntp-Posting-Host: 145.1.146.35
Lines: 17In article <1993Apr1.234031.4950@leland.Stanford.EDU>, bohnert@leland.Stanford.EDU (matthew bohnert) writes:|> I'm going to be in Cleveland Thursday, April 15 to Sunday, April 18.
|> Does anybody know if the Tribe will be in town on those dates, and
|> if so, who're they playing and if tickets are available?The tribe will be in town from April 16 to the 19th.
There are ALWAYS tickets available! (Though they are playing Toronto,
and many Toronto fans make the trip to Cleveland as it is easier to
get tickets in Cleveland than in Toronto.  Either way, I seriously
doubt they will sell out until the end of the season.)-- 
Doug Bank                       Private Systems Division
dougb@ecs.comm.mot.com          Motorola Communications Sector
dougb@nwu.edu                   Schaumburg, Illinois
dougb@casbah.acns.nwu.edu       708-576-8207                    
sports_dataset.target_names[sports_dataset['target'][0]]
'rec.sport.baseball'
len_all, len_baseball, len_hockey = len(sports_dataset.data), len([e for e in sports_dataset.target if e == 0]), len([e for e in sports_dataset.target if e == 1])
print(f"Total examples: {len_all}, Baseball examples: {len_baseball}, Hockey examples: {len_hockey}")
Total examples: 1197, Baseball examples: 597, Hockey examples: 600

数据准备

我们将数据集转换为 pandas 数据框,其中有一列用于提示和完成。 提示包含来自邮件列表的电子邮件,完成是运动的名称,曲棍球或棒球。 仅出于演示目的和微调速度,我们仅采用 300 个示例。 在实际用例中,示例越多性能越好。

import pandas as pdlabels = [sports_dataset.target_names[x].split('.')[-1] for x in sports_dataset['target']]
texts = [text.strip() for text in sports_dataset['data']]
df = pd.DataFrame(zip(texts, labels), columns = ['prompt','completion']) #[:300]
df.head()
promptcompletion
0From: dougb@comm.mot.com (Doug Bank)\nSubject:…baseball
1From: gld@cunixb.cc.columbia.edu (Gary L Dare)…hockey
2From: rudy@netcom.com (Rudy Wade)\nSubject: Re…baseball
3From: monack@helium.gas.uug.arizona.edu (david…hockey
4Subject: Let it be Known\nFrom: <ISSBTL@BYUVM…baseball

数据准备工具

我们现在可以使用数据准备工具,它会在微调之前对我们的数据集提出一些改进建议。 在启动该工具之前,我们更新了 openai 库以确保我们使用的是最新的数据准备工具。 我们另外指定 -q 自动接受所有建议。

!pip install --upgrade openai
!openai tools fine_tunes.prepare_data -f sport2.jsonl -q
Analyzing...- Your file contains 1197 prompt-completion pairs
- Based on your data it seems like you're trying to fine-tune a model for classification
- For classification, we recommend you try one of the faster and cheaper models, such as `ada`
- For classification, you can estimate the expected model performance by keeping a held out dataset, which is not used for training
- There are 11 examples that are very long. These are rows: [134, 200, 281, 320, 404, 595, 704, 838, 1113, 1139, 1174]
For conditional generation, and for classification the examples shouldn't be longer than 2048 tokens.
- Your data does not contain a common separator at the end of your prompts. Having a separator string appended to the end of the prompt makes it clearer to the fine-tuned model where the completion should begin. See https://beta.openai.com/docs/guides/fine-tuning/preparing-your-dataset for more detail and examples. If you intend to do open-ended generation, then you should leave the prompts empty
- The completion should start with a whitespace character (` `). This tends to produce better results due to the tokenization we use. See https://beta.openai.com/docs/guides/fine-tuning/preparing-your-dataset for more detailsBased on the analysis we will perform the following actions:
- [Recommended] Remove 11 long examples [Y/n]: Y
- [Recommended] Add a suffix separator `\n\n###\n\n` to all prompts [Y/n]: Y
- [Recommended] Add a whitespace character to the beginning of the completion [Y/n]: Y
- [Recommended] Would you like to split into training and validation set? [Y/n]: YYour data will be written to a new JSONL file. Proceed [Y/n]: YWrote modified files to `sport2_prepared_train.jsonl` and `sport2_prepared_valid.jsonl`
Feel free to take a look!Now use that file when fine-tuning:
> openai api fine_tunes.create -t "sport2_prepared_train.jsonl" -v "sport2_prepared_valid.jsonl" --compute_classification_metrics --classification_positive_class " baseball"After you’ve fine-tuned a model, remember that your prompt has to end with the indicator string `\n\n###\n\n` for the model to start generating completions, rather than continuing with the prompt.
Once your model starts training, it'll approximately take 30.8 minutes to train a `curie` model, and less for `ada` and `babbage`. Queue will approximately take half an hour per job ahead of you.

该工具有助于对数据集提出一些改进建议,并将数据集拆分为训练集和验证集。

提示和完成之间的后缀是必要的,以告诉模型输入文本已停止,现在需要预测类别。 由于我们在每个示例中使用相同的分隔符,因此该模型能够了解它是为了预测分隔符后的棒球或曲棍球。 补全中的空格前缀很有用,因为大多数单词标记都是用空格前缀标记的。 该工具还认识到这可能是一项分类任务,因此它建议将数据集拆分为训练数据集和验证数据集。 这将使我们能够轻松衡量新数据的预期性能。

微调

该工具建议我们运行以下命令来训练数据集。 由于这是一项分类任务,我们想知道我们的分类用例在提供的验证集上的泛化性能如何。 该工具建议添加 --compute_classification_metrics --classification_positive_class " baseball" 以计算分类指标。

我们可以简单地从 CLI 工具中复制建议的命令。 我们特别添加 -m ada 来微调更便宜和更快的 ada 模型,该模型在性能上通常与分类用例中更慢和更昂贵的模型相当。

!openai api fine_tunes.create -t "sport2_prepared_train.jsonl" -v "sport2_prepared_valid.jsonl" --compute_classification_metrics --classification_positive_class " baseball" -m ada
Upload progress: 100%|████████████████████| 1.52M/1.52M [00:00<00:00, 1.81Mit/s]
Uploaded file from sport2_prepared_train.jsonl: file-Dxx2xJqyjcwlhfDHpZdmCXlF
Upload progress: 100%|███████████████████████| 388k/388k [00:00<00:00, 507kit/s]
Uploaded file from sport2_prepared_valid.jsonl: file-Mvb8YAeLnGdneSAFcfiVcgcN
Created fine-tune: ft-2zaA7qi0rxJduWQpdvOvmGn3
Streaming events until fine-tuning is complete...(Ctrl-C will interrupt the stream, but not cancel the fine-tune)
[2021-07-30 13:15:50] Created fine-tune: ft-2zaA7qi0rxJduWQpdvOvmGn3
[2021-07-30 13:15:52] Fine-tune enqueued. Queue number: 0
[2021-07-30 13:15:56] Fine-tune started
[2021-07-30 13:18:55] Completed epoch 1/4
[2021-07-30 13:20:47] Completed epoch 2/4
[2021-07-30 13:22:40] Completed epoch 3/4
[2021-07-30 13:24:31] Completed epoch 4/4
[2021-07-30 13:26:22] Uploaded model: ada:ft-openai-2021-07-30-12-26-20
[2021-07-30 13:26:27] Uploaded result file: file-6Ki9RqLQwkChGsr9CHcr1ncg
[2021-07-30 13:26:28] Fine-tune succeededJob complete! Status: succeeded 🎉
Try out your fine-tuned model:openai api completions.create -m ada:ft-openai-2021-07-30-12-26-20 -p <YOUR_PROMPT>

模型在十分钟左右训练成功。 我们可以看到模型名称是 ada:ft-openai-2021-07-30-12-26-20,我们可以使用它来进行推理。

[高级] 结果和预期的模型性能

我们现在可以下载结果文件以观察在保留的验证集上的预期性能。

!openai api fine_tunes.results -i ft-2zaA7qi0rxJduWQpdvOvmGn3 > result.csv
results = pd.read_csv('result.csv')
results[results['classification/accuracy'].notnull()].tail(1)
stepelapsed_tokenselapsed_examplestraining_losstraining_sequence_accuracytraining_token_accuracyclassification/accuracyclassification/precisionclassification/recallclassification/aurocclassification/auprcclassification/f1.0validation_lossvalidation_sequence_accuracyvalidation_token_accuracy
929930302768837200.0444081.01.00.9915970.9834711.01.01.00.991667NaNNaNNaN

准确率达到99.6%。 在下图中,我们可以看到在训练运行期间验证集的准确性如何提高。

results[results['classification/accuracy'].notnull()]['classification/accuracy'].plot()

在这里插入图片描述

使用模型

我们现在可以调用模型来获得预测。

test = pd.read_json('sport2_prepared_valid.jsonl', lines=True)
test.head()
promptcompletion
0From: gld@cunixb.cc.columbia.edu (Gary L Dare)…hockey
1From: smorris@venus.lerc.nasa.gov (Ron Morris …hockey
2From: golchowy@alchemy.chem.utoronto.ca (Geral…hockey
3From: krattige@hpcc01.corp.hp.com (Kim Krattig…baseball
4From: warped@cs.montana.edu (Doug Dolven)\nSub…baseball

我们需要按照我们在微调期间使用的提示使用相同的分隔符。 在这种情况下,它是 \n\n###\n\n。 由于我们关心的是分类,所以我们希望温度尽可能低,我们只需要一个令牌完成来确定模型的预测。

ft_model = 'ada:ft-openai-2021-07-30-12-26-20'
res = openai.Completion.create(model=ft_model, prompt=test['prompt'][0] + '\n\n###\n\n', max_tokens=1, temperature=0)
res['choices'][0]['text']
' hockey'

要获取对数概率,我们可以在完成请求中指定 logprobs 参数

res = openai.Completion.create(model=ft_model, prompt=test['prompt'][0] + '\n\n###\n\n', max_tokens=1, temperature=0, logprobs=2)
res['choices'][0]['logprobs']['top_logprobs'][0]
<OpenAIObject at 0x7fe114e435c8> JSON: {" baseball": -7.6311407," hockey": -0.0006307676
}

我们可以看到该模型预测曲棍球的可能性比棒球大得多,这是正确的预测。 通过请求 log_probs,我们可以看到每个类别的预测(对数)概率。

概括

有趣的是,我们的微调分类器非常通用。 尽管接受了针对不同邮件列表的电子邮件的训练,它也成功地预测了推文。

sample_hockey_tweet = """Thank you to the 
@Canesand all you amazing Caniacs that have been so supportive! You guys are some of the best fans in the NHL without a doubt! Really excited to start this new chapter in my career with the 
@DetroitRedWings!!"""
res = openai.Completion.create(model=ft_model, prompt=sample_hockey_tweet + '\n\n###\n\n', max_tokens=1, temperature=0, logprobs=2)
res['choices'][0]['text']
' hockey'
sample_baseball_tweet="""BREAKING: The Tampa Bay Rays are finalizing a deal to acquire slugger Nelson Cruz from the Minnesota Twins, sources tell ESPN."""
res = openai.Completion.create(model=ft_model, prompt=sample_baseball_tweet + '\n\n###\n\n', max_tokens=1, temperature=0, logprobs=2)
res['choices'][0]['text']
' baseball'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14508.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

45个 Cha​tGPT 常用插件说明

45个 ChatGPT 常用插件说明 ChatGPT常用的45个插件&#xff0c;以及它们用途说明&#xff1a; 1/ Slack&#xff1a;查询Slack信息 2/ Zapier&#xff1a;与5000应用&#xff0c;如Google Sheets和Docs进行交互。 3/ Expedia&#xff1a;在一个地方激活你的旅行计划 4/ Kla…

【.Net/C#之ChatGPT开发系列】四、ChatGPT多KEY动态轮询,自动删除无效KEY

ChatGPT是一种基于Token数量计费的语言模型&#xff0c;它可以生成高质量的文本。然而&#xff0c;每个新账号只有一个有限的初始配额&#xff0c;用完后就需要付费才能继续使用。为此&#xff0c;我们可能存在使用多KEY的情况&#xff0c;并在每个KEY达到额度上限后&#xff0…

1.3 - 操作系统 - firewalld防火墙iptables防火墙

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「订阅专栏」:此文章已录入专栏《网络安全入门到精通》 Linux防火墙 Frewalld1、常用操作2、开放/关闭服务3、开放/关闭端口4、IP访问端口规则5、安全域Iptables1、常用操作2、四表五链cent…

再见操作系统!ChatGPT和Windows直接在一起了

来源&#xff1a;水木学堂 二十世纪初&#xff0c;微软曾发起过一场“浏览器战争”&#xff0c;用 IE 4.0 成功打赢了浏览器市场份额超过 90% 以上的网景浏览器。当时&#xff0c;微软用的就是“将 IE 放在 Windows 98 ”这样的“禁忌武器”&#xff0c;还因此遭到了日后的反垄…

ChatGPT封杀潮,禁入学校,AI顶会特意改规则,LeCun:要不咱把小模型也禁了?...

2023 点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 计算机视觉研究院专栏 作者&#xff1a;Edison_G 狂欢之后&#xff0c;事情的走向开始进入封杀这一过程。 公众号ID&#xff5c;ComputerVisionGzq 学习群&#xff5c;扫码在主页获取加入方式 转自《机器之心》…

VPS(Linux)解决ChatGPT Access Denied(错误码1020)方法

本文参考了GitHub的一个开源项目&#xff0c;项目地址:https://github.com/fscarmen/warp 操作方法: 以下两个脚本二选一&#xff0c;部署完成后记得重启VPS VPS嵌套WARP后&#xff0c;建议开启BBR&#xff0c;能够有效降低延迟 WARP部署脚本: wget -N https://raw.githubu…

奶奶版ChatGPT炸了!背刺微软泄露Win11秘钥!

教坏一个大模型的成本实在太低了&#xff01; 大家都知道&#xff0c;ChatGPT本身可以制造“幻觉”&#xff0c;却也原来如此容易被“情感”所利用&#xff01;只要故事讲的好&#xff0c;让ChatGPT为你摘星星都没问题&#xff01;万万没想到&#xff0c;通过让ChatGPT扮演一个…

第一批因ChatGPT坐牢的人,已经上路了

大家好&#xff0c;我是 Jack。 ChatGPT 的火爆有目共睹&#xff0c;有人靠着它赚了第一桶金&#xff0c;也有人靠着它即将吃上第一顿牢饭。 任何一件东西的火爆&#xff0c;总会给一些聪明人带来机会。 艾尔登法环火的时候&#xff0c;一堆淘宝卖魂的&#xff1b;羊了个羊火…

机器学习--最小二乘法

补充&#xff1a; 一. 简介 最小二乘法&#xff08;又称最小平方法&#xff09;是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据&#xff0c;并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法…

java最后问面试官什么问题,大量教程

魔鬼面试官必问:ConcurrentHashMap 线程安全吗?但面对魔鬼面试官时,我们更在乎的是这些真的正确吗? 1 线程重用导致用户信息错乱生产环境中,有时获取到的用户信息是别人的。查看代码后 为方便观察问题,我们输出了这个Map一开始和最后的元素个数。 师兄大厂面试遇到面试官的Ka…

计算机网络参考模型及协议

目录 一、计算机网络概述 1.1计算机网络与通信 1.2计算机IP地址与Mac地址 1.3计算机网络相关术语 1.4计算机网络相关设备 1.5计算机网络分类 二、计算机网络分层 2.1计算机网络分层的必要性 三、OSI七层参考模型 3.1应用层 3.2表示层 3.3会话层 3.4传输层 3.5网络…

纪念成为博客专家

一、前言 是的&#xff0c;一直到现在都有点蒙蒙的。从上周六提交申请之后&#xff0c;一直没有消息&#xff0c;博主自己都放弃了。这是第四次申请&#xff0c;虽然申请了很多次&#xff0c;但内心一直有些打退堂鼓&#xff0c;觉得自己的技术水平并不到位&#xff0c;其他的专…

你们都去养猪,我还写前端,然后自费送签名书

文/北妈 阅读本文需要 2.1分钟 这是北妈第 221篇 原创文章 一 我们的口号是&#xff1f; 忘了&#xff1f;周五不加班&#xff0c;周五不加班&#xff0c;不加班&#xff01; 今天北妈我就说两点&#xff0c;说完去吃饭。 1、最近朋友圈、大V们&#xff0c;人人都在养猪&#x…

惊呆了!Java程序员最常犯的错竟然是这10个

和绝大多数的程序员一样&#xff0c;我也非常的宅。周末最奢侈的享受就是逛一逛技术型网站&#xff0c;比如说 programcreek&#xff0c;这个小网站上有一些非常有意思的主题。比如说&#xff1a;Java 程序员最常犯的错竟然是这 10 个&#xff0c;像这类令人好奇心想害死猫的主…

spring boot从0到实战 全

前言&#xff1a;看到这篇博客的小可爱们&#xff0c;这篇博客是我自己从0到实战的笔记&#xff0c;后面我会附上我整个过程的源码给大家参考&#xff0c;一起加油把。 同时&#xff0c;这是上一篇博客&#xff0c;SpringBoot详解&#xff0c;完整版。从0到1&#xff01;&#…

FFT蝶形算法的verilog实现专题——从FFT算法的定义开始入手

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 FFT蝶形算法的verilog实现专题——从FFT算法的定义开始入手 先从FFT的定义入手&#xff1a; 一个N 点序列x(n) 的DFT 定义为: 下面用MATLAB程序来面熟一下上述这个式子&…

SAP 电商云 Spartacus UI 修改 Delivery Mode 触发的三个 HTTP 请求

LoaderState&#xff1a; loading 状态在 true 和 false 之间的切换&#xff0c;通过 loader .reducer.ts 里的 reducer 函数进行。每次通过 store.dispatch 往 store 里投递新的 action 时&#xff0c;都会触发该 reducer 的执行。 添加上打印日志&#xff1a; 设置 delive…

再送签名书20本、红包封面10000个

大家好&#xff0c;我是北妈 福利又来了&#xff0c;由于北妈红包封面抢手&#xff0c;又增加了 10000个&#xff0c;没领到的赶紧转发&#xff0c;让亲朋好友来领取。 然后下面送签名书喽。 1、送书 又到了送北妈签名书的时候&#xff0c;凑着要放假&#xff0c;赶紧上车关门&…

vue3.0 非常面熟的错误

1&#xff0c;标签错误 ​​​​ 错误文件所在的目录 \src\views\HomeView.vue:2:3 没有结束标签~ 2.编译问题 Compiled with problems: 编译问题 C:\myel\src\views\HomeView.vue 错误出现文件 3:1 error Mixed spaces and tabs no-mixed-spaces-and-tabs 4:1 error M…

Chat GPT5的主要介绍

Chat GPT-5是一种基于人工智能技术的对话系统&#xff0c;用于进行自然语言处理和对话&#xff0c;以提供更好的服务。 它是由OpenAI公司开发的&#xff0c;是GPT系列的最新版本。 GPT代表着"生成式预训练"&#xff0c;因此Chat GPT-5基于神经网络&#xff0c;通过预…