LLMを自社仕様に調整する2つの手法、インストラクションチューニングとRAGを解説
LLMを自社仕様に調整する2つの手法とRAGを解説

業務でLLM(大規模言語モデル)を利用する際、「一般的な回答しか返ってこない」「自社の業務に即していない」と限界を感じるケースは少なくない。書籍『Pythonによるディープラーニングと生成AI・LLM』(François Chollet、Matthew Watson著)を手がかりに、LLMを「自社の文書・ルール・求める口調」に沿った実務仕様へ近づける手法を整理する。

LLMを自社向けにする2つの方法

LLMを自社の業務にフィットさせるための軸は2つある。回答の「振る舞い」を変えたいのか、回答に必要な「知識」を渡したいのかだ。

前者は、出力の形式や口調、指示への従い方を自社向けに寄せる形でモデル自体を調整する。後者は、モデルに手を加えず、回答に必要な情報を都度与えるアプローチである。

Pickt横長バナー — Telegram用の共同買い物リストアプリ

振る舞いを調整する「インストラクションチューニングとLoRA」

まず、出力の振る舞いを寄せる方法だ。汎用的なLLMは、そのままでは必ずしも指示どおりに応答してくれるとは限らない。同書は、この課題を出発点に一つの訓練手法を挙げている。特に、指示に従うチャットボットを構築したい場合、この訓練手法はインストラクションファインチューニング(以下「インストラクションチューニング」)と呼ばれる。

インストラクションチューニングでは、モデルに入力と出力のペア(ユーザーの指示とそれに対するモデルの応答)を与える。「こう指示されたら、こう答える」という例をモデルに学ばせることで、指示に従う応答へと近づけていく。ここで大切なのは、新しい知識を覚え込ませる作業ではない点だ。同書は次のように述べている。

望ましい応答を含んだサンプルを使って追加の訓練を行うことで、実質的には、モデルの出力を意図した方向へと少しずつ曲げていることになります。ここで行っているのは、言語の潜在空間を新たに学習することではありません。それはすでに数兆トークンにおよぶ事前学習によって完了しています。すでに学習済みの表現をわずかに調整し、出力のトーンや内容を制御しているだけです。

つまり、事前学習で得た土台はそのままに、出力のトーンや従い方を自社向けに寄せる作業だ。ただし、数十億のパラメータを持つモデルを丸ごと訓練し直すには、大きな計算資源が必要になる。そこで同書が紹介するのが「LoRA(Low-Rank Adaptation)」だ。

LoRA論文では、このkernel行列を凍結し、その代わりに「低ランクな」分解による更新項を追加することが提案されている。大半のパラメータを凍結し、一部だけを低ランクの更新に絞る。一見複雑な処理に思えるが、KerasHubを使えば、次の1行でシンプルに実装できる。

gemma_lm.backbone.enable_lora(rank=8)

その効果を同書はこう示す。

モデル全体のパラメータは依然として約3.7GBを占めていますが、訓練可能なパラメータが使うデータはわずか5MBにまで削減されました――およそ1,000分の1の削減です。その結果、GPU上で必要となるオプティマイザ状態も、数ギガバイトからわずか数メガバイトにまで縮小されます。

この割り切りが、小さな計算資源での調整を可能にしうる。

知識として社内文書や最新情報を参照させる「RAG」

もうひとつの道は、モデルに知識を渡す方法で、その代表がRAG(検索拡張生成)だ。同書はまず、LLM単体が抱える弱点を挙げる。

Pickt記事後バナー — 家族イラスト付きの共同買い物リストアプリ
  • LLMはときどき事実を捏造する。訓練データには存在しないにもかかわらず、訓練データから補間できそうな誤った「事実」を生成することがある。こうした情報は誤解を招くだけではなく、場合によっては危険だ。
  • LLMの知識にはカットオフ日がある。LLMの世界知識は、せいぜい事前学習が行われた時点までに限定される。LLMの再訓練は非常に高コストであり、最新のデータを使って継続的に訓練し続けることは現実的ではない。

事実と異なる出力(いわゆるハルシネーション)や、学習時点より新しい情報を持たない限界は、社内資料を扱う場面で見過ごせない。RAGはこの弱点を補う発想から生まれている。

RAGでは、まずユーザーの質問を受け取り、それに基づいて何らかのクエリを実行し、追加のテキスト文脈を取得します。このクエリは、データベースでも検索エンジンでも、質問に関連する情報を返せる仕組みに対するものであれば何でもかまいません。そうして得られた追加情報は、そのままプロンプトに挿入されます。

質問を受けるたびに関連文書を取得し、プロンプトに添えて回答させる。その効果を同書はこう説明する。

モデルの出力を事実に基づいて補強できる。ハルシネーションを完全に防ぐ特効薬は存在しないが、正しい文脈がプロンプトとして与えられている場合、LLMが事実を捏造する可能性は大幅に低くなる。

RAGはハルシネーションを完全に封じる特効薬ではなく、正確さを補強する手立てだ。それでも、モデルを再訓練せずに最新情報や社内知識を反映できるため、実務で大きな利点になりうる。

目的から選ぶ、チューニング・LoRA・RAGの使い分け

インストラクションチューニング、LoRA、RAG、これらの手法は目的に応じて選び分けられる。

実現したいこと主な選択肢LLMに与えるもの/変えるもの位置づけ
出力の形式・指示への従い方・口調を寄せたいインストラクションチューニング学習済みモデルの振る舞い出力の調整
調整を少ない訓練可能パラメータで行いたいLoRA更新パラメータを限定現実的な調整手法
質問に必要な社内文書・外部情報を回答時に使わせたいRAG関連テキストをプロンプトに追加知識の参照

(同書をもとに編集部作成)

自社向けのLLM活用を検討するときは、まず「回答の仕方を変えたいのか」「回答の材料を増やしたいのか」を分けて考えるとよいだろう。前者ではインストラクションチューニングとLoRA、後者ではRAGが中心になる。目的が異なるため、必要に応じて両者を組み合わせることもできる。手法から入るのではなく、業務で求める回答を起点に選ぶことが、使いこなしの近道につながる。