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 安裝,並可透過 LogitsProcessorList 與 generate() 方法一起使用。
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 工作流程,以滿足精確的生成需求。