ぱそきいろのIT日記

ぱそきいろがITに関する記事を書いていきます。

【準備】ChatGPTのFinetuning用データセットの作成

こんにちは、ぱそきいろです。
旧ツイッター(X、以下ツイッター)のデータがDLできたのでChatGPTに学習させていきたいと思います。
まずは準備としてツイッターからデータをDLしてChatGPTに学習させるためのデータセット作成までを書きます。

やりたいこと

ChatGPTに"ぱそきいろ"のツイートを学習させて、"ぱそきいろ"っぽいツイートを生成してもらいたいです。
あわよくば、"ぱそきいろ"っぽくチャットさせたいです。
手法としてはファインチューニングで実現します。
公式で説明があるので詳細はこちらを参照ください。
https://platform.openai.com/docs/guides/fine-tuning

ツイッターのデータDL申請

まずは自分のツイート一覧を取得します。
公式で方法を紹介してくれているのでこちらを元に申請します。
私の場合は大体2Wくらいで連絡が来ました。
全ツイート履歴とツイートをダウンロードする方法 | Xヘルプ

今回はぱそきいろのデータをDLしていきます。ついでにフォローしてください。
https://twitter.com/takacpu55

ツイートデータ

DLしたデータのうち、"tweets.js"にJSON形式で自分のツイート一覧が入っています。
他にも投稿した画像やいいね一覧もありそうなのでどこかで使いたいです。

データ整形

ChatGPTにファインチューニングする場合は以下のデータ形式で、と公式の案内にあります。

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}

ツイートデータをパースして上記の形式で吐き出させます。
やることは"tweets.js"を読み込んで、["tweet"]["fultext"]のみを抽出する。
その中でリプやRTやURLなどを削除するという流れです。
以下のコードだとデータを書き込むたびにファイルオープンが走っているので効率が良い方法ではないです。
データ形式を合わせるためにこの方法しか思い付かず、良い方法があったら教えてください。

Playgroundへアップロード

生成したファイルをPlaygroundにアップロードしてみます。
https://platform.openai.com/finetune?filter=all
Fine-tuningタブからCreate new→Base modelをgpt-3.5系に選択してファイルをアップロードします。
形式が違うと以下の形で怒られます。

失敗

正しい形式で上げてみますが、以下の形でワーニングが出ました。

成功

どうやら無料プランなので有料プランになってということみたいです。
ここから先は別の記事で書く予定です。
ひとまずここまでで、Finetuningの準備はできました。

まとめ

まずはここまででデータセットの準備ができました。
次の記事で実際にファインチューニングをやっていきたいと思います。