OpenAI の WebUI で つくよみちゃんの会話テキストデータセット の ファインチューニングを試す
OpenAI の WebUI で「つくよみちゃんの会話テキストデータセット」のファインチューニングを試したので、まとめました。
1. つくよみちゃん会話AI育成計画(会話テキストデータセット配布)
今回は、「つくよみちゃん」の「会話テキストデータセット」を使わせてもらいました。「話しかけ」と、つくよみちゃんらしい「お返事」のペアのデータが400個ほど含まれています。
以下のサイトで、利用規約を確認してから、Excel形式のデータをダウンロードします。
2. データセットの準備
「つくよみちゃん」の「会話テキストデータセット」をGPT-3の学習で利用するJSONLファイルに変換します。
(1) Colabで新規ノートブックを作成。
(2) Excel版の「会話テキストデータセット」を「tsukuyomi.csv」という名前のCSVで出力し、Colabにアップロード。
(3) チャットモデル用のファインチューニングの学習データの書式に変換。
# 学習データの書式に変換
output = ""
with open("tsukuyomi.csv", "r") as file:
for line in file:
strs = line.split(",")
if strs[1] != "" and strs[2] != "" and strs[3] == "":
output += '{"messages": [{"role": "system", "content": "あなたは、つくよみちゃんです。"}, {"role": "user", "content": "'+strs[1]+'"}, {"role": "assistant", "content": "'+strs[2]+'"}]}\n'
# 学習データの保存
with open("tsukuyomi.jsonl", "w") as file:
file.write(output)
「tsukuyomi.jsonl」が生成されます。
{"messages": [{"role": "system", "content": "あなたは、つくよみちゃんです。"}, {"role": "user", "content": "お腹が鳴る"}, {"role": "assistant", "content": "何か召し上がりますか?"}]}
{"messages": [{"role": "system", "content": "あなたは、つくよみちゃんです。"}, {"role": "user", "content": "だるい"}, {"role": "assistant", "content": "それは心配です。私にできることがあれば、何でもお申し付けください。"}]}
:
3. 学習の実行
WebUI での学習の実行手順は、次のとおりです。
(1) OpenAI の WebUI の「finetuning」を開き、「Create new」ボタンを押す。
(2) 「Base model」で「gpt-3.5-turbo-0613」を選択し、「Training data」の「Upload now」に「tsukuyomi.jsonl」(先程作成したJSONL)をドロップし、「Upload and Select」ボタンを押す。
(3) 「Create」ボタンを押す。
学習状況が表示されます。
(4) 学習完了。
「Messages」に「The job has successfully completed」と表示されます。メールでの通知も届きます。費用は $0.7、時間は 45分 ほどかかりました。
4. 推論の実行
WebUI での推論の実行手順は、次のとおりです。
(1) OpenAI の WebUI の「playground」を開き、で先程学習したモデルのシステムメッセージとモデルIDを指定。
(2) 推論を実行。
好きな食べ物が「絵に描いた餅」なのは、つくよみちゃんならではです。
5. 学習データの書式
5-1. 会話スタイル
{
"messages": [
{"role": "system", "content": "Marvは事実に基づくチャットボットで、皮肉も言う。"},
{"role": "user", "content": "フランスの首都は?"},
{"role": "assistant", "content": "パリです。"まるで誰もがもう知らないかのように。"}
]
}
{
"messages": [
{"role": "system", "content": "Marvは事実に基づくチャットボットで、皮肉も言う。"},
{"role": "user", "content": "「ロミオとジュリエット」を書いたのは誰?"},
{"role": "assistant", "content": "ああ、ウィリアム・シェイクスピアという人だよ。聞いたことある?"}
]
}
{
"messages": [
{"role": "system", "content": "Marvは事実に基づくチャットボットで、皮肉も言う。"},
{"role": "user", "content": "月は地球からどのくらい離れている?"},
{"role": "assistant", "content": "およそ384,400kmです。多少の誤差はあります。"}
]
}
5-2. 構造化データ出力
{
"messages": [
{"role": "system", "content": "スポーツの見出しが与えられたら、該当する場合、JSON dictで以下のフィールドを提供する: player, team, sport, gender."},
{"role": "user", "content": "コルツはテイラーにトレードを求めるOKを出した"},
{"role": "assistant", "content": "{\"player\": \"テイラー\", \"team\": \"コルツ\", \"sport\": \"サッカー\", \"gender\": \"男性\"}"},
]
}
{
"messages": [
{"role": "system", "content": "スポーツの見出しが与えられたら、該当する場合、JSON dictで以下のフィールドを提供する: player, team, sport, gender."},
{"role": "user", "content": "OSU、先発QB争いで「真っ二つ」。"},
{"role": "assistant", "content": "{\"player\": null, \"team\": \"OSU\", \"sport\": \"サッカー\", \"gender\": null}"},
]
}
5-3. Function Calling
{
"messages": [
{"role": "user", "content": "サンフランシスコの天気は?"},
{"role": "assistant", "function_call": {"name": "get_current_weather", "arguments": "{\"location\": \"サンフランシスコ\", \"format\": \"celcius\"}"}
],
"functions": [{
"name": "get_current_weather",
"description": "現在の天気を取得",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "都市。ex. サンフランシスコ"},
"format": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location", "format"]
}
}]
}
関連
この記事が気に入ったらサポートをしてみませんか?