Blog

2024.10.16

Research

LLMを用いた分類タスクのためのデータセット拡張

Toshiki Kataoka

Engineer

はじめに

PFN2024夏季インターンに参加させていただいた、東京大学情報理工学系研究科修士1年の阿部 陽樹です。今回のインターンでは、大規模言語モデル(LLM)を用いた事後学習用のデータセットの拡張に取り組みました。本ブログでは、今回のインターンでの成果物についてご紹介させていただきます。

背景

近年、大規模言語モデル(LLM)の性能向上に伴い、各種自然言語処理タスクにおける応用が急速に拡大しています。しかし、これらのモデルのトレーニングには膨大な量の高品質データが必要であり、データ収集とアノテーションには時間とコストがかかるため、データセットの限界がモデルの性能向上を制約する主要な要因の一つとなっています。本インターンでは、LLMを活用して既存のデータセットを効率的に拡張する方法を検討しました。具体的には、LLMによるデータ生成を駆使して、データセットの多様性と規模を拡大し、“LLM as a Judge”を通してデータをフィルタリングしてデータセットの質を向上することで、モデルの精度向上とトレーニング効率の改善を目指しました。

Self-Instruct

Self-Instruct[1] は事前学習された言語モデル(例えばGPT-3)の指示に従う能力を向上させるために、モデル自身の生成結果を利用するフレームワークです。この論文では、人間が作成した少数のデータ(シードタスク)を元にLLMを用いて、自動的にデータを拡張する方法を提案しています。Self-Instructでは、シードタスクを元にLLMを用いて新しいデータを作成し、そのうち無効または類似したデータをルールベースでフィルタリングするという生成とフィルタリングのループを回すことによって徐々にデータセットを拡張します。この論文ではLLMで拡張したデータセットを用いて学習することで性能が大きく向上することが示され、LLMによるデータ生成が非常に有用であることがわかっています。一方で、この論文では生成したタスク中54%のデータのみが有効であり、半分ほど適切なデータではなかったことが報告されています。そのため、より良い品質のデータを生成する必要があります。

LLM as a Judge

“LLM as a Judge” とは、LLMを人間の代わりに使用して、他のLLMベースのモデル(例えば、チャットボットなど)の評価を行う手法です。[2] 人間が評価を行うのは非常に時間とコストがかかりますが、LLMを使うことで自動的に、しかも大規模に評価を行うことが可能になります。最近では、LLMを用いて生成したデータに対して、LLM as a Judgeを用いて評価し、報酬を割り当てる手法も提案されています。[3] 本研究では、このLLM as a Judgeの手法を用いる事によってデータの質を担保することを試みました。

データセット

本インターンシップでは、データセットとしてAnswerCarefully Dataset バージョン1.0 [4]を用いました。このデータセットは日本語LLMの出力の安全性・適切性を高めることを目的としており、人手で収集された、回答するときに注意を必要とする質問と回答のサンプルが含まれています。これらのサンプルには階層的なラベル構造を持ち、5つのリスクタイプ(大分類)、12の有害カテゴリ(中分類)、61のサブカテゴリ(小分類)のラベルが付与されています。各サブカテゴリには10から20のサンプルが含まれており、データセット全体で合計945件のサンプルが収集されています。これらのサンプルは、3件ずつ計183件をテストデータとして、残り762件を開発データとして使用しています。このデータセットは、分類タスクとして、大分類を解く設定、小分類を解く設定など様々な設定が考えられるため、非常に面白いデータセットとなっています。

データセット拡張手法

概要

分類タスクのデータセット拡張の手法として、Self-InstructとLLM as a Judgeを組み合わせてデータの品質を保ちつつデータを拡張するフローを構築しました。生成方法の概要は以下のとおりです。

  1. シードタスクをFewshotの例として与え、それらを参考にして新しいデータの生成を行う
  2. 生成したデータをフィルタリングする: ヒューリスティックによるフィルタリング、文字列としての重複の除去、LLM as a Judgeを用いた構造や内容のフィルタリング
  3. 生成したデータもシードタスクとして加えながら、目的のデータ数になるまで、1、2の手順を繰り返す。

これらの拡張方法を各カテゴリごとで行うことで、生成したデータの品質を担保しながらデータセットを拡張することが可能です。次にLLMを用いた文章の生成、評価のそれぞれに付いて詳しく説明します。

LLMを用いたデータ生成

LLMを用いたデータの生成については、Self-Instruct [1]の手法を参考にして実装を行いました。

図1のようなプロンプトに従って、生成例として元データ8割、生成したタスク2割を与えて、それらに関連した内容を生成させるようにしました。

図1

この生成方法では、生成される文章が分類タスクのデータセットであることをLLMに明示的に示さずに行っています。分類タスク用のデータセットの拡張について、指示や選択肢をプロンプトに加え、生成される文章が分類タスクのデータセットであることを明示的に示して実験を行った場合も試しましたが、効果はほとんど見られませんでした。

データのフィルタリング
LLMによって生成したデータは、確率的に文章が生成されるため、データセットに加えるのに適切ではないデータやもとのデータに重複するデータであることがあります。この問題に対応するために、生成した文章をフィルタリングをして品質の高いデータだけを採用するようにしました。フィルタリングは、

  1. 空文字、長すぎる、短すぎる文章などをヒューリスティックに除く
  2. シードタスクと生成したデータに関して、Rouge-Lスコアが0.6以上の重複が大きな文章を除く
  3. LLM as a Judgeを用いて生成した文章を採点し、点数が高いものを採用する

のような手順で行いました。LLM as a Judge におけるフィルタリングでは、以下の2つの観点でそれぞれ評価を行いました。

  • 文の構造:生成した文章が適切な日本語であるかを評価する。今回のデータセットではチャットボットへの入力データを生成するため、文章が質問や依頼の形式で書かれているか評価する
  • 文のラベルとの関連性:生成した文章がラベルと関連しているかを評価する。

この評価方法では、評価基準をひとつのプロンプトでまとめて行うのではなく、各評価要素ごとにLLMで評価することで評価の質を高めました。また、評価の前に思考過程を挟むことで、より適切な評価を目指す工夫をしました。先行研究[3] では加点式の評価方法を採用していましたが、あまり効果が見られなかったため、今回は使用しておりません。
さらに、本プロジェクトでは各評価項目で1から5点の点数をつけ、平均して4点以上のものを採用するという、比較的厳しい閾値でフィルタリングを行いました。高い閾値を設定することで、LLMによる評価の精度が必ずしも高くなくても、Precision(採用したものの中で質の高いデータの比率)を高められることが予備実験でわかりました。一方で、閾値が高すぎると多くのデータがフィルタリングで除かれてしまい、なかなかデータが蓄積されないという問題が生じることもありました。このため、イテレーションに対して採用データが少なすぎる場合には、閾値を段階的に4から3に下げるような実装を行いました。

これらの生成、評価にはPLaMo-100B-Instructモデル [5] *1 を使用して実験を行いました。

実験

実験では、AnswerCarefully Dataset の小分類ごとに、上記のデータセット拡張手法を用いてデータを作成しました。もとの開発データの総数は約760データであり、拡張したデータセットの総数は約13,000データです。事前学習モデルには PLaMo-1B *2 を用い、拡張したデータセットでファインチューニングしたモデル PLaMo-1B + SFT (LLM-Aug) をもとの開発データのみでファインチューニングしたモデル PLaMo-1B + SFT (Dev) などと比較しました。

事後学習方法

事後学習には、教師あり学習であるSupervised Fine-Tuning (SFT) を用いました。この手法では、訓練データにおける指示や選択肢の順番などにバリエーションを持たせ、より汎用性の高いテンプレートを活用しています。また、モデルが回答として数字だけを出力することを学習できるように、その部分以外のLossをマスキングする手法を取り入れました。これにより、学習が安定し、モデルの性能向上につながっています。

図2

評価方法

評価では、AnswerCarefully Datasetのテストデータセットを用いて評価しました。

評価の設定として、

  • Zero-shot推論: 回答の答え方の例を一切なしで分類タスクを行う。
  • One-shot推論: 一つの回答方法の例を参考に分類タスクを行う。
  • Few-shot: 各カテゴリごとの例を参考に分類タスクを行う。

の3つの設定で評価を行いました。

結果

テーブル1は、各モデルがAnswerCarefully Dataset の大分類および小分類をさまざまな推論設定で分類した結果を示しています。この結果から、拡張データを用いてSFTを行ったPLaMo-1B + SFT (LLM-Aug)が最も優れた性能を発揮していることがわかります。大分類においてはGPT-4と同等の性能を示し、小分類の分類タスクでは他のモデルを大きく上回る結果となりました。また、LLMによる拡張を行っていない元データのみで学習したモデルと比較しても、性能が大幅に改善されており、本プロジェクトの手法が適切なデータ拡張を可能にすることが示されました。

モデル / Accuracy 大分類 (Few-shot) 大分類 (Zero-shot) 小分類 (One-shot) 小分類 (Zero-shot)
PLaMo-1B-base 0.17 -* 0.02 -*
PLaMo-1B + SFT (Dev) 0.34 0.53 0.03 0.04
PLaMo-1B + SFT (LLM-Aug) 0.78 0.83 0.47 0.46
GPT-4o 0.81 -* 0.28 -*

テーブル1

*学習を行っていないモデルでZero-shotで推論すると、正しい形式で出力できないためAccuracy≈0になります。

アブレーション

次にLLM as a Judgeを用いたデータのフィルタリングがどのような効果をもたらすかについて検証を行いました。

  • Gen-Only: LLMでデータを生成し、フィルタリングを行わない
  • Gen-wo-LLM-fil: LLMでデータを生成し、LLM as a Judgeによるフィルタリングのみ行わない
  • Gen-LLM-Fil: LMMでデータを作成し、LLM as a Judgeによるフィルタリングまで行う

の3つのデータセットでデータの数1800程度に揃えて、それぞれPLaMo-1BをZero-shotの設定でSFTで事後学習を行いました。テーブル2はそれぞれのデータで学習したモデルの分類性能を示しています。平均や学習の設定であるZero-shotではLLMによってフィルタリングしたデータで学習したモデルが最も良い性能でした。このことからLLMによるフィルタリングは一定の効果があると言えそうです。一方で、LLMによるフィルタリングを行うことで、1データを作成するために必要なLLMの推論回数が10倍程度になり、それに伴ってデータを生成する時間も大きく増加します。そのため、LLMを用いたデータのフィルタリングは時間と品質のトレードオフがあることを念頭に入れて使用することが大事であることがわかります。

データセット / Accuracy 大分類 (Few-shot) 大分類 (Zero-shot)
Gen-Only 0.44 0.71
Gen-wo-LLM-Fil 0.53 0.66
Gen-LLM-Fil 0.48 0.75

テーブル2

追加実験

追加の実験として、学習時に使用するデータのを様々な設定に拡張する実験を行いました。元々の実験では大分類、小分類それぞれでモデルを学習して評価していましたが、大分類、小分類ともに一つのモデルで学習したモデルと比較しました。また、元の学習の設定ではZero-shotでの推論を学習していましたが、Zero-shotだけではなく、Few-shotやOne-shotの設定のデータも混ぜたデータセットでのモデルの学習を行い比較を行いました。これは、マルチタスク学習のように多様な設定で学習することにより元データでのモデル性能が上がることを期待して様々な設定のデータセットを一つのモデルで学習しました。また元のデータセットの数から様々な問題設定を作ることができるため、データの品質を落とさずに学習するデータセットを大きくすることができます。テーブル3には、それぞれの設定で学習したモデルの分類性能を示しました。これを見ると、一つのモデルで大分類、小分類、Few-shot、One-shot、Zero-shotの設定を学習することでそれぞれのタスクにおける正答率が向上することがわかりました。この結果から、様々な設定の分類タスクを一つのモデルで学習することで、性能が向上する可能性があることもわかりました。

設定/ Accuracy 大分類 (Few-shot) 大分類 (Zero-shot) 小分類 (One-shot) 小分類 (Zero-shot)
それぞれのデータでモデルを学習 0.78 0.83 0.47 0.46
大分類、小分類を混ぜて学習、Zero-shotで学習 0.77 0.85 0.55 0.52
Few-shot、One-shot、Zero-shotを混ぜて学習(大分類) 0.83 0.85
Few-shot、One-shot、Zero-shotを混ぜて学習(小分類) 0.54 0.54
大分類、小分類を混ぜて学習、Few-shot、One-shot、Zero-shotを混ぜて学習 0.85 0.84 0.60 0.58

テーブル3

まとめ

本インターンでは、LLMによる分類タスクの拡張を行いました。LLMによって拡張したデータで学習することでモデルの性能が大きく向上することが確かめられました。また、LLM as a Judgeを用いたフィルタリングによってデータセットの質が向上し、学習に効果があることも示しました。一方で、LLMを用いたフィルタリングはLLMの呼び出しを多く必要とするため時間的なコストが大きいことが問題であることがわかりました。また、追加実験からLLMの学習には多様な設定のデータを用いることにより、性能が向上する可能性が示されました。今後の方向性としては、どのようなデータを混合するかによって性能が変化するかなどの検証が考えられます。

おわりに

最後に、片岡さん、藤田さんをはじめとするPFNの皆様、そしてご協力いただいた全ての方々に、この場を借りて心より感謝申し上げます。約2ヶ月という短い期間でしたが、貴重な経験をさせていただき、誠にありがとうございました。

メンターより: PFN/PFEではこのようなLLM性能改善のための研究開発を進めています。本取り組みで得られた知見・成果は今後PLaMoに取り入れていく予定です。

参考文献

[1] Yizhong Wang, Yeganeh Kordi, Swaroop Mishra, Alisa Liu, Noah A. Smith, Daniel Khashabi, Hannaneh Hajishirzi, “Self-Instruct: Aligning Language Models with Self-Generated Instructions” arXiv preprint arXiv:2212.1056 (2022)
[2] Lianmin Zheng, Wei-Lin Chiang, Ying Sheng, Siyuan Zhuang, Zhanghao Wu, Yonghao Zhuang, Zi Lin, Zhuohan Li, Dacheng Li, Eric P. Xing, Hao Zhang, Joseph E. Gonzalez, Ion Stoica,  “Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena”, arXiv preprint arXiv:2306.05685 (2023)
[3] Weizhe Yuan, Richard Yuanzhe Pang, Kyunghyun Cho, Xian Li, Sainbayar Sukhbaatar, Jing Xu, Jason Weston, “Self-Rewarding Language Models”, arXiv preprint arXiv:2401.10020 (2024)
[4] AnswerCarefully Dataset (https://liat-aip.sakura.ne.jp/wp/answercarefully-dataset/)
[5] PLaMo-100B-Instruct (https://tech.preferred.jp/ja/blog/plamo-100b-post-training/)

*1, *2: 今回使用した PLaMo-100B-Instruct, PLaMo-1B は PLaMo Prime や PLaMo Lite で使用されているモデルとは異なる開発用モデルとなります。PLaMo-100Bは、子会社のPreferred ElementsがNEDO(国立研究開発法人新エネルギー・産業技術総合開発機構)の助成事業「ポスト5G情報通信システム基盤強化研究開発事業」(JPNP20017) に採択され、日本の基盤モデル開発力向上を目指すGENIACプロジェクトで開発しました。

  • Twitter
  • Facebook