NVIDIA LogitsProcessorZoo: モジュール式 Logits Processor による言語モデル生成の制御

言語モデルにおける Logits とは?

Logits とは、言語モデルが語彙内の各トークンに対して生成する、正規化されていない生のスコアです。これらは softmax 関数を介して確率に変換され、次のトークンの選択をガイドします。

生成プロセスは次のように機能します。モデルが各トークンの logits を出力し、softmax を適用することで確率分布に変換され、サンプリングまたは argmax によって次のトークンが選択されます。🤗 Transformers ライブラリの generate() メソッドは、これらのステップを自動的に処理します。

なぜ Logits を処理するのか?

Logits を処理することで、開発者はトークン選択の前に確率分布を修正し、制約を適用したり、過度な一般化を避けたり、モデルの出力を特定のタスク要件に合わせたりすることができます。

生の logits では、必要な制約が不足していたり、汎用的な回答が生成されたり、長さの制限、フレーズの含入、あるいは多肢選択形式などのタスクと一致しなかったりすることがあります。

NVIDIA の LogitsProcessorZoo

NVIDIA の LogitsProcessorZoo は、Hugging Face Transformers と互換性のあるモジュール式の logits processor のコレクションであり、シーケンス長、プロンプトの引用、強制的なフレーズの含入、および多肢選択の回答選択の制御を可能にします。

このライブラリは pip install logits-processor-zoo でインストール可能であり、LogitsProcessorList を介して generate() メソッドで使用できます。

GenLengthLogitsProcessor

GenLengthLogitsProcessor は、end-of-sequence (EOS) トークンの尤度を調整することで、生成されるシーケンスの長さを制御します。

boost factor を大きくすると、モデルがより早く EOS を出力する可能性が高まり、出力が短くなります。逆に、値を小さくする(または負の値を使用する)と、EOS が抑制され、出力が長くなります。また、このプロセッサは、停止する前に文章を完結させるように構成することもできます。

記事内の使用例:

[GenLengthLogitsProcessor(runner.tokenizer, boost_factor=0.1, p=2, complete_sentences=True)]

は短い物語を生成しますが、

[GenLengthLogitsProcessor(runner.tokenizer, boost_factor=-10.0, p=0, complete_sentences=False)]

はより長い継続文を生成します。

CiteFromPromptLogitsProcessor

CiteFromPromptLogitsProcessor は、プロンプトに現れるトークンの確率を高めるか、あるいは低めることで、モデルに入力内容を密接に反映したコンテンツを生成するように促します。

これは、文章に対する質問回答や、特定の詳細を含む要約などのタスクに有用です。

使用例:

[CiteFromPromptLogitsProcessor(runner.tokenizer, example_prompts, boost_factor=5.0)]

をユーザーレビューのプロンプトで使用すると、レビューの価格に関する意見を繰り返す回答が得られます。

ForceLastPhraseLogitsProcessor

ForceLastPhraseLogitsProcessor は、モデルが出力を終了する前に、ユーザーが指定したフレーズを含めるように強制します。

これは、引用、レポート、または特定の文字列で終了する必要がある構造化された出力において、一貫したフォーマットを維持するのに役立ちます。

使用例:

[ForceLastPhraseLogitsProcessor(phrase, runner.tokenizer, batch_size)]

において、phrase を "\n\nReferences:" に設定すると参照ブロックが追加され、"\n\nThanks for trying our RAG application!" に設定すると結びの言葉が追加されます。

MultipleChoiceLogitsProcessor

MultipleChoiceLogitsProcessor は、多肢選択問題に対して、提供された選択肢の中から正確に1つだけを選択するようにモデルを誘導し、それ以外のすべてのトークンを抑制します。

これにより、出力が厳格な回答形式に従うことが保証され、クイズ、アンケート、または意思決定システムに価値をもたらします。

使用例:

MultipleChoiceLogitsProcessor(
    runner.tokenizer,
    choices=["0", "1", "2", "3"],
    delimiter="\n\n"
)

をスマートフォンの機能に関するプロンプトで使用すると、「1」のような選択されたオプションのみが返されます。

まとめ

Logit processor は、言語モデルの出力を効果的に制御するための柔軟性を提供し、精度、制約の遵守、またはタスク固有の動作が重要となるシナリオにおいて非常に価値があります。

さらなる探索のためのリソースには、Transformers の生成ガイド、生成戦略のドキュメント、LogitsProcessor API リファレンス、および例とユースケースを含む NVIDIA LogitsProcessorZoo リポジトリがあります。

これらのツールを使用することで、開発者は正確な生成要件を満たすように AI ワークフローを洗練させることができます。

Sources