NVIDIA LogitsProcessorZoo:使用模組化 Logits 處理器控制語言模型生成

語言模型中的 Logits 是什麼?

Logits 是語言模型為詞彙表中每個 token 產生的原始、未正規化分數,經 softmax 函數轉換為機率以引導下一個 token 的選擇。

生成過程如下:模型為每個 token 輸出 logits;應用 softmax 將其轉換為機率分布;透過 sampling 或 argmax 選取下一個 token。🤗 Transformers 庫的 generate() 方法會自動處理這些步驟。

為什麼要處理 Logits?

處理 logits 使開發者能夠在 token 選擇前修改機率分布,以施加限制、避免過度泛化,並使模型輸出符合特定任務需求。

原始 logits 可能缺少所需的限制、產生泛泛的回應,或與長度限制、短語包含、多選題格式等任務不符。

NVIDIA 的 LogitsProcessorZoo

NVIDIA 的 LogitsProcessorZoo 是一組與 Hugging Face Transformers 相容的模組化 Logits 處理器集合,可用於控制序列長度、提示引用、強制短語包含以及多選題答案選擇。

該庫可透過 pip install logits-processor-zoo 安裝,並可透過 LogitsProcessorListgenerate() 方法一起使用。

GenLengthLogitsProcessor

GenLengthLogitsProcessor 透過調整 end-of-sequence (EOS) token 的可能性來控制生成序列的長度。

提升 boost factor 會讓模型更快發出 EOS,產生較短的輸出;降低它(或使用負值)會抑制 EOS,產生較長的輸出。該處理器也可設定在停止前完成句子。

Example usage from the post:

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

produces a short story, while

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

produces a longer continuation.

CiteFromPromptLogitsProcessor

CiteFromPromptLogitsProcessor 會提升或降低出現在提示中的 token 權重,以鼓勵模型生成與輸入緊密相關的內容。

這對於需要在段落上進行問答或以特定細節進行摘要的任務很有用。

Example usage:

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

with a user review prompt yields a response that repeats the review’s opinion about price.

ForceLastPhraseLogitsProcessor

ForceLastPhraseLogitsProcessor 會強制模型在結束輸出前包含使用者指定的短語。

這有助於為需要以特定字符串結尾的引用、報告或任何結構化輸出保持一致的格式。

Example usage:

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

where phrase is set to "\n\nReferences:" adds a reference block, or to "\n\nThanks for trying our RAG application!" adds a closing note.

MultipleChoiceLogitsProcessor

MultipleChoiceLogitsProcessor 會引導模型在多選題中恰好選擇一個提供的選項,並抑制所有其他 token。

這確保輸出符合嚴格的答案格式,對於測驗、調查或決策系統非常有價值。

Example usage:

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

with a prompt asking about phone features returns only the selected option, e.g., "1).

Wrapping Up

Logits 處理器提供了靈活性,能夠有效控制語言模型的輸出,在需要精確度、遵守限制或任務特定行為的情境下顯得尤為重要。

進一步探索的資源包括 Transformers 生成指南、生成策略文件、LogitsProcessor API 參考,以及 NVIDIA LogitsProcessorZoo 儲存庫(其中包含範例和使用案例)。

利用這些工具,開發者可以優化 AI 工作流程,以滿足精確的生成需求。

Sources