メインコンテンツへスキップ
見出し画像

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

    関連



     
     

    npaka

     
     
    プログラマー。iPhone / Android / Unity / ROS / AI / AR / VR / RasPi / ロボット / ガジェット。年2冊ペースで技術書を執筆。アニソン / カラオケ / ギター / 猫 twitter : @npaka123

    あなたへのおすすめ