実用的な制約デコーディング入門ガイド
本記事では、実用的な制約デコーディング(構造化生成またはガイド付きデコーディングとも呼ばれる)を紹介します。これは、トークン選択段階で大規模言語モデル(LLM)に指定されたデータスキーマ、文法、正規表現を強制的に守らせるエンジニアリング戦略です。有限状態マシンを構築してロジットをマスクする仕組みを説明し、現在のゴールドスタンダードであるoutlinesライブラリを紹介し、Pydanticモデルを使ったPythonの例を提供します。また、構文の完全保証やトークン節約といった利点と、エッジケースでの正直さの喪失や初期処理の遅延といったトレードオフについても議論します。
実用的な制約デコーディング(構造化生成またはガイド付きデコーディングとも呼ばれる)は、大規模言語モデル(LLM)に対して、トークン選択段階で指定されたデータスキーマ、文法、正規表現を厳密に守らせるエンジニアリング戦略です。従来の「信頼」に基づく生成とは異なり、制約デコーディングはプロンプトとテキスト生成を一意のインターリーブされたプログラムとみなし、重要な文字をロックダウンしてモデルがその間を埋めるようにします。その核となるメカニズムは、推論前に有限状態マシンを構築し、ターゲットの制約(例えばPythonのPydanticモデル)をコンパイルしてホワイトリストを生成することです。新しいトークンを生成する各ステップで、有限状態マシンが現在の状態を評価し、許可された次のトークンのリストを提供します。そして、LLMの生のロジットベクトルにマスクを適用し、ホワイトリスト外のトークンのロジットを負の無限大に設定します。その後、モデルは残ったトークンに対して通常通りソフトマックス正規化とサンプリング(温度、top-p、top-kなどのパラメータに基づく)を実行し、最も確率の高いトークンを選択して生成します。
このプロセスを何千もの単語からなるボキャブラリ全体に適用すると推論が大幅に遅くなるように思われるかもしれませんが、実際にはそうではありません。現代のPythonライブラリは、LLMのボキャブラリが静的に決まっていることを利用し、ユーザーがプロンプトを入力し始める前に事前コンパイルします。状態マシンはボキャブラリ全体を参照する必要がなく、レイテンシのオーバーヘッドは大幅に削減されます。
現在、制約デコーディングを実装するためのゴールドスタンダードとして、outlinesライブラリが広く認められています。このライブラリを使用すると、Pydanticモデル、JSONスキーマ、または正規表現を定義し、それをプリトレーニングモデルのラップされたバージョンに渡すことで、出力の自由度を制限できます。
以下はoutlinesライブラリを使用したコード例です。まず、pip install outlines[transformers]でインストールします。次に、PydanticのBaseModelを継承したUserProfileクラスを定義します(name、age、is_activeフィールド)。TinyLlamaモデルとトークナイザーをロードし、outlines.from_transformersでモデルをラップします。最後に、プロンプトと構造制約を渡してモデルを呼び出します。出力は厳密なJSONオブジェクト、例えば{"name": "John", "age": 34, "is_active": true}となります。
制約デコーディングの利点は次のとおりです。正しく使用すれば、構文の100%保証を提供し、コード内のパースブロックを不要にします。プロンプト内のトークンを大幅に節約し、例えば正しいJSONオブジェクトを示すためにトークンを消費するfew-shot例が不要になります。また、小規模モデルの民主化に貢献し、「小さな」1BパラメータモデルでもJSON生成のユースケースを確実に処理できるようにします。
一方、制限もあります。LLMが「答えられない」と言う必要がある場合でも、スキーマが整数の出力を強制すると、モデルはそれに従うため、エッジケースでは正直さを失う可能性があります。PydanticスキーマをLLMに対して初めて実行する際、有限状態マシンを構築するために数秒間のフリーズが発生し、初回の実行が著しく遅くなることがあります(ただし、以降の実行はスムーズです)。
本記事では、実用的な制約デコーディングを紹介し、それがLLM駆動の状況でなぜ必要か、どのように機能するか、現在の状況で最も広く採用されているソリューション(outlinesライブラリ)を明らかにしました。また、その使用例も提供しました。
著者:Iván Palomares Carrascosaは、AI、機械学習、深層学習、LLMにおけるリーダー、ライター、スピーカー、アドバイザーです。現実世界でAIを活用するための訓練と指導を行っています。