为 OpenAI 的 GPT-3 微调构建数据集

Structuring dataset for OpenAI's GPT-3 fine tuning

OpenAI API 的 fine tuning 端点似乎很新,我在网上找不到很多微调数据集的例子。

我负责语音机器人,我正在测试 GPT-3 对于一般开放式对话问题的性能。我想 train 我们目前使用的“固定”意图-响应对模型:这可能最终会在公司声音和风格方面表现得更好。

我已经准备好从我们当前的会话引擎中提取的一个长 JSON 数据文件,它将用户输入与 intents 和 returns 指定的响应相匹配.我想根据这些数据训练 GPT-3 模型。

截至目前,为了进行一些快速测试,我已经设置了对 API 的调用,就像它们 suggest 一样。我有一个“固定的”介绍文本

<name> is <company>'s voicebot. he is kind and professional...

This is a conversation between <name> and a customer:

这是每个查询的前置,然后是一个小的 python class 跟踪以

开头的上下文
User: <request the user provides>
Bot:

然后每轮都会附加 api 的回复,这样我就可以跟踪所说的内容。经过几个问题后,我发送的查询或提示字符串如下所示:

<name> is <company>'s voicebot. he is kind and professional...

This is a conversation between <name> and a user:

User: <request>
Bot: <response>
User: <request>
Bot: <response>
... and so on
Bot:

我的问题是,我是否必须为我的训练数据提供相同的“格式”?这是可取的吗? docs表示训练集应该是这样的格式:

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...

但是提示是否每次都需要包括我的介绍文本(描述),或者我只是提供一系列 user/bot 交换,最后用 Bot: 完成我期望的答案? 在这种情况下,最佳做法 是什么? 我担心的是,如果我想在一个月后稍微更改介绍提示,我将不得不重新训练整个过程,因为每个响应都是在训练前加上特定的文本块。

我联系了 OpenAI 的支持,他们非常有帮助:我会在这里留下他们的答案。

the prompt does not need the fixed intro every time. Instead, you'll just want to provide at least a few hundred prompt-completion pairs of user/bot exchanges. We have a sample of a chatbot fine-tuning dataset here.