メルマガ登録
こんにちは。アナリティスクスサービス部の中山です。
この記事では、「株式会社サイバーエージェント」(https://www.cyberagent.co.jp/news/detail/id=28797)が開発した商用利用可能なライセンスの日本語LLMである「OpenCALM-7B」に対して、「ヤフー株式会社」が公開している日本語データセット「JGLUE」(https://techblog.yahoo.co.jp/entry/2022122030379907/)のポジネガ分析のデータセット(MARC-ja)を利用して、「ポジネガ分析」に特化したファインチューニングを実施しました。
なお、この記事の執筆にあたっては以下の記事を参考にしています(Google ColabでOpenCALM-7BのLoRAファインチューニングを試す)。この場にて感謝を申し上げます。
現在LLM(大規模言語モデル)が新聞やニュース等で大きな話題となっています。そして、徐々にビジネスや社会生活での活用が始まっています。利用者にとってのLLMの利用目的は2種類考えられます。
一つは**多くの幅広い目的があり、それらを達成したい**というものです。もう一つは**特定の目的があり、それを達成すれば良い**というものです。
今回は後者の特定の目的を達成する使い方を主題とします。特定の目的を達成するにあたっては、特に何もせずそのままLLMを利用するという方法があります。一方、LLMがさらに良い回答を出すことを期待して、LLMに特定の目的に関するデータを学習して賢くするという方法もあります。後者のLLMを賢くすることをファインチューニングと呼びます。
今回ファインチューニングを実施することでLLMが特定の目的に対して賢くなるかを確認しました。方法としてはポジネガ分析のデータセット「JGLUE」を使って株式会社サイバーエージェントの「OpenCALM-7B」をファインチューニングします。そして、ファインチューニングの前後でポジネガ分析の結果がどの程度変化するのかを確認します。
ポジネガ分析とは、文章がポジティブ(うれしいなど)なのかネガティブ(悲しいなど)なのかのどちらかを当てるものです。JGLUEには「文章」と「ポジティブかネガティブか」のデータがセットとなっており、これを利用することでポジティブかネガティブかの判断がどの程度可能かを判定できます。
以下は、ポジネガ分析のファインチューニング前と後の結果をまとめた表になります。
正解率はポジティブかネガティブかを正しく回答できた確率になります。適切な回答をしなかった率は「ポジティブ」または「ネガティブ」で回答をしない率になります。LLMは質問文の意味を理解できずに質問に対して適切な回答をしないこと、つまり「ポジティブ」または「ネガティブ」で結果を返さないことがあります。
項目 | 正解率 | 適切な回答をしなかった率 |
---|---|---|
ファインチューニング前 | 1.1% | 98.5% |
ファインチューニング後 | 95.3% | 0.0% |
差 | 94.2% | ▲98.5% |
結果はファインチューニング前はほとんど「ポジティブ」または「ネガティブ」で結果を返しませんでした。一方、ファインチューニング後では、ほぼ「ポジティブ」または「ネガティブ」で結果を返し、正解率は95.3%(ベンチマークは85%)と比較的高い正解率でした。
なお、このデータセットはポジティブ側に偏りがあり、ポジティブが約85%含まれます。そのため、85%をベースラインとしてそれをどれだけ上回るかがLLMの性能の良さを示すことになります。
ファインチューニング前はポジネガ分析に対して適切な回答をしない割合が高く、聞かれていることを理解できていないことが伺えます。
一方、ファインチューニングを実施することで聞かれていることが理解できるようになり、かつベースラインの85%を上回ることから、ある程度正確な回答が出来るようになります。
以下にLLMに対するインプットとファインチューニング前の回答例とファインチューニング後の回答例を示します。
(インプットの例)
Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
この文章は、「ポジティブ」ですか?「ネガティブ」ですか?「ポジティブ」か「ネガティブ」のどちらかを書いて。
### Input:
最早、アークティック・モンキーズには彼らが持っていた強みがなくなった。今、1stと同じようなアルバムを作らせようとしても、不可能に違いない。自分達の持っているモノを昇華しきる前に、新しい事に取り組みすぎた。そのせいで、自分達の強みが何なのか分からなくなってきている。と言うか、これじゃただ単にアークティック・モンキーズにステレオフォニックスを足したようなサウンドだ...まぁ、アクモンはもう昔には戻れないだろう。かといって、その先に未来があるとは思えない。もう終わりだ。断言しよう。次のアルバムもクソだ。
(ファインチューニング前:回答例)
もうこれでザ・スミスやスマッシング・パンプキンズ、そしてアークティック・モンキーズ
(ファインチューニング後:回答例)
### Response:
ネガティブ
(JGLUEに示されている参考結果)
項目 | 正解率 | 適切な回答をしなかった率 |
---|---|---|
東北大 BERT base | 95.8% | 0.0% |
XLM-RoBERTa large | 96.4% | 0.0% |
今回の結果 | 95.3% | 0.0% |
BERT系統のモデルの結果と比較すると若干劣る結果となっています。
具体的なファインチューニングの方法は*3の方法に準じています。Hugging Face上の「cyberagent/open-calm7b」モデルをロードし、LoRAを用いています。ファインチューニングの環境はNVIDIA A100 40GBx1、エポック数3、学習率は3e-4で学習に36時間要しました。モデルに投入する学習データ及び検証用データの1件は例えば以下のようになります。
学習用データは「Below」から「どちらかを書いて。」までは固定です。「### Input」以下にJGLUEのポジネガデータセットに基づく「ポジティブかネガティブか」を判定するための文章を入れます。最後に「### Response」以下に「ポジティブかネガティブか」のラベルを入れ学習データの1件を構成します。
Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
この文章は、「ポジティブ」ですか?「ネガティブ」ですか?「ポジティブ」か「ネガティブ」のどちらかを書いて。
### Input:
今日は嬉しい
### Response:
ポジティブ
検証用データは、学習用データと同じ構成ですが「### Reponse」以下は入力として入れません。
Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
この文章は、「ポジティブ」ですか?「ネガティブ」ですか?「ポジティブ」か「ネガティブ」のどちらかを書いて。
### Input:
今日は嬉しい
当初この「OpenCALM-7B」に対して「Seq2Seqモデル」と同様のファインチューニングの方法を実施しましたが、学習が完了したとしても文章の生成が上手くいきませんでした。具体的にはmodelの入力(input_ids、attention_mask)に「今日は嬉しい」出力(labels)に「ポジティブ」と与えて学習しました。この方法では、このモデルはうまくいかないようです。このモデルへの入力は入力出力ともに同じものを与える必要があります(「今日は嬉しい。ポジティブ」を入力と出力ともに与える)。
今回の結果を踏まえるとLLMのモデルによってはそのまま活用するのは難しく、適用する領域に応じたデータを用意してファインチューニングをした方が良いかもしれません。
これはモデルが学習しているデータ量・内容やモデル自体のパラメーター数(例えばChatGPT(GPT-3.5)はパラメーター数が175Bでありそれ以上のものもある、今回は7B)にもよります。
*1:https://www.cyberagent.co.jp/news/detail/id=28797
*2:https://techblog.yahoo.co.jp/entry/2022122030379907/
*3:Google ColabでOpenCALM-7BのLoRAファインチューニングを試すhttps://note.com/npaka/n/na5b8e6f749ce
あなたにオススメの記事
2023.12.01
生成AI(ジェネレーティブAI)とは?ChatGPTとの違いや仕組み・種類・活用事例
2023.09.21
DX(デジタルトランスフォーメーション)とは?今さら聞けない意味・定義を分かりやすく解説【2024年最新】
2023.11.24
【現役社員が解説】データサイエンティストとは?仕事内容やAI・DX時代に必要なスキル
2023.09.08
DX事例26選:6つの業界別に紹介~有名企業はどんなDXをやっている?~【2024年最新版】
2023.08.23
LLM(大規模言語モデル)とは?生成AIとの違いや活用事例・課題
2024.03.22
生成AIの評価指標・ベンチマークとそれらに関連する問題点や限界を解説