chatgpt微调 chatgpt api中文文档,chatgpt怎么下载,chatgpt官网,chatgpt国内能用吗
PHP
0
微调
介绍
- 比提示设计更高质量的结果
- 能够训练比提示所能容纳的更多示例
- 由于提示时间较短,可以节省代币
- 更低的延迟请求
- 准备和上传训练数据
- 训练新的微调模型
- 使用微调模型
哪些模型可以微调?
davinci
curie
babbage
ada
text-davinci-003
安装
pip install --upgrade openai
OPENAI_API_KEY
export OPENAI_API_KEY=""
准备训练数据
1
2
3
4
{"prompt": "" , "completion": "" } {"prompt": "" , "completion": "" } {"prompt": "" , "completion": "" } ...
CLI 数据准备工具
openai tools fine_tunes.prepare_data -f
创建微调模型
openai api fine_tunes.create -t -m
BASE_MODEL
运行上述命令会执行以下几项操作:
- 使用文件 API 上传文件(或使用已上传的文件)
- 创建微调作业
- 流式传输事件,直到作业完成(这通常需要几分钟,但如果队列中有许多作业或数据集很大,则可能需要数小时)
ada
babbage
curie
davinci
开始微调作业后,可能需要一些时间才能完成。你的作业可能排在我们系统上的其他作业后面,训练我们的模型可能需要几分钟或几小时,具体取决于模型和数据集大小。如果事件流因任何原因中断,您可以通过运行以下命令来恢复它:
openai api fine_tunes.follow -i
1
2
3
4
5
6
7
8
9
10
# List all created fine-tunes openai api fine_tunes.list # Retrieve the state of a fine-tune. The resulting object includes # job status (which can be one of pending, running, succeeded, or failed) # and other information openai api fine_tunes.get -i # Cancel a job openai api fine_tunes.cancel -i
使用微调模型
fine_tuned_model
作业首次完成后,模型可能需要几分钟才能准备好处理请求。如果对模型的完成请求超时,则可能是因为模型仍在加载中。如果发生这种情况,请在几分钟后重试。
您可以通过将模型名称作为完成请求的参数传递来开始发出请求:model
OpenAI CLI:
openai api completions.create -m -p
1
2
3
4
curl https://api.openai.com/v1/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{"prompt": YOUR_PROMPT, "model": FINE_TUNED_MODEL}'
1
2
3
4
import openai openai.Completion.create( model=FINE_TUNED_MODEL, prompt=YOUR_PROMPT)
1
2
3
4
const response = await openai.createCompletion({ model: FINE_TUNED_MODEL prompt: YOUR_PROMPT, });
temperature
frequency_penalty
presence_penalty
删除微调的模型
openai api models.delete -i
curl -X "DELETE" https://api.openai.com/v1/models/ \
-H "Authorization: Bearer $OPENAI_API_KEY"
import openai
openai.Model.delete(FINE_TUNED_MODEL)
准备数据集
数据格式
- 每个提示都应以固定的分隔符结尾,以便在提示结束和完成开始时通知模型。通常运行良好的简单分隔符是 。分隔符不应出现在任何提示中的其他位置。
\n\n###\n\n
- 由于我们的标记化,每个完成都应该以空格开头,这会用前面的空格标记大多数单词。
- 每次完成都应以固定的停止序列结束,以便在完成结束时通知模型。停止序列可以是 、 或任何其他未出现在任何完成中的标记。
\n
###
- 对于推理,应采用与创建训练数据集时相同的方式设置提示的格式,包括相同的分隔符。还要指定相同的停止序列以正确截断完成。
一般最佳做法
具体准则
分类
- 在提示符末尾使用分隔符,例如 .请记住,当您最终向模型发出请求时,还要附加此分隔符。
\n\n###\n\n
- 选择映射到单个令牌的类。在推理时,请指定,因为您只需要第一个标记进行分类。
max_tokens=1
- 确保提示 + 完成不超过 2048 个标记,包括分隔符
- 目标是每节课至少~100个示例
- 要获取类日志概率,您可以在使用模型时指定(对于 5 个类)
logprobs=5
- 确保用于微调的数据集在结构和任务类型上与模型将用于的任务非常相似
案例研究:模型是否做出了不真实的陈述?
{"prompt":"Company: BHFF insurance\nProduct: allround insurance\nAd:One stop shop for all your insurance needs!\nSupported:", "completion":" yes"}
{"prompt":"Company: Loft conversion specialists\nProduct: -\nAd:Straight teeth in weeks!\nSupported:", "completion":" no"}
\nSupported:
对于此用例,我们对 ada 模型进行了微调,因为它更快、更便宜,并且性能将与更大的模型相当,因为它是一项分类任务。
现在,我们可以通过发出完成请求来查询模型。
1
2
3
4
5
6
7
8
curl https://api.openai.com/v1/completions \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -d '{ "prompt": "Company: Reliable accountants Ltd\nProduct: Personal Tax help\nAd:Best advice in town!\nSupported:", "max_tokens": 1, "model": "YOUR_FINE_TUNED_MODEL_NAME" }'
yes
no
案例研究:情绪分析
{"prompt":"Overjoyed with the new iPhone! ->", "completion":" positive"}
{"prompt":"@lakers disappoint for a third straight night https://t.co/38EFe43 ->", "completion":" negative"}
logprobs=2
现在,我们可以通过发出完成请求来查询模型。
1
2
3
4
5
6
7
8
curl https://api.openai.com/v1/completions \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -d '{ "prompt": "https://t.co/f93xEd2 Excited to share my latest blog post! ->", "max_tokens": 1, "model": "YOUR_FINE_TUNED_MODEL_NAME" }'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{ "id": "cmpl-COMPLETION_ID", "object": "text_completion", "created": 1589498378, "model": "YOUR_FINE_TUNED_MODEL_NAME", "choices": [ { "logprobs": { "text_offset": [ 19 ], "token_logprobs": [ -0.03597255 ], "tokens": [ " positive" ], "top_logprobs": [ { " negative": -4.9785037, " positive": -0.03597255 } ] }, "text": " positive", "index": 0, "finish_reason": "length" } ] }
案例研究:电子邮件会审的分类
{"prompt":"Subject: <email_subject>\nFrom:<customer_name>\nDate:<date>\nContent:<email_body>\n\n###\n\n", "completion":" <numerical_category>"}
{"prompt":"Subject: Update my address\nFrom:Joe Doe\nTo:support@ourcompany.com\nDate:2021-06-03\nContent:Hi,\nI would like to update my billing address to match my delivery address.\n\nPlease let me know once done.\n\nThanks,\nJoe\n\n###\n\n", "completion":" 4"}
\n\n###\n\n
###
条件生成
- 在提示符末尾使用分隔符,例如 .请记住,当您最终向模型发出请求时,还要附加此分隔符。
\n\n###\n\n
- 在完成结束时使用结束标记,例如
END
- 请记住在推理过程中添加结束标记作为停止序列,例如
stop=[" END"]
- 目标至少 ~500 个示例
- 确保提示 + 完成不超过 2048 个标记,包括分隔符
- 确保示例具有高质量并遵循相同的所需格式
- 确保用于微调的数据集在结构和任务类型上与模型将用于的任务非常相似
- 使用较低的学习率和只有 1-2 个 epoch 往往更适合这些用例
案例研究:根据维基百科文章撰写引人入胜的广告
{"prompt":"\n\n\n###\n\n" , "completion":" END" }
{"prompt":"Samsung Galaxy Feel\nThe Samsung Galaxy Feel is an Android smartphone developed by Samsung Electronics exclusively for the Japanese market. The phone was released in June 2017 and was sold by NTT Docomo. It runs on Android 7.0 (Nougat), has a 4.7 inch display, and a 3000 mAh battery.\nSoftware\nSamsung Galaxy Feel runs on Android 7.0 (Nougat), but can be later updated to Android 8.0 (Oreo).\nHardware\nSamsung Galaxy Feel has a 4.7 inch Super AMOLED HD display, 16 MP back facing and 5 MP front facing cameras. It has a 3000 mAh battery, a 1.6 GHz Octa-Core ARM Cortex-A53 CPU, and an ARM Mali-T830 MP1 700 MHz GPU. It comes with 32GB of internal storage, expandable to 256GB via microSD. Aside from its software and hardware specifications, Samsung also introduced a unique a hole in the phone's shell to accommodate the Japanese perceived penchant for personalizing their mobile phones. The Galaxy Feel's battery was also touted as a major selling point since the market favors handsets with longer battery life. The device is also waterproof and supports 1seg digital broadcasts using an antenna that is sold separately.\n\n###\n\n", "completion":"Looking for a smartphone that can do it all? Look no further than Samsung Galaxy Feel! With a slim and sleek design, our latest smartphone features high-quality picture and video capabilities, as well as an award winning battery life. END"}
案例研究:实体提取
{"prompt":"\n\n###\n\n" , "completion":" END"
}
{"prompt":"Portugal will be removed from the UK's green travel list from Tuesday, amid rising coronavirus cases and concern over a \"Nepal mutation of the so-called Indian variant\". It will join the amber list, meaning holidaymakers should not visit and returnees must isolate for 10 days...\n\n###\n\n", "completion":" Portugal\nUK\nNepal mutation\nIndian variant END"}
案例研究:客户支持聊天机器人
{"prompt":"Summary: <summary of the interaction so far>\n\nSpecific information:<for example order details in natural language>\n\n###\n\nCustomer: <message1>\nAgent: <response1>\nCustomer: <message2>\nAgent:", "completion":" <response2>\n"}
{"prompt":"Summary: <summary of the interaction so far>\n\nSpecific information:<for example order details in natural language>\n\n###\n\nCustomer: <message1>\nAgent: <response1>\nCustomer: <message2>\nAgent: <response2>\nCustomer: <message3>\nAgent:", "completion":" <response3>\n"}
\n
案例研究:基于技术属性列表的产品描述
{"prompt":"Item=handbag, Color=army_green, price=$99, size=S->", "completion":" This stylish small green handbag will add a unique touch to your look, without costing you a fortune."}
{"prompt":"Item is a handbag. Colour is army green. Price is midrange. Size is small.->", "completion":" This stylish small green handbag will add a unique touch to your look, without costing you a fortune."}
.
高级用法
自定义模型名称
openai api fine_tunes.create -t test.jsonl -m ada --suffix "custom model name"
ada:ft-your-org:custom-model-name-2022-02-15-04-21-04
分析微调模型
openai api fine_tunes.results -i
curl https://api.openai.com/v1/files/$RESULTS_FILE_ID/content \
-H "Authorization: Bearer $OPENAI_API_KEY" > results.csv
_results.csv
- elapsed_tokens:模型到目前为止看到的代币数量(包括重复)
- elapsed_examples:到目前为止模型看到的示例数(包括重复),其中一个示例是批处理中的一个元素。例如,如果 ,则每步将增加 4。
batch_size = 4
elapsed_examples
- training_loss:训练批次的损失
- training_sequence_accuracy:训练批次中模型的预测令牌与真实完成令牌完全匹配的完成百分比。例如,如果 a 为 3,则您的数据包含完成 [[1, 2]、[0, 5]、[4, 2]] 和模型预测 [[1, 1]、[0, 5]、[4, 2]],则此精度将为 2/3 = 0.67
batch_size
- training_token_accuracy:训练批次中模型正确预测的令牌的百分比。例如,如果 a 为 3,则您的数据包含完成 [[1, 2]、[0, 5]、[4, 2]] 和预测模型 [[1, 1]、[0, 5]、[4, 2]],则此精度将为 5/6 = 0.83
batch_size
分类特定指标
--compute_classification_metrics
classification_n_classes
classification_positive_class
OpenAI CLI:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# For multiclass classification openai api fine_tunes.create \ -t \ -v \ -m \ --compute_classification_metrics \ --classification_n_classes # For binary classification openai api fine_tunes.create \ -t \ -v \ -m \ --compute_classification_metrics \ --classification_n_classes 2 \ --classification_positive_class
--compute_classification_metrics
对于多类分类
- 分类/准确性:准确性
- 分类/weighted_f1_score:加权 F-1 分数
对于二元分类
以下指标基于 0.5 的分类阈值(即,当概率> 0.5 时,示例被归类为属于正类。- 分类/准确性
- 分类/精度
- 分类/召回
- 分类/f{beta}
- 分类/极光 - AUROC
- 分类/AUPRC - AUPRC
验证
1
2
3
openai api fine_tunes.create -t \ -v \ -m
- validation_loss:验证批次丢失
- validation_sequence_accuracy:验证批处理中模型的预测令牌与真实完成令牌完全匹配的完成百分比。例如,如果为 3,则数据包含完成 [[1, 2]、[0, 5]、[4, 2]] 和模型预测 [[1, 1]、[0, 5]、[4, 2]],则此精度将为 2/3 = 0.67
batch_size
- validation_token_accuracy:验证批处理中模型正确预测的令牌的百分比。例如,如果 a 为 3,则您的数据包含完成 [[1, 2], [0, 5], [4, 2]] 和预测模型 [[1, 1], [0, 5], [4, 2]],则此精度将为 5/6 = 0.83
batch_size
超参数
model
:要微调的基本模型的名称。您可以选择“ada”、“babbage”、“居里”或“davinci”之一。若要了解有关这些模型的详细信息,请参阅模型文档。n_epochs
- 默认为 4。要为其训练模型的纪元数。纪元是指通过训练数据集的一个完整周期。batch_size
- 默认为训练集中样本数的 ~0.2%,上限为 256。批量大小是用于训练单个正向和后向传递的训练示例数。通常,我们发现较大的批量大小往往更适合较大的数据集。learning_rate_multiplier
- 默认为 0.05、0.1 或 0.2,具体取决于最终 .微调学习率是用于预训练的原始学习率乘以该乘数。我们建议尝试 0.02 到 0.2 范围内的值,以查看产生最佳结果的值。根据经验,我们发现较大的学习率通常表现得更好,批量越大。batch_size
compute_classification_metrics
- 默认为 False。如果为 True,则为了微调分类任务,在每个纪元结束时对验证集计算特定于分类的指标(准确性、F-1 分数等)。
1
2
3
4
openai api fine_tunes.create \ -t file-JD89ePi5KMsB3Tayeli5ovfW \ -m ada \ --n_epochs 1
从微调的模型继续微调
-m curie:ft--
learning_rate_multiplier
权重和偏差
openai
wandb
pip install --upgrade openai wandb
openai wandb sync
版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。