ChatGPTのログをexportしてjsonlにするメモ (指示データセットに使いたい)
はじめに
大規模言語モデルの構築にあたって、最も大切と言われるのは、モデルのファインチューニングとよばれる部分です。
ファインチューニングは、モデルが人間ときちんと対話できるようになるための訓練で、AIは、実際の対話データなどを学習することで、人間との関わり方を学びます。
最近は指示データセットを作る取り組みを行っています。
が、ゼロからデータセットを作るのはなかなか骨が折れます。
そこで思いついたのは、ある意味当たり前のことだったんですが、「ChatGPTとの実際の対話記録」を実際のデータセットの構築に活用する、というものです。*
*色々と注意点はあります。後述。
本記事では、ChatGPTのログを出力・解析する方法について示します。
データの出力
出力は簡単です。
画面の左下のアカウントのボタンから、「設定」→「データ制御」→「データをエクスポート」するだけです。
エクスポートを開始すると、登録したemailにデータが送られます。その中に、json形式のファイルが入っています。
データ解析
jsonデータには、細々とした不要な情報が入っているので、それをクレンジングします。処理コードは以下の通り。
import json
#jsonの読み込み
with open("conversations.json", "r") as f:
data = json.load(f)
data_list=[]
for item in data:
d={}
title = item["title"]
d["title"]=title
print(f"---------\n Title: {title}")
mapping = item["mapping"]
conversations=[]
for key in mapping.keys():
message = mapping[key]["message"]
if message:
message_id = message["id"]
author_role = message["author"]["role"]
content=""
if message["content"]["content_type"]=="multimodal_text":
continue
if "parts" in message["content"]:
content= message["content"]["parts"]
content="\n".join(content)
if "text" in message["content"]:
content+="\n"+(message["content"]["text"])
if "model_slug" in message["metadata"]:
print("Model_slug:", message["metadata"]["model_slug"])
pass
if content=="":
continue
print(f"Author role: {author_role}")
print(f"Content: {content}")
conversations.append((author_role,content))
d["conversations"]=conversations
data_list.append(d)
#出力
out_path="out.json
with open(out_path,"w") as f:
for d in data_list:
f.write(json.dumps(d,ensure_ascii=False)+"\n")
筆者は1年ほど、ChatGPTを使いました。
1000件ほどのスレッド(約13 MB)で、ChatGPTと会話をしたようです。
中身を見てみる
こんな感じでした。半分以上は、IT系の相談でした。
データセットとして使う場合は、カテゴリのバランスは気をつける必要があるかもしれません。
どう使うか?
会話データセットとして公開する
ChatGPTとの会話ログをデータセットとして公開することで、publicに使えるデータ資源を増やすことができます。
ただし、ChatGPTの利用規約上、GPTの出力を学習したAIを作っても、商用利用は難しい点については注意が必要です。
質問集として活用する
GPTの出力をAIの学習に使うのは、筋が悪いかもしれません。一方、入力の方は、そのような制約を受けません。
机上のやりとりではなく、実際の現場のユーザーの要望 = GPTに対する質問 ですので、まさに実用に近い質問集といえます。
自分で言うのもなんですが、かなり雑な質問が大半でした。
以下が、質問の例です。(人間に聞いたら、もっと詳しく説明しろ・ちゃんと調べろと、怒られそうですね)
deduplicate コマンドを全てkill linux
コマンド remote-containers.attachToRunningContainerFromViewlet の実行中にエラー The operation was aborted が発生しました。remote-containers.attachToRunningContainerFromViewlet を提供する拡張機能が原因である可能性があります。
cv2で、グレースケールにするコード
deepspeedのstage3でlora
datasetsライブラリで、listデータを読み取りたい
このような、ユーザーの手間を最小限に抑えた(雑な)質問の意図を的確に読み取り、真摯に回答するbotこそ、真に現場で求められるものかもしれません。
今後の取り組み
以下の計画を考え中です。
他所に出せないやりとりを簡便に除くフィルターシステムの構築
協力者を募りながら、データセットを公開する
質問部分は、CC0ライセンス
GPTの回答部分は、CC-NC系ライセンス
ライセンス上、問題のない回答部分を頑張って作成する
このあたり、進捗があったら、追記します。
この記事が気に入ったらサポートをしてみませんか?