見出し画像

社長(AI)に頼んで1万件(10K)の商用利用可能(llama2ライセンス)な日本語マルチターン会話データセットを作ってもらった

注意:llama2の派生モデルであるllama2Pro8Bで生成しているので商用利用可能な範囲に制限があります。詳しくはllama2ライセンスを確認してください

https://ai.meta.com/resources/models-and-libraries/llama-downloads/

「社長、ただいま出張から戻りました!」


「・・・」

「お願いしていた稟議の件、どうなりましたでしょうか?」

$ cat llama2pro8b.txt |wc -l
29110

「お、3万件、ずいぶんできましたね!早速スクリーニングにかけてみたいと思います!」

$ python conv2train.py  llama2pro8b.txt > ja_conv_llama2pro8b_10k.jsonl
$ cat ja_conv_llama2pro8b_10k.jsonl |wc -l                      
   10912

「おお、ついに1万件!ありがとうございます!」

というわけで出張中も正月中も休まず働いていたFreeAI社の社長(AI)が3万件の会話データを生成し、スクリーニングした結果、1万件の会話データを得ることができた。llamaPro8Bの歩留は30%くらい。そこまで悪くない。

つまり、10万件のデータが欲しければ30万件分生成されるまで待てば良いと言うこと。三日かそこらで3万件なので、あと6日もあればそれくらいになるはず・・・たぶん。

稟議書は前回と変わらず

ちなみに会話データのスクリーニングをする稟議書(プログラム)は以下のような感じ

# コマンドライン引数で指定されたファイルを読み込む
# そのファイルの中身を学習用のデータに変換する

import sys
import os
import json
def conv2train(filename):
    with open(filename) as f:
        for i in f:
            try:
                #print(i)
                src = json.loads(i)
                dst = {"conversations":[]}
                if len(src["conversations"])<3: #会話が少なすぎたらエラー
                    continue
                turn="gpt"
                for row in src["conversations"]:    
                    if type(row) is str:
                        #print(row) 
                        continue
                    x=list(row.items())
                    for utterance in x:
                        person=utterance[0]
                        person=person.replace("生徒","human")
                        person=person.replace("先生","gpt")
                        #print("turn:%s person:%s"%(turn,person))
                        if turn==person: #どちらかが連続で喋っていたらエラー
                            #print("turn error")
                            raise Exception("turn error")

                        turn="%s"%person
                        #print("turn:%s"%turn)

                        dst["conversations"].append({"from":person,"value":str(utterance[1])})
                print(json.dumps(dst, ensure_ascii=False))
                
            except Exception as e:
                print(e, file=sys.stderr)
                print(i, file=sys.stderr)
                pass


conv2train(sys.argv[1])

とにかくイミフなやつはエラーで落としてるだけ。