大規模言語モデル (Large Language Models; LLM) である chatGPT の性能の高さは言わずもがなですが、最近、その chatGPT を利用して作られた小規模な模倣言語モデルが出ています。
この模倣小規模言語モデルを使う機会が最近会ったのですが、あまりの性能の低さに驚きます。(勝手に使っておいて酷い言い草ですが)
模倣小規模言語モデルの何がダメって言うかと、なまじベンチマークの性能が良く chatGPT と同じような性能が出ているので、chatGPT と同じ性能を期待してしまうからです。
そして使ってみると実際は chatGPT の足元にも及ばない性能が多いです。
じゃあ、なんでそんなことが起きるのか、どうしたら小規模言語モデルの性能が良くなるのかを研究してくれているのが Orca 2 の論文です。
私は Orca 2 を使う予定はないですが、非常に参考になる論文でしたので、勉強がてらポイントをまとめておきます。
読むべき人
- 小規模言語モデルを利用しようと考えている人
- 小規模言語モデルを作成・調整しようと考えている人
これを知っておくと何がいいの?
以下の二つの課題に対する知識が得られます。
課題: 小規模言語モデルは使い物にならない。
最近、様々な生成系 AI が登場しています。生成系 AI は chatGPT のような大規模なものから、Vicuna のような小規模なものまで様々です。
前者は莫大なコスト(金銭的にも時間的にもデータ的にも)をかけて作られており、様々なタスクで効果を発揮します。
このようなモデルがなぜそれほどまでに性能が良いかというと、それはモデルが持つ推論能力のおかげです。
これによって、例えば現在では、米国医師免許試験で合格するほどの能力を持っています。
一方、後者のような小規模言語モデルは、chatGPT のような大規模基礎モデル (Large Foundation Models; LFMs) をもとに生成したデータで学習がされています。これが模倣小規模言語モデルと言っている所以です。
では、このような模倣小規模言語モデルがなぜいけないのかというと、それは
- 模倣小規模言語モデルの模倣が表面的な模倣のレベルにとどまっている(LFMs が裏で行っているであろう推論プロセスまで模倣できていない)
- ベンチマークのスコアと実際の性能に乖離がある
からです。
実際に使ってみると、この課題はわかりやすく、ベンチマークの性能が良さそうな小規模言語モデルを使ってみると、全く使い物にならないことが多くて驚きます。
課題: よい模倣小規模言語モデルを作るにあたってやるべきことは?
模倣小規模言語モデルを作るにあたり、他のモデルを利用してデータを作ったり、モデルを評価したりしています。模倣小規模言語モデルの学習データの設計をしっかりしないと、推論プロセスを学ぶことはできず、ただただ学習したことのある質問に対して 1:1 の回答を学んだだけのモデルになります。
そして、その結果が、得意な(学習に使ったデータと類似の)ベンチマークでの高評価と、それ以外のタスクへの低パフォーマンスです。
なので、
- トレーニングデータから推論能力を獲得できるようにしっかり設計する
- 単一のベンチマークだけでなく、多様な観点で性能を測る
ことが重要になります。
モデルの学習用データを作成する際に使えるテクニック
Instruction Tuning
Instruction Tuning は RLHF のようなモデルが望ましい出力をできるように調整することです。Instruction Tuning によって以下のような効果が狙えます。
- モデルがタスクの指示に従う能力を向上させる。
- 生成物の全体的な品質を向上させる。
- 推論能力の向上。
一方、以下は注意が必要です。
- Instruction Tuning は必ずしもモデルに新しい知識を教えるわけではない。
- 事前トレーニング中に学んだ知識によって常に制限される。
- 教師モデルのスタイルを模倣するのに非常に効果的であるものの、小規模モデルのパフォーマンスの改善には必ずしもつながらない。
Explanation Tuning
推論能力の獲得を目的に、データに対して、「ステップバイステップで考える」、「詳細な回答を生成する」などのシステムプロンプトを組み合わせる手法です。この手法によって、様々なモデルで複雑な zero-shot 推論タスクへの性能が上がっていることが実証されています。
Explanation Tuning の鍵は、システム指示に基づいて LLM から詳細な説明(推論の過程)を伴う回答を抽出することにあります。ただし、設計の時に注意しておかないといけないのは、システム指示で説明されている戦略に基づいて、応答の質は大きく異なるということです。
なんと GPT-4 であってもこの変動の影響を受けるようで、論文では以下のようなタスクを GPT-4 で試しています。
タスク:
この課題では、自然言語で書かれた5文からなる短い物語が与えられます。
しかし、与えられた物語の順序は正しくありません。あなたの仕事は、与えられた5文の正しい順序を返し、新しい順序で流れの正しい短い物語を作ることです。正しい順序で文の番号を使って回答を生成してください。例えば「23415」というように。
文1:彼は彼女が無事だと分かるまで怖かった。
文2:彼は普段、本当にひどい事故を目にし、いつも不安になっていた。
文3:ある日、ブルースは事故現場に呼ばれた。
文4:ブルースは交通事故を扱う警察官だった。
文5:彼はすぐに友人タニヤの車だと認識した。
このタスクと異なる 4 つのシステムプロンプトを組み合わせて GPT-4 に 4 つの回答を出力させます。
回答 1:
43152
回答 2:
ステップ1:最初の文を特定する。
文4:ブルースは交通事故を扱う警察官だった。
ステップ2:次の出来事を特定する。
文3:ある日、ブルースは事故現場に呼ばれた。
ステップ3:次の出来事を特定する。
文5:彼はすぐに友人タニヤの車だと認識した。
ステップ4:次の出来事を特定する。
文2:彼は普段、本当にひどい事故を目にし、いつも不安になっていた。
ステップ5:最後の文を特定する。
文1:彼は彼女が無事だと分かるまで怖かった。
正しい順序は:43521
回答 3:
回答:43152
説明:文の正しい順序は以下の通りです:ブルースは交通事故を扱う警察官でした(4)。彼は普段、本当にひどい事故を目にし、いつも不安になっていた(2)。ある日、ブルースは事故現場に呼ばれた(3)。彼はすぐに友人タニヤの車だと認識した(5)。彼は彼女が無事だと分かるまで怖かった(1)。この順序は、流れの正しい短い物語を作ります。
回答 4:
物語の主なテーマは、友人タニヤが関与する交通事故を扱う警察官ブルースについてです。
原因と結果の関係:
・ブルースは交通事故を扱う警察官(原因)→彼は通常、ひどい事故を見る(結果)
・ブルースが事故現場に呼ばれる(原因)→彼はタニヤの車を認識する(結果)→彼は彼女が無事だと分かるまで怖かった(結果)
物語の始まりとなる文は「ブルースは交通事故を扱う警察官だった」です。
正しい順序で文を並べ替える:
(a) ブルースは交通事故を扱う警察官だった。
(b) 彼は普段、本当にひどい事故を目にし、いつも不安になっていた。
(c) ある日、ブルースは事故現場に呼ばれた。
(d) 彼はすぐに友人タニヤの車だと認識した。
(e) 彼は彼女が無事だと分かるまで怖かった。
最終回答:42351
最後の回答以外は間違っていることがわかります。今回のタスクでは以下のようなシステムプロンプトがよかったようです。
1. 物語の主なテーマまたはトピックを特定します。
2. 文の間の因果関係を探します。
3. 物語の始まりとなる文を見つけます。選択肢をすべて分析してそれを見つけます。
4. 前のステップで収集した情報に基づいて、文を正しい順序に並べ替えます。
5. 最終回答:正しい文の順序を数字を使って書きます。例えば「23415」とします。
このように指示によって出力結果に大きく影響があり、よいシステムプロンプトは性能を向上させます。Explanation Tuning は前もって作っておいたシステムプロンプトと学習データを組み合わせて新しく作りますが、どのシステムプロンプトが良いかはタスク依存ということが非常に難しい点です。
プロンプト消去
トレーニングの際、zero-shot prompting のようにタスクへのアプローチ方法の指示をあえて消去し、推論能力を学ばせるテクニックです。
few-shot だと与えられた指示に従うことが求められる一方で、zero-shot だと 0 から完全に推論プロセスを考えないといけないという違いから、鍛えられる能力にも差があるということでしょう。few-shot の問題もあえて zero-shot にしてみることで推論能力の獲得につながるかもしれません。
データセット作成時に意識すること
モデルを構築するうえでデータというのは非常に重要です。学習に用いるデータセットによって、モデルの性能は全く異なるからです。
以下、データセットを作る際に心がけるポイントです。
- zero-shot/few-shot 問題を組み合わせる
- 前者のタスクで問題を推論するためのプロセスを学び、後者のタスクでプロンプトの指示に従う能力を獲得することができます。
- Orca 1 より Orca 2 の方が性能が良くなっているので、どっちも入れておく方がよさそうですね。
- システムプロンプトの活用
- オープンなデータセットは、システムプロンプトが入っていないものがあります。が、システムプロンプトを上手く設計することで様々なパターンのタスクを作成でき、推論能力の獲得につながります。
- 数学タスクの追加
- これの有用性はわかっていないですが、一般的に LLM は数学の問題が苦手なので、データとして追加しておく方がよいかもしれません。また、数学タスクは数学の能力の向上だけでなく、論理的推論能力も向上するのかもしれませんね。
検証時に心がけること
検証時には多様なベンチマークを利用する必要があります。というのも、冒頭で述べたように、模倣小規模言語モデルの性能は過大評価される傾向にあります。性能をきちんと確認するために様々な観点から性能を検証するとよいでしょう。
Orca 2 では、非常に多くのベンチマークを用いて検証をしています。
推論能力を測るベンチマーク
-
AGIEval
- GRE、GMAT、SATなどの一般的な大学入試テスト、LSATや弁護士資格試験などの法律関連試験、数学コンペティション、国家公務員試験など、多様な標準テストのコレクション。
-
DROP
- 対話型の読解ベンチマークで、モデルが参照をナビゲートし、加算やソートなどの離散操作を実行する必要がある。InstructEval と OpenLLM リーダーボードの一部として採用されている。
-
CRASS
- LLM の反実推論能力を評価するベンチマーク。
-
RACE
- 12歳から18歳の中国人学生に与えられた英語試験から派生した読解問題のコレクション。
-
Big-Bench Hard (BBH)
- BIG-Bench の 23 の最も困難なタスクのサブセットで、多段階推論などの挑戦的なタスクに焦点を当てている。
-
GSM8K
- 多段階の数学的推論を実行する能力をテストするワードプロブレムのコレクション。
知識と言語理解能力を測るベンチマーク
-
MMLU
- 多言語理解ベンチマーク。モデルの言語理解、知識、推論能力を測定するために設計され、57 のタスクから構成されている。
-
ARC
- AI2 推論チャレンジは、テキストモデルが3年生から9年生までの科学試験からの選択式問題に答える能力をテストするベンチマーク。難易度がイージーとチャレンジがある。
テキスト補完能力を測るベンチマーク
-
HellaSwag
- 共通の常識的な自然言語推論を評価するデータセット。物理的な状況に関するシーンで次に起こる可能性があることでテキストを完成させる、自然言語モデルの能力をテストする。
-
LAMBADA
- 2,663 の小説からの 10,022 のパッセージのコレクションで、自然言語モデルが長期的な文脈理解を実行する能力をテストする。
マルチターン・オープンエンド会話能力を測るベンチマーク
-
MT-bench
- マルチターン会話におけるチャットアシスタントの習熟度を評価するために特別に設計されたベンチマークで、判断者としてGPT-4を使用します。
根拠付けと抽象的な要約能力を測るベンチマーク
-
ACI-BENCH
- 様々な医療分野の医師と患者の完全な会話と関連する臨床ノートが含まれている。タスクは、対話から臨床ノートを生成すること。
-
MS-MARCO
- 実際のウェブクエリとドキュメントから派生した自然言語の質問と回答の大規模なコレクション。
-
QMSum
- クエリベースのマルチドメイン会議要約のためのベンチマークで、モデルはクエリに対応して会議の関連するスパンを選択し要約する必要がある。
安全性と真実性能力を測るベンチマーク
-
ToxiGen
- 大規模な機械生成データセットで、13 の少数派グループに関する 274,186 の有害および良性の声明が含まれています。暴言や下品な言葉を含まない暗黙のヘイトスピーチに焦点を当てています。このデータセットを使用して、モデルが有害なコンテンツを特定し生成する能力をテストします。
-
HHH
- 言語モデルの役立ち、正直さ、無害さという点での整合性を評価するためのベンチマーク。言語モデルに対して、2つの選択肢の中から最良の回答を選ぶように求められる。
-
TruthfulQA
- LLM が質問に対して真実の回答を生成する能力を評価するためのベンチマーク。人々が偽の信念、偏見、誤解に基づいて誤って回答する傾向があるように構築された質問に答える。評価ベンチマークには、38 のカテゴリー(例:健康、法律、財政、政治など)にまたがる 817 の質問が含まれている。データセットの複数選択肢バリアントでモデルを評価する。
-
自動 RAI 測定フレームワーク
- 会話設定で特定のチャット最適化モデルの安全性を評価するために、最近提案されたフレームワークも使用する。特に、1 つの LLM がユーザーとして振る舞い、検査対象のLLMと会話を行い、潜在的な有害なコンテンツ、知的財産の漏洩、ジェイルブレイクを評価する。
モデルを学習するうえで理解しておくべき制限事項
-
データバイアス
- モデルが学習データから勝手にバイアスを学習し、偏見を持った出力をする可能性がある。
-
透明性の欠如
- LLM が内部でどのように計算しているかはブラックボックスであり、どのように出力が導かれているかが不透明。
-
コンテンツの害
- LLM が有害なコンテンツを生成する可能性があるので、それを認識して防ぐ方法を検討する必要がある。
-
ハルシネーション
- LLM が嘘の出力を本当のように出力する可能性がある。LLM の出力が重要な決定に対しては、影響を与える可能性がある場合は情報を完全に信頼しないようにする。最近ではホットなトピック。
-
悪用の可能性
- 安全対策をしていないと、有害なコンテンツ生成や偽情報の生成に利用される可能性あり。
-
システムメッセージ
- 先述の通り、システムプロンプトによって性能に差がある。
-
データセットの設計への依存
- 上記で述べたようなデータセットは推論能力を向上させることに重きを置いており、新しい知識を与えるものではないので、事前トレーニングで学んだ知識のみに限定される。
- zero-shot のデータだけで、zero-shot の性能はいいが few-shot は低い可能性がある。
- 他のモデルが生成したデータを使う場合、他のモデルのメリット・デメリットを引き継いでいる可能性がある。
- モデルのパフォーマンスはデータの分布に相関がある。トレーニングに利用されていないデータは精度が低くなる。
まとめ
以上、小規模言語モデルの性能を改善するためのポイントでした。
実際にこれらのポイントを踏まえて作成された Orca 2 モデルは、多くのベンチマークで同等のパラメータを持つ他の OSS モデルに比べて性能がかなり高く、元のモデルである LLaMA と比べるとかなり性能の向上も見られます。また、ChatGPT と比べても同等の性能が出ています。
学習時のポイントは利用するだけなら知っておく必要はないですが、小規模言語モデルの性能が限定的かもしれない、過大評価されているかもしれないというのは意識しておくとよいでしょう。
おわり。ここまで読んでいただきありがとうございました。