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

rinnaの日本語GPT-2モデルのファインチューニングを試す

    「rinnaの日本語GPT-2モデル」のファインチューニングを「Huggingface Transformers 4.23.1」で試したのでまとめました。

    ・Huggingface Transformers 4.23.1

    1. rinnaの日本語GPT-2モデル

    「rinnaの日本語GPT-2モデル」は、70GBの日本語テキストをV100で約1カ月学習させた日本語テキスト生成のモデルです。

    2. ファインチューニングの実行

    ファインチューニングの実行手順は、次のとおりです。

    (1) Colabで新規ノートブックを作成し、メニュー「編集 → ノートブックの設定で「GPU」を選択。

    (2) GPUの確認。

    # GPUの確認
    !nvidia-smi
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 460.32.03    Driver Version: 460.32.03    CUDA Version: 11.2     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  Tesla T4            Off  | 00000000:00:04.0 Off |                    0 |
    | N/A   44C    P8    12W /  70W |      0MiB / 15109MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+

    (3) パッケージのインストール。
    examplesのコードも使うので、transformersリポジトリのクローンも行っています。

    # パッケージのインストール
    !git clone https://github.com/huggingface/transformers -b v4.23.1
    !pip install transformers==4.23.1
    !pip install evaluate==0.3.0
    !pip install sentencepiece==0.1.97

    (4) データセット「train.txt」をカレントフォルダ(content)のアップロード。
    「あかねと〜く」の会話データセット「dataset.txt」をダウンロードし、テキスト内の<|endoftext|>を削除し、「train.txt」に名前変更してアップロードします。

    ・train.txt

    そろそろおやすみかな?  今日も一日、おつかれさま~。
    …お兄ちゃん、いつもこんな時間まで起きてるの?
    …まさか寝てないってことはないよね?
        :
    画像

    (5) ファインチューニングの実行。

    %%time
    
    # ファインチューニングの実行
    !python ./transformers/examples/pytorch/language-modeling/run_clm.py \
        --model_name_or_path=rinna/japanese-gpt2-medium \
        --train_file=train.txt \
        --validation_file=train.txt \
        --do_train \
        --do_eval \
        --num_train_epochs=3 \
        --save_steps=5000 \
        --save_total_limit=3 \
        --per_device_train_batch_size=1 \
        --per_device_eval_batch_size=1 \
        --output_dir=output/
    CPU times: user 1.02 s, sys: 148 ms, total: 1.17 s
    Wall time: 1min 52s

    2. 推論の実行

    推論の実行手順は、次のとおりです。

    (1) トークナイザーとモデルの準備。

    from transformers import T5Tokenizer, AutoModelForCausalLM
    
    # トークナイザーとモデルの準備
    tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-medium")
    model = AutoModelForCausalLM.from_pretrained("output/")

    (2) 推論の実行。

    # 推論の実行
    input = tokenizer.encode("おはよう、お兄ちゃん。", return_tensors="pt")
    output = model.generate(input, do_sample=True, max_length=100, num_return_sequences=8)
    print(tokenizer.batch_decode(output))
    [
        'おはよう、お兄ちゃん。</s> 今日も、笑顔いっぱいいっぱいの1日になるよう、みんなでね、おにいちゃん。</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>', 
        'おはよう、お兄ちゃん。</s> 今日も一日お疲れ様でした! 今日は、昨日から一緒に過ごしていて、 少し切ない恋心を見せていた紗耶ちゃん ねえねえ、聞いてほしい事は? それじゃあ、聞いてね。 「え、私...............。...</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>', 
        'おはよう、お兄ちゃん。</s> さっきからずっと胸がモヤモヤする...</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>', 
        'おはよう、お兄ちゃん。</s> 今日は朝から寝坊しちゃったね〜もうすぐ夜明けかな。 今日もお兄ちゃんのご機嫌な1日〜</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>', 
        'おはよう、お兄ちゃん。</s> 俺は今、なんだか妙に元気。 何かお仕事やらなきゃいけないこと、やらなきゃいけないこと、やらなきゃいけないことがたくさんあってなんか嫌だ。 だって、お兄ちゃんが今、私達の家のすぐ側にあるんでしょ? そう、お兄ちゃんが一番近くの人なんです。 お兄ちゃんはいつもお兄ちゃんの顔をのぞきこむから、', 
        'おはよう、お兄ちゃん。</s> 明日は朝ごはんに、今日はおやつに、おにぎりにして。 (おにいちゃん・・朝ごはんのおにぎり、おにぎりの具が食べたくなります。) これ 私もお友達リクエストしたいなあー</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>', 
        'おはよう、お兄ちゃん。</s> 今日も、朝からお父さんと妹が来てるけど...。 お兄ちゃんが、今度の土曜日に『ちびコン』なんだよ!......あ、お兄ちゃん、知らないの?私、お兄ちゃんのこと、よく知らないから(笑)。 やっぱりお兄ちゃん、女の子のオモチャ箱をいっぱい持ってるよね♪お姉ちゃんのオエ○ポもいっぱい聞いてみたい', 'おはよう、お兄ちゃん。</s> 昨日も今日もお兄ちゃんが大好きなお兄ちゃんの隣にいるよ。昨日お兄ちゃんを呼んでくれたお兄ちゃんには、うれしいことをしようと思ってさ。 お兄ちゃんは今日もお兄ちゃんと一緒に遊ぼうね。...</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s>'
    ]


    【おまけ】 ファインチューニングしない場合の推論結果

    from transformers import T5Tokenizer, AutoModelForCausalLM
    
    # トークナイザーとモデルの準備
    tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-medium")
    model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt2-medium")
    [
        'おはよう、お兄ちゃん。</s> 』(しょーがーとにおー)は、2012年11月7日にbeetv配信されたドラマである。 大学生の桜井玲子は2年前に交通事故で両親を亡くし、弟である翔平・翔次を養うことで生活していた。 そんな怜子の元に高校受験に失敗して以来音信不通となっている姉の翔平が現れ、怜子の過去を知ることとなる。 桜井玲子(さくらい りょうこ) 大学生。', 
        'おはよう、お兄ちゃん。</s> 』 『僕だけがいない街』 『あゝ、荒野』 『あゝ! bestフレンド』 『ぼくらの』 『僕が僕であるために』 乃木坂46 梅澤美波『乃木坂46 ファースト写真集』 『初恋かもしれない。 』 乃木坂46 橋本瑠々未『乃木坂46 橋本奈々未写真集』 『乃木坂46 新制服が可愛すぎます。 』 乃木坂46 生田絵梨', 
        'おはよう、お兄ちゃん。</s> 昨日はお疲れ様でした!楽しかったです、ありがとうございます! もう今日は帰るの、嫌です。 おはようございます〜(o ́<unk> o)ノ♡明日も頑張らなきゃね〜<unk> 今日のお昼ご飯は牛丼です☆ こんにちは〜(o ́<unk> o)ノ<unk>.:。 朝、起きたよ<unk> ごはんが楽しみ〜〜', 
        'おはよう、お兄ちゃん。</s> 最近、兄貴からお手紙をもらってるの。だから私がその手紙を届けに来るよ」 そうか...その通りだな、兄貴。 俺はよくわからないままでも、兄は私のことをずっと気にかけてくれているのね。 僕はもうこの兄妹との生活でたくさんの感情を抱えてはいるけど、俺は兄をそんな風に思うことはなかった。 私はこの兄妹がいるのがつらい。兄貴', 
        'おはよう、お兄ちゃん。</s> pic.twitter.com/lv6qeqy6d1 そうゆう時は、おしゃもじで頭を拭くしかないかなと、私の中で考えています。 — たこすけ@小心者かー@ゲーム攻略wiki@ (@takasuketokokorobot) 2017年3月7日 rt @yaki_takeshoko: 【更新】(3/30)', 
        'おはよう、お兄ちゃん。</s> 』は、本橋瑠璃子による日本の漫画。 『月刊ビッグガンガン』(スクウェア・エニックス)にて、2009年11月号から2012年1月号まで連載。 1話完結型のラブコメであり、「お兄ちゃん」と呼ばれる「お兄ちゃん」達の活躍を描く。 作者の漫画『クッキングパパ』と同時期の2010年から2011年まで『月刊アフタヌーン』にて連載され、2012年3月号より『月刊ビッグガンガン』にて連載開始。', 
        'おはよう、お兄ちゃん。</s> 』でレギュラー出演している。 特技はピアノだが、幼少期から慣れ親しんでいる。 好きな色は青色。 アフィリエイトサイト「アフィリエイトエイト・プログラム」の宣伝用ブログは、「アフィリエイト・ブログ」で書かれている。 好きな俳優は、石田卓也。 好きな音楽は、ハードロック、ハード・ロック、ジャズ、ラテン・ジャズ。 好きなお菓子はコーヒー。 好きな映画は、『ダークナイト』(1999', 
        'おはよう、お兄ちゃん。</s> 昨日は妹と、今日は2人で。昨日は午前中、妹が「みらくる★らんど」というカフェに遊びに行きました。お店は、妹の勤務先の近くにあるパン屋さんです。 今日は、妹が2人で、久しぶりに来るってことで、「あそびの森」で遊ぶので、パン屋さんに行きました。 パン屋さんは、昨日は、妹が'
    ]



     
     

    npaka

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

    あなたへのおすすめ