Transformers 文件
生成
並獲得增強的文件體驗
開始使用
生成
每個框架在其各自的GenerationMixin
類中都實現了用於文字生成的生成方法
- PyTorch generate() 在 GenerationMixin 中實現。
- TensorFlow generate() 在 TFGenerationMixin 中實現。
- Flax/JAX generate() 在 FlaxGenerationMixin 中實現。
無論您選擇哪種框架,都可以使用 GenerationConfig 類例項來引數化生成方法。有關控制生成方法行為的生成引數的完整列表,請參閱此類別。
要了解如何檢查模型的生成配置、預設值是什麼、如何臨時更改引數以及如何建立和儲存自定義生成配置,請參閱文字生成策略指南。該指南還解釋瞭如何使用相關功能,如標記流。
生成配置
class transformers.GenerationConfig
< 來源 >( **kwargs )
控制輸出長度的引數
- max_length (
int
, 可選, 預設為 20) — 生成的標記的最大長度。對應於輸入提示的長度 +max_new_tokens
。如果也設定了max_new_tokens
,則其效果將被覆蓋。 - max_new_tokens (
int
, 可選) — 要生成的最大標記數,忽略提示中的標記數。 - min_length (
int
, 可選, 預設為 0) — 要生成的序列的最小長度。對應於輸入提示的長度 +min_new_tokens
。如果也設定了min_new_tokens
,則其效果將被覆蓋。 - min_new_tokens (
int
, 可選) — 要生成的最小標記數,忽略提示中的標記數。 - early_stopping (
bool
或str
, 可選, 預設為False
) — 控制基於束的方法(如束搜尋)的停止條件。它接受以下值:True
,生成在有num_beams
個完整候選時立即停止;False
,應用啟發式方法,當找到更好候選的可能性很小時停止生成;"never"
,束搜尋過程僅在無法找到更好候選時停止(規範束搜尋演算法)。 - max_time (
float
, 可選) — 您允許計算執行的最長時間(秒)。生成仍將在分配時間過後完成當前傳遞。 - stop_strings (
str
或list[str]
, 可選) — 如果模型輸出這些字串,則應終止生成的字串或字串列表。
控制所用生成策略的引數
- do_sample (
bool
, 可選, 預設為False
) — 是否使用取樣;否則使用貪婪解碼。 - num_beams (
int
, 可選, 預設為 1) — 束搜尋的束數。1 表示沒有束搜尋。 - num_beam_groups (
int
, 可選, 預設為 1) — 將num_beams
分成組的數量,以確保不同束組之間的多樣性。有關更多詳細資訊,請參閱這篇論文。 - penalty_alpha (
float
, 可選) — 對比搜尋解碼中用於平衡模型置信度和退化懲罰的值。 - dola_layers (
str
或list[int]
, 可選) — 用於DoLa解碼的層。如果為None
,則不使用DoLa解碼。如果為字串,則必須是“low”或“high”之一,分別表示使用模型層的前半部分或後半部分。“low”表示前20層的前半部分,而“high”表示後20層的後半部分。如果為整數列表,則必須包含用於DoLa中候選過早層的層索引。第0層是模型的詞嵌入層。設定為'low'
可改善長答案推理任務,設定為'high'
可改善短答案任務。有關更多詳細資訊,請檢視文件或論文。
控制快取的引數
- use_cache (
bool
, 可選, 預設為True
) — 模型是否應使用過去的鍵/值注意力(如果適用於模型)來加快解碼速度。 - cache_implementation (
str
, 可選, 預設為None
) — 在generate
中例項化的快取類的名稱,用於加快解碼速度。可能的值有:"dynamic"
: DynamicCache"static"
: StaticCache"offloaded_static"
: OffloadedStaticCache"sliding_window"
: SlidingWindowCache"hybrid"
: HybridCache"mamba"
: MambaCache"quantized"
: QuantizedCache
如果未指定,我們將使用模型的預設快取(通常是 DynamicCache)。有關更多資訊,請參閱我們的快取文件。
- cache_config (
CacheConfig
或dict
, 可選, 預設為None
) — 用於鍵值快取類的引數可以透過cache_config
傳入。可以作為Dict
傳入,它將在內部轉換為相應的CacheConfig
。否則,可以作為與指定cache_implementation
匹配的CacheConfig
類傳入。 - return_legacy_cache (
bool
, 可選, 預設為True
) — 預設使用DynamicCache
時是否返回舊版或新格式的快取。
模型輸出 logits 操作引數
- temperature (
float
, 可選, 預設為 1.0) — 用於調整下一個標記機率的值。此值在模型的generation_config.json
檔案中設定。如果未設定,預設值為 1.0。 - top_k (
int
, 可選, 預設為 50) — 為 top-k 過濾保留的最高機率詞彙標記數。此值在模型的generation_config.json
檔案中設定。如果未設定,預設值為 50。 - top_p (
float
, 可選, 預設為 1.0) — 如果設定為浮點數 < 1,則僅保留機率之和為top_p
或更高的最小機率詞彙標記集用於生成。此值在模型的generation_config.json
檔案中設定。如果未設定,預設值為 1.0。 - min_p (
float
, 可選) — 最小標記機率,將按最可能標記的機率進行縮放。它必須是 0 到 1 之間的值。典型值在 0.01-0.2 範圍內,與將top_p
設定在 0.99-0.8 範圍內具有可比的選擇性(使用與正常top_p
值相反的值)。 - typical_p (
float
, 可選, 預設為 1.0) — 區域性典型性衡量了給定已生成的部分文字,預測下一個目標標記的條件機率與預測下一個隨機標記的預期條件機率的相似程度。如果設定為浮點數 < 1,則保留最小的區域性典型標記集,其機率之和為typical_p
或更高,用於生成。有關更多詳細資訊,請參閱這篇論文。 - epsilon_cutoff (
float
, 可選, 預設為 0.0) — 如果設定為嚴格介於 0 和 1 之間的浮點數,則僅對條件機率大於epsilon_cutoff
的標記進行取樣。在論文中,建議的值範圍為 3e-4 到 9e-4,具體取決於模型的大小。有關更多詳細資訊,請參閱截斷取樣作為語言模型去平滑化。 - eta_cutoff (
float
, 可選, 預設為 0.0) — Eta 取樣是區域性典型取樣和 epsilon 取樣的混合。如果設定為嚴格介於 0 和 1 之間的浮點數,則僅當標記大於eta_cutoff
或sqrt(eta_cutoff) * exp(-entropy(softmax(next_token_logits)))
時才考慮該標記。後一項直觀地表示預期下一個標記機率,按sqrt(eta_cutoff)
縮放。在論文中,建議的值範圍為 3e-4 到 2e-3,具體取決於模型的大小。有關更多詳細資訊,請參閱截斷取樣作為語言模型去平滑化。 - diversity_penalty (
float
, 可選, 預設為 0.0) — 如果光束在某個特定時間生成與其他組中的任何光束相同的標記,則從該光束的分數中減去此值。請注意,diversity_penalty
僅在啟用group beam search
時有效。 - repetition_penalty (
float
, 可選, 預設為 1.0) — 重複懲罰的引數。1.0 表示無懲罰。有關更多詳細資訊,請參閱這篇論文。 - encoder_repetition_penalty (
float
, 可選, 預設為 1.0) — 編碼器重複懲罰的引數。對不在原始輸入中的序列進行指數懲罰。1.0 表示無懲罰。 - length_penalty (
float
, 可選, 預設為 1.0) — 對基於束的生成使用的長度進行指數懲罰。它以序列長度的指數形式應用,然後用於除以序列的分數。由於分數是序列的對數似然(即負值),因此length_penalty
> 0.0 促進較長序列,而length_penalty
< 0.0 鼓勵較短序列。 - no_repeat_ngram_size (
int
, 可選, 預設為 0) — 如果設定為大於 0 的整數,則該大小的所有 n-gram 只能出現一次。 - bad_words_ids (
list[list[int]]
, 可選) — 不允許生成的標記 ID 列表的列表。有關更多文件和示例,請檢視NoBadWordsLogitsProcessor。 - force_words_ids (
list[list[int]]
或list[list[list[int]]]
, 可選) — 必須生成的標記 ID 列表。如果給定list[list[int]]
,則將其視為必須包含的單詞的簡單列表,與bad_words_ids
相反。如果給定list[list[list[int]]]
,則會觸發不相交約束,其中可以允許每個單詞的不同形式。 - renormalize_logits (
bool
, 可選, 預設為False
) — 是否在應用所有 logits 處理器(包括自定義處理器)後重新規範化 logits。強烈建議將此標誌設定為True
,因為搜尋演算法假設分數 logits 已規範化,但某些 logits 處理器會破壞規範化。 - constraints (
list[Constraint]
, 可選) — 可以新增到生成中的自定義約束,以確保輸出將以最合理的方式包含Constraint
物件定義的某些標記的使用。 - forced_bos_token_id (
int
, 可選, 預設為model.config.forced_bos_token_id
) — 在decoder_start_token_id
之後強制作為第一個生成標記的標記 ID。對於像 mBART 這樣的多語言模型很有用,其中第一個生成的標記需要是目標語言標記。 - forced_eos_token_id (
int
或 list[int], *可選*, 預設為
model.config.forced_eos_token_id) -- 達到
max_length` 時強制作為最後一個生成標記的標記 ID。可選地,使用列表來設定多個序列結束標記。 - remove_invalid_values (
bool
, 可選, 預設為model.config.remove_invalid_values
) — 是否移除模型可能存在的 nan 和 inf 輸出,以防止生成方法崩潰。請注意,使用remove_invalid_values
可能會減慢生成速度。 - exponential_decay_length_penalty (
tuple(int, float)
, 可選) — 此元組在生成一定數量的標記後新增指數遞增的長度懲罰。元組應包含:(start_index, decay_factor)
,其中start_index
指示懲罰開始的位置,decay_factor
表示指數衰減的因子。 - suppress_tokens (
list[int]
, 可選) — 在生成時將被抑制的標記列表。SupressTokens
logit 處理器將它們的對數機率設定為-inf
,以便它們不被取樣。 - begin_suppress_tokens (
list[int]
, 可選) — 在生成開始時將被抑制的標記列表。SupressBeginTokens
logit 處理器將它們的對數機率設定為-inf
,以便它們不被取樣。 - sequence_bias (
dict[tuple[int], float]
, 可選)) — 將標記序列對映到其偏差項的字典。正偏差會增加序列被選擇的機率,而負偏差則相反。有關更多文件和示例,請檢視SequenceBiasLogitsProcessor。 - token_healing (
bool
, 可選, 預設為False
) — 透過將提示的尾部標記替換為其適當的擴充套件來修復提示的尾部標記。這可以提高受貪婪分詞偏差影響的提示的完成質量。 - guidance_scale (
float
, 可選) — 用於無分類器引導 (CFG) 的引導比例。透過設定guidance_scale > 1
啟用 CFG。更高的引導比例會鼓勵模型生成與輸入提示更緊密相關的樣本,通常以犧牲較差質量為代價。 - low_memory (
bool
, 可選) — 切換到順序束搜尋和順序 topk,用於對比搜尋以減少峰值記憶體。與束搜尋和對比搜尋一起使用。 - watermarking_config (
BaseWatermarkingConfig
或dict
, 可選) — 透過對隨機選擇的“綠色”標記集新增少量偏差來為模型輸出加水印的引數。有關更多詳細資訊,請參閱 SynthIDTextWatermarkingConfig 和 WatermarkingConfig 的文件。如果作為Dict
傳入,它將在內部轉換為WatermarkingConfig
。
定義生成輸出變數的引數
- num_return_sequences (
int
, optional, 預設為 1) — 批次中每個元素獨立計算的返回序列的數量。 - output_attentions (
bool
, optional, 預設為False
) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量中的attentions
。 - output_hidden_states (
bool
, optional, 預設為False
) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量中的hidden_states
。 - output_scores (
bool
, optional, 預設為False
) — 是否返回預測分數。更多詳細資訊請參閱返回張量中的scores
。 - output_logits (
bool
, optional) — 是否返回未經處理的預測對數分數。更多詳細資訊請參閱返回張量中的logits
。 - return_dict_in_generate (
bool
, optional, 預設為False
) — 是否返回 ModelOutput 物件,而不是僅返回生成的序列。要返回生成快取(當use_cache
為True
時)或可選輸出(請參閱以output_
開頭的標誌),此標誌必須設定為True
。
生成時可以使用的特殊標記
- pad_token_id (
int
, optional) — 填充標記的 ID。 - bos_token_id (
int
, optional) — 序列開始標記的 ID。 - eos_token_id (
Union[int, list[int]]
, optional) — 序列結束標記的 ID。可選地,可以使用列表來設定多個序列結束標記。
編碼器-解碼器模型獨有的生成引數
- encoder_no_repeat_ngram_size (
int
, optional, 預設為 0) — 如果設定為大於 0 的整數,則encoder_input_ids
中出現的所有該大小的 n-gram 都不能出現在decoder_input_ids
中。 - decoder_start_token_id (
int
orlist[int]
, optional) — 如果編碼器-解碼器模型以與 bos 不同的標記開始解碼,則此標記的 ID 或長度為batch_size
的列表。指定列表可以為批次中的每個元素設定不同的起始 ID(例如,在一個批次中使用不同目標語言的多語言模型)。
與輔助生成相關的引數
- is_assistant (
bool
, optional, 預設為False
) — 模型是否為輔助(草稿)模型。 - num_assistant_tokens (
int
, optional, 預設為 20) — 定義了輔助模型在每次迭代中被目標模型檢查之前應生成的推測性標記的數量。num_assistant_tokens
的值越高,生成越具有推測性:如果輔助模型效能良好,可以實現更大的加速;如果輔助模型需要大量校正,則加速較小。 - num_assistant_tokens_schedule (
str
, optional, 預設為"constant"
) — 定義了在推理過程中最大輔助標記將如何變化的排程。"heuristic"
:當所有推測性標記都正確時,將num_assistant_tokens
增加 2,否則減少 1。num_assistant_tokens
的值在多次使用相同輔助模型的生成呼叫中保持不變。"heuristic_transient"
:與"heuristic"
相同,但每次生成呼叫後,num_assistant_tokens
會重置為其初始值。"constant"
:在生成過程中num_assistant_tokens
保持不變。
- assistant_confidence_threshold (
float
, optional, 預設為 0.4) — 輔助模型的置信度閾值。如果輔助模型對其當前標記的預測置信度低於此閾值,則輔助模型將停止當前標記生成迭代,即使尚未達到推測性標記的數量(由num_assistant_tokens
定義)。輔助模型的置信度閾值在整個推測迭代過程中進行調整,以減少不必要的草稿和目標前向傳播次數,偏向於避免假陰性。assistant_confidence_threshold
的值在多次使用相同輔助模型的生成呼叫中保持不變。它是《動態推測提前加速大型語言模型推測性解碼》https://huggingface.co/papers/2405.04304 中動態推測提前的無監督版本。 - prompt_lookup_num_tokens (
int
, optional) — 要作為候選標記輸出的標記數量。 - max_matching_ngram_size (
int
, optional) — 用於在提示中匹配的最大 n-gram 大小。如果未提供,預設為 2。 - assistant_early_exit(
int
, optional) — 如果設定為正整數,模型將用作輔助模型時將使用提前退出。只能與支援提前退出(即中間層 logits 可以由 LM head 解釋的模型)的模型一起使用。 - assistant_lookbehind(
int
, optional, 預設為 10) — 如果設定為正整數,重新編碼過程將額外考慮最後assistant_lookbehind
個輔助標記以正確對齊標記。只能與推測性解碼中不同的分詞器一起使用。有關更多詳細資訊,請參閱此部落格。 - target_lookbehind(
int
, optional, 預設為 10) — 如果設定為正整數,重新編碼過程將額外考慮最後target_lookbehind
個目標標記以正確對齊標記。只能與推測性解碼中不同的分詞器一起使用。有關更多詳細資訊,請參閱此部落格。
與效能和編譯相關的引數
一個儲存生成任務配置的類。generate
呼叫支援以下用於文字解碼器、文字到文字、語音到文字和視覺到文字模型的生成方法
- 如果
num_beams=1
且do_sample=False
,則為 貪婪解碼 - 如果
penalty_alpha>0.
且top_k>1
,則為 對比搜尋 - 如果
num_beams=1
且do_sample=True
,則為 多項式抽樣 - 如果
num_beams>1
且do_sample=False
,則為 束搜尋解碼 - 如果
num_beams>1
且do_sample=True
,則為 束搜尋多項式抽樣 - 如果
num_beams>1
且num_beam_groups>1
,則為 多樣化束搜尋解碼 - 如果
constraints!=None
或force_words_ids!=None
,則為 受約束束搜尋解碼 - 如果
assistant_model
或prompt_lookup_num_tokens
傳遞給.generate()
,則為 輔助解碼 - 如果
dola_layers
傳遞給.generate()
,則為 dola 解碼
要了解有關解碼策略的更多資訊,請參閱文字生成策略指南。
這些標誌中的大部分都控制著生成的 logits 或停止條件。請務必檢視生成相關類以獲取可能操作的完整描述以及其用法示例。
from_pretrained
< 來源 >( pretrained_model_name: typing.Union[str, os.PathLike] config_file_name: typing.Union[str, os.PathLike, NoneType] = None cache_dir: typing.Union[str, os.PathLike, NoneType] = None force_download: bool = False local_files_only: bool = False token: typing.Union[bool, str, NoneType] = None revision: str = 'main' **kwargs ) → GenerationConfig
引數
- pretrained_model_name (
str
或os.PathLike
) — 可以是:- 字串,huggingface.co 上模型倉庫中託管的預訓練模型配置的 模型 ID。
- 包含使用 save_pretrained() 方法儲存的配置檔案的 目錄 路徑,例如
./my_model_directory/
。
- config_file_name (
str
或os.PathLike
, optional, 預設為"generation_config.json"
) — 要從pretrained_model_name
載入的生成配置檔案 JSON 檔案的名稱。 - cache_dir (
str
或os.PathLike
, optional) — 如果不應使用標準快取,則為下載的預訓練模型配置的快取目錄路徑。 - force_download (
bool
, optional, 預設為False
) — 是否強制(重新)下載配置檔案並覆蓋現有快取版本。 - resume_download — 已棄用並忽略。現在預設情況下,所有下載都將在可能的情況下恢復。將在 Transformers v5 中刪除。
- proxies (
dict[str, str]
, optional) — 要按協議或端點使用的代理伺服器字典,例如{'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}
。代理用於每個請求。 - token (
str
或bool
, optional) — 用作遠端檔案 HTTP 持有者授權的令牌。如果為True
或未指定,將使用執行huggingface-cli login
時生成的令牌(儲存在~/.huggingface
中)。 - revision (
str
, optional, 預設為"main"
) — 要使用的特定模型版本。它可以是分支名稱、標籤名稱或提交 ID,因為我們在 huggingface.co 上使用基於 Git 的系統儲存模型和其他工件,因此revision
可以是 Git 允許的任何識別符號。要在 Hub 上測試您建立的拉取請求,您可以傳遞
revision="refs/pr/<pr_number>"
。 - return_unused_kwargs (
bool
, optional, 預設為False
) — 如果為False
,則此函式僅返回最終配置物件。如果為
True
,則此函式返回Tuple(config, unused_kwargs)
,其中 unused_kwargs 是一個字典,包含其鍵不是配置屬性的鍵/值對:即kwargs
中未用於更新config
且否則被忽略的部分。 - subfolder (
str
, optional, 預設為""
) — 如果相關檔案位於 huggingface.co 上模型倉庫的子資料夾中,您可以在此處指定資料夾名稱。 - kwargs (
dict[str, Any]
, optional) —kwargs
中任何鍵的配置屬性值將用於覆蓋已載入的值。對於其鍵不是配置屬性的鍵/值對,其行為由return_unused_kwargs
關鍵字引數控制。
從此預訓練模型例項化的配置物件。
從生成配置檔案例項化 GenerationConfig。
示例
>>> from transformers import GenerationConfig
>>> # Download configuration from huggingface.co and cache.
>>> generation_config = GenerationConfig.from_pretrained("openai-community/gpt2")
>>> # E.g. config was saved using *save_pretrained('./test/saved_model/')*
>>> generation_config.save_pretrained("./test/saved_model/")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/")
>>> # You can also specify configuration names to your generation configuration file
>>> generation_config.save_pretrained("./test/saved_model/", config_file_name="my_configuration.json")
>>> generation_config = GenerationConfig.from_pretrained("./test/saved_model/", "my_configuration.json")
>>> # If you'd like to try a minor variation to an existing configuration, you can also pass generation
>>> # arguments to `.from_pretrained()`. Be mindful that typos and unused arguments will be ignored
>>> generation_config, unused_kwargs = GenerationConfig.from_pretrained(
... "openai-community/gpt2", top_k=1, foo=False, do_sample=True, return_unused_kwargs=True
... )
>>> generation_config.top_k
1
>>> unused_kwargs
{'foo': False}
from_model_config
< 來源 >( model_config: PretrainedConfig ) → GenerationConfig
從 PretrainedConfig 例項化 GenerationConfig。此函式對於將可能包含生成引數的舊版 PretrainedConfig 物件轉換為獨立的 GenerationConfig 非常有用。
save_pretrained
< 來源 >( save_directory: typing.Union[str, os.PathLike] config_file_name: typing.Union[str, os.PathLike, NoneType] = None push_to_hub: bool = False **kwargs )
引數
- save_directory (
str
或os.PathLike
) — 配置檔案 JSON 將儲存的目錄(如果不存在,將建立)。 - config_file_name (
str
或os.PathLike
, optional, 預設為"generation_config.json"
) — 要儲存到save_directory
的生成配置檔案 JSON 的名稱。 - push_to_hub (
bool
, optional, 預設為False
) — 是否在儲存模型後將其推送到 Hugging Face 模型中心。您可以使用repo_id
指定要推送到的倉庫(預設為您名稱空間中save_directory
的名稱)。 - kwargs (
dict[str, Any]
, optional) — 傳遞給 push_to_hub() 方法的其他關鍵字引數。
將生成配置物件儲存到目錄 save_directory
,以便可以使用 from_pretrained() 類方法重新載入它。
update
< 來源 >( **kwargs ) → dict[str, Any]
使用 kwargs
中的屬性更新此類的屬性(如果它們與現有屬性匹配),並返回所有未使用的 kwargs
。
驗證 GenerationConfig 例項屬性的值。當僅從配置例項即可檢測到引數設定不正確時,將引發異常。
請注意,此處未驗證的一些引數最好在生成執行時驗證,因為它們可能取決於其他輸入和/或模型,例如與生成長度相關的引數。
get_generation_mode
< 來源 >( assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None ) → GenerationMode
返回由 GenerationConfig 例項觸發的生成模式。
GenerationMixin
一個包含所有自迴歸文字生成功能的類,用作模型類中的混入(mixin)。繼承此類的模型將具有特殊的生成相關行為,例如在初始化時載入 `GenerationConfig` 或確保在 `transformers` CI 中執行生成相關測試。
模型類應繼承 `GenerationMixin` 以啟用呼叫 `generate` 等方法,或者當它定義了直接或間接依賴於 `GenerationMixin` 的自定義 `generate` 方法時,該方法與 `generate` 等公共方法共享大致相同的介面。以下是三個示例:
- `LlamaForCausalLM` 應繼承 `GenerationMixin` 以啟用呼叫混入中的 `generate` 和其他公共方法;
- `BlipForQuestionAnswering` 有一個自定義的 `generate` 方法,它與 `GenerationMixin.generate` 的介面大致相同(它有一些額外的引數,並且輸出相同)。該函式還透過內部模型間接呼叫 `GenerationMixin.generate`。因此,`BlipForQuestionAnswering` 應繼承 `GenerationMixin`,以便受益於我們程式碼庫中所有與生成相關的自動化;
- `BarkModel` 有一個自定義的 `generate` 方法,其內部模型之一呼叫 `GenerationMixin.generate`。然而,它的 `generate` 不與 `GenerationMixin.generate` 共享相同的介面。在這種情況下,`BarkModel` 不應繼承 `GenerationMixin`,因為它破壞了 `generate` 介面。
該類公開了 generate(),可用於
- 如果
num_beams=1
且do_sample=False
,則為 貪婪解碼 - 如果 `penalty_alpha > 0` 且 `top_k > 1`,則為*對比搜尋*
- 如果
num_beams=1
且do_sample=True
,則為 多項式抽樣 - 如果
num_beams>1
且do_sample=False
,則為 束搜尋解碼 - 如果
num_beams>1
且do_sample=True
,則為 束搜尋多項式抽樣 - 如果
num_beams>1
且num_beam_groups>1
,則為 多樣化束搜尋解碼 - 如果
constraints!=None
或force_words_ids!=None
,則為 受約束束搜尋解碼 - 如果
assistant_model
或prompt_lookup_num_tokens
傳遞給.generate()
,則為 輔助解碼
要了解有關解碼策略的更多資訊,請參閱文字生成策略指南。
生成
< source 來源 >( inputs: typing.Optional[torch.Tensor] = None generation_config: typing.Optional[transformers.generation.configuration_utils.GenerationConfig] = None logits_processor: typing.Optional[transformers.generation.logits_process.LogitsProcessorList] = None stopping_criteria: typing.Optional[transformers.generation.stopping_criteria.StoppingCriteriaList] = None prefix_allowed_tokens_fn: typing.Optional[typing.Callable[[int, torch.Tensor], list[int]]] = None synced_gpus: typing.Optional[bool] = None assistant_model: typing.Optional[ForwardRef('PreTrainedModel')] = None streamer: typing.Optional[ForwardRef('BaseStreamer')] = None negative_prompt_ids: typing.Optional[torch.Tensor] = None negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None use_model_defaults: typing.Optional[bool] = None custom_generate: typing.Optional[str] = None **kwargs ) → ModelOutput or torch.LongTensor
引數
- inputs (
torch.Tensor
,形狀根據模態變化,可選) — 用作生成提示或編碼器模型輸入的序列。如果為None
,該方法將使用bos_token_id
和批處理大小為 1 的值對其進行初始化。對於僅解碼器模型,inputs
應為input_ids
格式。對於編碼器-解碼器模型,inputs 可以表示input_ids
、input_values
、input_features
或pixel_values
中的任何一個。 - generation_config (GenerationConfig,可選) — 用作生成呼叫基礎引數化的生成配置。傳遞給 `generate` 的與 `generation_config` 屬性匹配的 `**kwargs` 將覆蓋它們。如果未提供 `generation_config`,將使用預設值,其載入優先順序如下:1) 如果存在 `generation_config.json` 模型檔案,則從中載入;2) 從模型配置中載入。請注意,未指定的引數將繼承 GenerationConfig 的預設值,應查閱其文件以引數化生成。
- logits_processor (
LogitsProcessorList
,可選) — 自定義 logits 處理器,補充從引數和生成配置構建的預設 logits 處理器。如果傳入的 logit 處理器已用引數或生成配置建立,則會丟擲錯誤。此功能適用於高階使用者。 - stopping_criteria (
StoppingCriteriaList
,可選) — 自定義停止條件,補充從引數和生成配置構建的預設停止條件。如果傳入的停止條件已用引數或生成配置建立,則會丟擲錯誤。如果您的停止條件依賴於 `scores` 輸入,請確保向 `generate` 傳入 `return_dict_in_generate=True, output_scores=True`。此功能適用於高階使用者。 - prefix_allowed_tokens_fn (
Callable[[int, torch.Tensor], list[int]]
,可選) — 如果提供,此函式會在每一步限制束搜尋僅限於允許的詞元。如果未提供,則不應用任何限制。此函式接受 2 個引數:批處理 IDbatch_id
和input_ids
。它必須返回一個列表,其中包含在批處理 IDbatch_id
和先前生成的詞元inputs_ids
的條件下,下一步生成允許的詞元。此引數對於基於字首的受限生成很有用,如 Autoregressive Entity Retrieval 中所述。 - synced_gpus (
bool
,可選) — 是否繼續執行 while 迴圈直到達到 `max_length`。除非被覆蓋,否則在使用 `FullyShardedDataParallel` 或 DeepSpeed ZeRO Stage 3 與多個 GPU 時,此標誌將設定為 `True`,以避免在一個 GPU 比其他 GPU 更早完成生成時發生死鎖。否則,預設為 `False`。 - assistant_model (
PreTrainedModel
,可選) — 可用於加速生成的輔助模型。輔助模型必須具有完全相同的分詞器。當使用輔助模型預測候選詞元比使用您呼叫的生成模型執行生成快得多時,即可實現加速。因此,輔助模型應該小得多。 - streamer (
BaseStreamer
,可選) — 用於流式傳輸生成序列的流式傳輸器物件。生成的詞元透過 `streamer.put(token_ids)` 傳遞,流式傳輸器負責任何進一步的處理。 - negative_prompt_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 某些處理器(如 CFG)所需的負面提示。批處理大小必須與輸入批處理大小匹配。這是一個實驗性功能,未來版本可能會有破壞性 API 更改。 - negative_prompt_attention_mask (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) —negative_prompt_ids
的 attention_mask。 - use_model_defaults (
bool
,可選) — 當為 `True` 時,generation_config
中未設定的引數將設定為模型特有的預設生成配置 (model.generation_config
),而不是全域性預設值 (GenerationConfig()
)。如果未設定,從v4.50
開始儲存的模型將認為此標誌為True
。 - custom_generate (
str
,可選) — 包含 huggingface.co 倉庫名稱的字串。如果提供,將執行該倉庫中 `custom_generate/generate.py` 檔案中定義的自定義 `generate` 函式,而不是標準 `generate` 方法。請注意,生成邏輯完全由該倉庫定義,並且返回型別可能與標準 `generate` 方法不同。 - kwargs (
dict[str, Any]
,可選) —generation_config
的臨時引數化和/或將轉發到模型 `forward` 函式的其他模型特定 kwargs。如果模型是編碼器-解碼器模型,編碼器特定的 kwargs 不應加字首,解碼器特定的 kwargs 應加 `decoder_` 字首。
返回
ModelOutput 或 torch.LongTensor
一個 ModelOutput(如果 return_dict_in_generate=True
或 config.return_dict_in_generate=True
)或一個 torch.LongTensor
。
如果模型不是編碼器-解碼器模型(model.config.is_encoder_decoder=False
),則可能的 ModelOutput 型別為
如果模型是編碼器-解碼器模型(model.config.is_encoder_decoder=True
),則可能的 ModelOutput 型別為
為具有語言建模頭的模型生成詞元 ID 序列。
大多數生成控制引數都在 `generation_config` 中設定,如果未傳入,則將設定為模型的預設生成配置。您可以透過將相應的引數傳遞給 generate() 來覆蓋任何 `generation_config`,例如 `。generate(inputs, num_beams=4, do_sample=True)`。
有關生成策略和程式碼示例的概述,請查閱以下指南。
計算轉換分數
< source 來源 >( sequences: Tensor scores: tuple beam_indices: typing.Optional[torch.Tensor] = None normalize_logits: bool = False ) → torch.Tensor
引數
- sequences (
torch.LongTensor
) — 生成的序列。第二個維度(sequence_length)等於 `max_length`,如果所有批次因 `eos_token_id` 而提前完成,則更短。 - scores (
tuple(torch.FloatTensor)
) — 在每個生成步驟中每個詞彙詞元的轉換分數。束轉換分數包括詞元在束中先前生成的詞元對數 softmax 條件下的對數機率。由torch.FloatTensor
組成的元組,最多包含max_new_tokens
個元素(每個生成的詞元一個元素),每個張量的形狀為(batch_size*num_beams, config.vocab_size)
。 - beam_indices (
torch.LongTensor
,可選) — 在每個生成步驟中生成詞元 ID 的束索引。形狀為(batch_size*num_return_sequences, sequence_length)
的torch.LongTensor
。僅在生成時num_beams > 1
時需要。 - normalize_logits (
bool
,可選,預設為False
) — 是否對 logits 進行歸一化(出於歷史原因,可能未歸一化)。
返回
torch.Tensor
一個形狀為 `(batch_size*num_return_sequences, sequence_length)` 的 `torch.Tensor`,包含轉換分數(logits)
根據生成分數(以及束索引,如果使用了束搜尋)計算序列的轉換分數。這是一種方便的方法,可以快速獲取生成時所選詞元的分數。
示例
>>> from transformers import GPT2Tokenizer, AutoModelForCausalLM
>>> import numpy as np
>>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
>>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="pt")
>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
... # | token | token string | log probability | probability
... print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
| 262 | the | -1.414 | 24.33%
| 1110 | day | -2.609 | 7.36%
| 618 | when | -2.010 | 13.40%
| 356 | we | -1.859 | 15.58%
| 460 | can | -2.508 | 8.14%
>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
... **inputs,
... max_new_tokens=5,
... num_beams=4,
... num_return_sequences=4,
... return_dict_in_generate=True,
... output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip 1: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> # Tip 2: the output length does NOT include the input length
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = transition_scores.sum(axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
True
TFGenerationMixin
一個包含所有支援生成功能的類,用作 TFPreTrainedModel 中的混入。
該類公開了 generate(),可用於
- 如果 `num_beams=1` 且 `do_sample=False`,則透過呼叫 `greedy_search()` 進行*貪婪解碼*
- 如果 `penalty_alpha > 0` 且 `top_k > 1`,則透過呼叫 `contrastive_search()` 進行*對比搜尋*
- 如果 `num_beams=1` 且 `do_sample=True`,則透過呼叫 `sample()` 進行*多項式取樣*
- 如果 `num_beams > 1`,則透過呼叫 `beam_search()` 進行*束搜尋解碼*
您無需直接呼叫上述任何方法。請將自定義引數值傳遞給“generate”。要了解有關解碼策略的更多資訊,請參閱文字生成策略指南。
生成
< source 來源 >( inputs: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None generation_config: typing.Optional[transformers.generation.configuration_utils.GenerationConfig] = None logits_processor: typing.Optional[transformers.generation.tf_logits_process.TFLogitsProcessorList] = None seed = None **kwargs ) → ModelOutput or tf.Tensor
引數
- inputs (
tf.Tensor
,形狀根據模態變化,可選) — 用作生成提示或編碼器模型輸入的序列。如果為None
,該方法將使用bos_token_id
和批處理大小為 1 的值對其進行初始化。對於僅解碼器模型,inputs
應為input_ids
格式。對於編碼器-解碼器模型,inputs 可以表示input_ids
、input_values
、input_features
或pixel_values
中的任何一個。 - generation_config (
~generation.GenerationConfig
,可選) — 用作生成呼叫基礎引數化的生成配置。傳遞給 `generate` 的與 `generation_config` 屬性匹配的 `**kwargs` 將覆蓋它們。如果未提供 `generation_config`,將使用預設值,其載入優先順序如下:1) 如果存在 `generation_config.json` 模型檔案,則從中載入;2) 從模型配置中載入。請注意,未指定的引數將繼承 GenerationConfig 的預設值,應查閱其文件以引數化生成。 - logits_processor (
LogitsProcessorList
,可選) — 自定義 logits 處理器,補充從引數和生成配置構建的預設 logits 處理器。如果傳入的 logit 處理器已用引數或生成配置建立,則會丟擲錯誤。此功能適用於高階使用者。 - seed (
list[int]
,可選) — 控制取樣的隨機種子,包含兩個整數,當 `do_sample` 為 `True` 時使用。參見 `tf.random` 中無狀態函式的 `seed` 引數。 - kwargs (
dict[str, Any]
,可選) —generate_config
的臨時引數化和/或將轉發到模型 `forward` 函式的其他模型特定 kwargs。如果模型是編碼器-解碼器模型,編碼器特定的 kwargs 不應加字首,解碼器特定的 kwargs 應加 `decoder_` 字首。
返回
ModelOutput 或 tf.Tensor
一個 ModelOutput(如果 return_dict_in_generate=True
或 config.return_dict_in_generate=True
)或一個 tf.Tensor
。
如果模型不是編碼器-解碼器模型(model.config.is_encoder_decoder=False
),則可能的 ModelOutput 型別為
- TFGreedySearchDecoderOnlyOutput,
- TFSampleDecoderOnlyOutput,
- TFBeamSearchDecoderOnlyOutput,
- TFBeamSampleDecoderOnlyOutput
如果模型是編碼器-解碼器模型(model.config.is_encoder_decoder=True
),則可能的 ModelOutput 型別為
為具有語言建模頭的模型生成詞元 ID 序列。
大多數生成控制引數都在 `generation_config` 中設定,如果未傳入,則將設定為模型的預設生成配置。您可以透過將相應的引數傳遞給 generate,例如 `。generate(inputs, num_beams=4, do_sample=True)` 來覆蓋任何 `generation_config`。
有關生成策略和程式碼示例的概述,請查閱以下指南。
計算轉換分數
< source 來源 >( sequences: Tensor scores: tuple beam_indices: typing.Optional[tensorflow.python.framework.tensor.Tensor] = None normalize_logits: bool = False ) → tf.Tensor
引數
- sequences (
tf.Tensor
) — 生成的序列。第二個維度(sequence_length)等於 `max_length`,如果所有批次因 `eos_token_id` 而提前完成,則更短。 - scores (
tuple(tf.Tensor)
) — 在每個生成步驟中每個詞彙詞元的轉換分數。束轉換分數包括詞元在束中先前生成的詞元對數 softmax 條件下的對數機率。由tf.Tensor
組成的元組,最多包含max_new_tokens
個元素(每個生成的詞元一個元素),每個張量的形狀為(batch_size*num_beams, config.vocab_size)
。 - beam_indices (
tf.Tensor
,可選) — 在每個生成步驟中生成詞元 ID 的束索引。形狀為(batch_size*num_return_sequences, sequence_length)
的tf.Tensor
。僅在生成時num_beams > 1
時需要。 - normalize_logits (
bool
,可選,預設為False
) — 是否對 logits 進行歸一化(出於歷史原因,可能未歸一化)。
返回
tf.Tensor
一個形狀為 `(batch_size*num_return_sequences, sequence_length)` 的 `tf.Tensor`,包含轉換分數(logits)
根據生成分數(以及束索引,如果使用了束搜尋)計算序列的轉換分數。這是一種方便的方法,可以快速獲取生成時所選詞元的分數。
示例
>>> from transformers import GPT2Tokenizer, TFAutoModelForCausalLM
>>> import numpy as np
>>> tokenizer = GPT2Tokenizer.from_pretrained("openai-community/gpt2")
>>> model = TFAutoModelForCausalLM.from_pretrained("openai-community/gpt2")
>>> tokenizer.pad_token_id = tokenizer.eos_token_id
>>> inputs = tokenizer(["Today is"], return_tensors="tf")
>>> # Example 1: Print the scores for each token generated with Greedy Search
>>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, normalize_logits=True
... )
>>> # input_length is the length of the input prompt for decoder-only models, like the GPT family, and 1 for
>>> # encoder-decoder models, like BART or T5.
>>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1]
>>> generated_tokens = outputs.sequences[:, input_length:]
>>> for tok, score in zip(generated_tokens[0], transition_scores[0]):
... # | token | token string | logits | probability
... print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}")
| 262 | the | -1.414 | 24.33%
| 1110 | day | -2.609 | 7.36%
| 618 | when | -2.010 | 13.40%
| 356 | we | -1.859 | 15.58%
| 460 | can | -2.508 | 8.14%
>>> # Example 2: Reconstruct the sequence scores from Beam Search
>>> outputs = model.generate(
... **inputs,
... max_new_tokens=5,
... num_beams=4,
... num_return_sequences=4,
... return_dict_in_generate=True,
... output_scores=True,
... )
>>> transition_scores = model.compute_transition_scores(
... outputs.sequences, outputs.scores, outputs.beam_indices, normalize_logits=False
... )
>>> # If you sum the generated tokens' scores and apply the length penalty, you'll get the sequence scores.
>>> # Tip: recomputing the scores is only guaranteed to match with `normalize_logits=False`. Depending on the
>>> # use case, you might want to recompute it with `normalize_logits=True`.
>>> output_length = np.sum(transition_scores.numpy() < 0, axis=1)
>>> length_penalty = model.generation_config.length_penalty
>>> reconstructed_scores = np.sum(transition_scores, axis=1) / (output_length**length_penalty)
>>> print(np.allclose(outputs.sequences_scores, reconstructed_scores))
True
FlaxGenerationMixin
一個包含所有自迴歸文字生成功能的類,用作 FlaxPreTrainedModel 中的混入。
該類公開了 generate(),可用於
- 如果 `num_beams=1` 且 `do_sample=False`,則透過呼叫 `_greedy_search()` 進行*貪婪解碼*
- 如果 `num_beams=1` 且 `do_sample=True`,則透過呼叫 `_sample()` 進行*多項式取樣*
- 如果 `num_beams > 1` 且 `do_sample=False`,則透過呼叫 `_beam_search()` 進行*束搜尋解碼*
您無需直接呼叫上述任何方法。請將自定義引數值傳遞給“generate”。要了解有關解碼策略的更多資訊,請參閱文字生成策略指南。
生成
< source 來源 >( input_ids: Array generation_config: typing.Optional[transformers.generation.configuration_utils.GenerationConfig] = None prng_key: typing.Optional[jax.Array] = None trace: bool = True params: typing.Optional[dict[str, jax.Array]] = None logits_processor: typing.Optional[transformers.generation.flax_logits_process.FlaxLogitsProcessorList] = None **kwargs )
引數
- input_ids (
jnp.ndarray
,形狀為(batch_size, sequence_length)
) — 用作生成提示的序列。 - generation_config (
~generation.GenerationConfig
,可選) — 用作生成呼叫基礎引數化的生成配置。傳遞給 `generate` 的與 `generation_config` 屬性匹配的 `**kwargs` 將覆蓋它們。如果未提供 `generation_config`,將使用預設值,其載入優先順序如下:1) 如果存在 `generation_config.json` 模型檔案,則從中載入;2) 從模型配置中載入。請注意,未指定的引數將繼承 GenerationConfig 的預設值,應查閱其文件以引數化生成。 - trace (
bool
,可選,預設為True
) — 是否跟蹤生成。將 `trace=False` 僅應用於除錯,將導致執行時速度顯著變慢。 - params (
dict[str, jnp.ndarray]
,可選) — 可選地傳遞模型引數。對於並行生成可能很有用。 - logits_processor (
FlaxLogitsProcessorList
,可選) — 自定義 logits 處理器,補充從引數和生成配置構建的預設 logits 處理器。如果傳入的 logit 處理器已用引數或生成配置建立,則會丟擲錯誤。此功能適用於高階使用者。 - kwargs (
dict[str, Any]
, 可選) —generate_config
的臨時引數化,和/或將轉發到模型forward
函式的附加模型特定 kwargs。如果模型是編碼器-解碼器模型,則編碼器特定 kwargs 不應加字首,解碼器特定 kwargs 應加 decoder_ 字首。
為具有語言建模頭的模型生成詞元 ID 序列。