2ちゃんねらーAI : 大規模言語モデルのファインチューニングの実験
概要
大規模言語モデルのチャットサービスを仕事に使いたくても, 非公開情報について話すのはアウト. 業務内容に詳しいAIとチャットしてみたいのに... 実現するためには, 事前学習済みAIを取得し, (非公開で) データを追加学習させてカスタムする方法を知っておく必要がある. その実験として, 「GPT-2」を「おーぷん2ちゃんねる対話コーパス」でファインチューニング. 2ちゃんねらーの知識を持ってる風のAIを作ってみた. 同じ方法で非公開データの知識を持ってる風のAIを作れるかもしれない.
1. 背景
大規模言語モデルの発展が目覚ましい. 中でも
は話すたびに新しい発見があって楽しい. 仕事にも使ってみたいところだけど...?
2. 課題
公開できない情報に関してはチャットできない. 例えば, 社内情報に関する質問はNG. 質問を送った時点で情報流出だから. したがってもちろんプロンプトエンジニアリング[3]も使えない. 法人向け契約を待つしかないのか...?
3. 目的
以下を目的として自分で作ってみる.
- 事前学習済みAIに, (非公開で) データを追加学習させる方法を知る.
4. 原理
ファインチューニング[4]する. 簡単にいうと,
- あらかじめ日本語を学習してある汎用的なAIを用意.
- 適用したい領域のテキストを学習させることで, 振る舞いを調整.
1.の事前学習済みAIを作るには大量のデータと計算資源が必要で, 時間もお金もかかるが, 大変ありがたいことに既にできているものがいくつか公開されている[5]. 基本的にはそれをベースにして, 2.だけやればよい.
5. 実験
5.1 モデル
rinna社の日本語GPT-2[6][7] (japanese-gpt2-medium
[8]) を用いる. 3.36億パラメータ, 24層のモデルで, 学習にはメモリ32GBのV100を8台で45日を要したとある.
5.2 データ
本当に非公開データを用いると結果を見せられないので, 次の公開データを用いる.
およそ約815万件の対話データを収録. 無償で商用利用も可.
このうち, newsplus.tsv
の前から1万件のみを用いる. 内容のサンプルはここには掲載しない. 個人的に好ましくない表現を含んでいると感じたため.
5.3 環境
学習はGoogle Colaboratoryでおこなう. 無償プランで提供されるGPUを用いる. 結果を保存するためにGoogle Driveをマウントする (これを機にGoogle Oneの100GBプランに入った).
5.4 手順
コードはここに置いた[12]. 大まかにいうと,
- データの前処理
- ファインチューニング
- 言葉を与えて, その続きを推論してもらう
という手順. 最後の推論では, 入力テキストとして「ww」を与え, 「ww」の続きとなる確率が高いと思う文章を出力してもらう. これをファインチューニングの前と後のAI, どちらにもやらせて結果を比較する.
5.5 結果
1万件すべてを2周するような学習をおこない, 15〜20分程度かかった. データを2倍の2万件にしたら, 2倍の学習時間, 30〜40分がかかると思われる. また全データを2周したところを, もし2倍の4周学習するなら同様に2倍の時間がかかると思われる.
ファインチューニングの前と後で, 「ww」を入力した推論結果をそれぞれ図1, 2に示す.
図1: ファインチューニング前の結果
図2: ファインチューニング後の結果 (一部伏字)
まず図1では, 「ww」という語彙が学習時に見られなかったのだろうか, 直後に閉じ括弧がくることが多く, 何かしらの作品と紐付くような文章が多い. 次に図2では, 喋り方が変化しており, 何かを嘲笑するかのような口調が目立つ. 語彙もコーパスに含まれていたような国や政治に関するものがほとんどである. 本投稿は特定の国や政治的思想に意見する意図はなく誤解を生む可能性があるため一部伏字とした.
5.6 考察
はっきり言って, かなり危なっかしい表現を連発するようになった. ファインチューニング前と比べて, だいぶ口が悪い傾向で, 背後になんらかの思想らしきものまで感じる. コーパスのデータと見比べてみると, 2ちゃんねらーの振る舞いをきちんと学習した, とも言えるのだろうか. あくまで言語を確率的に生成するための前提となるデータとして違ったものを与えるだけで, 意味については一切教えていないが, 違った振る舞いをさせるには十分だったようだ.
また, 別の視点から. 「こういう発言はよくない」とか「こういう言い方は不適切」という事例を生成することもできるとわかったのだから, 単純なNGワード集では打ち取れない, より複雑なNG発言の負例集として, もっと健全なAIを作る材料に利用するのはありかも. ただその場合は, バイアスを取り除くというよりは, むしろ健全な発言だけをするようにとバイアスをかけているのに近いような気もする. 世の中にチャットサービスとして公開する企業がどんなに苦労しているかがわかる.
ただ本質はそこではなかった. もう一度今回の目的を思い出そう. 目的は「事前学習済みAIに, (非公開で) データを追加学習させる方法を知る」ことだった. その意味で, 事前学習済みの汎用的なAIを, 特定の領域に特化させる具体的な方法がわかったことは重要だ. この実験と同じような手順を社内環境でやれば, 原理的には社内データを何も公開せずとも熟練のAIを作れる可能性がある.
6. まとめ
非公開の業務内容に詳しいAIアシスタントと話すには, 人気のチャットサービスを利用することはできず, あらかじめ自前でAIに知識を足し込む手順が必要になる. その実験として, GPT-2をファインチューニングした.
ついでに2ちゃんねらーの知識を持ってる風のAIができた. ことばのデータを通じて喋り方にバイアスがかかることを確認. 特定の領域に特化したAIを作れる可能性を見た一方で, そのバイアスの方向性はデータに依存するため, 運用には要注意.
同じ方法で事前学習済みの大規模言語モデルを, 業務情報などの非公開データでファインチューニングすれば, その非公開データの知識を持ってる風のAIができそう.
よかったら感想・意見なんでもコメントください!
-
OpenAI, "ChatGPT".
https://openai.com/blog/chatgpt/ ↩︎ -
Microsoft, "Bing".
https://www.bing.com/new ↩︎ -
maKunugi, "Generative AI時代のチャットボット構築が分かる本(GPT3.5 + mebo)", 06 プロンプトエンジニアリング, Zenn, 2023.
https://zenn.dev/makunugi/books/0da7ebac388e01/viewer/7e05cd ↩︎ -
maKunugi, "Generative AI時代のチャットボット構築が分かる本(GPT3.5 + mebo)", 07 ファインチューニング, Zenn, 2023.
https://zenn.dev/makunugi/books/0da7ebac388e01/viewer/f678db ↩︎ -
HelloRusk, "フリーで使える日本語の主な大規模言語モデルまとめ", Zenn.
https://zenn.dev/hellorusk/articles/ddee520a5e4318 ↩︎ -
rinnakk, "japanese-pretrained-models", GitHub.
https://github.com/rinnakk/japanese-pretrained-models ↩︎ -
趙 天雨, 沢田 慶, "日本語自然言語処理における事前学習モデルの公開", 人工知能学会研究会資料 言語・音声理解と対話処理研究会, vol.93, pp.169-170, 2021. ↩︎
-
rinna, "japanese-gpt2-medium", Hugging Face.
https://huggingface.co/rinna/japanese-gpt2-medium ↩︎ -
1never, "おーぷん2ちゃんねる対話コーパス", GitHub.
https://github.com/1never/open2ch-dialogue-corpus ↩︎ -
稲葉 通将, "おーぷん2ちゃんねる対話コーパスを用いた用例ベース対話システム", 第87回言語・音声理解と対話処理研究会(第10回対話システムシンポジウム), 人工知能学会研究会資料 SIG-SLUD-B902-33, pp.129-132, 2019. ↩︎
-
水上 雅博, 吉野 幸一郎, 中野 幹生, 赤間 怜奈, 駒谷 和範, 吉川 禎洋, 林部 祐太, 児玉 貴志, "日本語対話コーパス".
https://masahiro-mi.github.io/dialogue_corpus.html ↩︎ -
OvO-vel, "finetuning", GitHub. 2023.
https://github.com/OvO-vel/finetuning ↩︎
Discussion