Hugging Face Transformersにおける制約付きビームサーチによるテキスト生成の誘導

Hugging Faceはtransformersライブラリに制約付きビームサーチを実装し、特定の単語やフレーズの包含を強制することで、ユーザーがモデルの出力を精密に制御できるようにしました。この機能は、辞書引きによって必須用語を規定できるニューラル機械翻訳や、文脈に基づいて特定の丁寧さのレベル(例:ドイツ語のフォーマル対インフォーマル)を強制する必要があるタスクにおいて極めて重要です。

制約付き生成の課題

テキスト生成タスクに特定のサブシーケンスを強制することは、ビームサーチがトークンごとに動作するため、容易ではありません。標準的なデコーディング関数は現在のシーケンスに基づいて次のトークンを予測しますが、必要なトークンが現在のステップで現れるべきか、あるいは将来のステップで現れるべきかを知る固有のメカニズムを持っていません。

さらに、複数の制約を管理すること(例:同時に2つの異なるフレーズを要求する、あるいはモデルに複数の選択肢の中から1つのフレーズを選択させる)は、デコーディングプロセスに大きな複雑さを加えます。

制約付きビームサーチの機能

制約付きビームサーチは、出力を生成した後にフィルタリングするのではなく、生成段階で事前知識を注入することを可能にします。この実装は、主に2つのタイプの制約をサポートしています:

強制単語制約

model.generate()におけるforce_words_idsキーワード引数を使用することで、ユーザーは出力に必ず現れるべき正確なトークンを指定できます。例えば、「How old are you?」の英語からドイツ語への翻訳において、「Sie」という単語を強制することで、モデルはインフォーマルな翻訳(「Wie alt bist du?」)ではなく、フォーマルな翻訳(「Wie alt sind Sie?」)を生成することを保証します。

選言的制約

選言的制約は、提供されたリストから少なくとも1つの単語を含めることで、モデルが要件を満たすことを可能にします。これは、複数の単語の形態(例:「raining」、「rained」、「rains」)が許容される場合に有用です。混合制約のシナリオでは、モデルは特定の単語をそのまま含めるように強制される一方で、関連用語の柔軟なリストから1つのオプションを選択することができます。

技術的実装:バンクとラウンドロビン選択

制約付きビームサーチは、生成の各ステップで望ましいトークンを注入し、シーケンスを制約の充足に向けて近づけることで動作します。しかし、トークンを盲目的に強制すると、しばしば意味不明な結果(例:「The is fast」)を招きます。これを解決するために、Hugging Faceは制約の充足と言語的確率のバランスを取るために「Banks(バンク)」システムを利用しています。

バンク・システム

ビームは、制約の充足に向けた進捗状況に基づいてバンクに分類されます:

  • Bank $n$: 制約の充足において$n$ステップの進捗があったビームが含まれます。

ラウンドロビン選択

モデルが最も制約に沿った(しかし、潜在的に意味不明な)ビームのみを選択してしまうのを防ぐため、アルゴリズムはバンク間でラウンドロビン選択を行います。num_beams=3の場合、システムはBank 2から最も確率の高い出力を選択し、次にBank 1、次にBank 0を選択します。これにより、モデルが制約へと押し進められている間でも、高確率で意味の通るシーケンスが保持されることが保証されます。

もしビームが制約から逸脱した場合(例:制約が「is fast」であったときに「slow」を生成した場合)、その進捗はリセットされ、Bank 0に戻されます。

Constraintクラスによる制約の拡張

force_words_idsは主要なユーザーインターフェースですが、バックエンドでは進捗を追跡し次のトークンを提案するためにConstraintオブジェクトを利用しています。開発者は、Constraint抽象インターフェースクラスをサブクラス化することで、カスタム制約を作成できます。

言及されている潜在的な将来の拡張機能には以下が含まれます:

  • OrderedConstraints: 制約を特定の順序で満たすことを保証する。
  • TemplateConstraints: 穴埋めが必要な特定の構造的テンプレートに従うようモデルに強制する。

研究の基礎

この機能は、オープン語彙の画像キャプション生成やニューラル機械翻訳に関する研究を含む、、制約付きレキシカルデコーディングおよび誘導生成に焦点を当てたいくつかの研究論文に基づいています。

Sources

関連