見出し画像

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"]
        }
    }]
}

関連



この記事が気に入ったらサポートをしてみませんか?