Transformers 文件
語音編碼器-解碼器模型
並獲得增強的文件體驗
開始使用
語音編碼器-解碼器模型
`SpeechEncoderDecoderModel` 可以用於初始化一個語音到文字模型,其中任意預訓練的語音自編碼模型(例如 Wav2Vec2、Hubert)作為編碼器,任意預訓練的自迴歸模型作為解碼器。
在 Changhan Wang、Anne Wu、Juan Pino、Alexei Baevski、Michael Auli、Alexis Conneau 的論文 《大型自監督和半監督語音翻譯學習》 中,展示了使用預訓練檢查點初始化語音序列到文字序列模型進行語音識別和語音翻譯的有效性。
有關如何使用 `SpeechEncoderDecoderModel` 進行推理的示例,請參見 Speech2Text2。
從模型配置隨機初始化 SpeechEncoderDecoderModel。
`SpeechEncoderDecoderModel` 可以從編碼器和解碼器配置中隨機初始化。在以下示例中,我們將演示如何使用編碼器的預設 `Wav2Vec2Model` 配置和解碼器的預設 `BertForCausalLM` 配置來完成此操作。
>>> from transformers import BertConfig, Wav2Vec2Config, SpeechEncoderDecoderConfig, SpeechEncoderDecoderModel
>>> config_encoder = Wav2Vec2Config()
>>> config_decoder = BertConfig()
>>> config = SpeechEncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder)
>>> model = SpeechEncoderDecoderModel(config=config)
從預訓練編碼器和預訓練解碼器初始化 SpeechEncoderDecoderModel。
`SpeechEncoderDecoderModel` 可以從預訓練的編碼器檢查點和預訓練的解碼器檢查點進行初始化。請注意,任何基於 Transformer 的預訓練語音模型(例如 Wav2Vec2、Hubert)都可以作為編碼器,而預訓練的自編碼模型(例如 BERT)、預訓練的因果語言模型(例如 GPT2)以及序列到序列模型的預訓練解碼器部分(例如 BART 的解碼器)都可以用作解碼器。根據您選擇的解碼器架構,交叉注意力層可能會隨機初始化。從預訓練的編碼器和解碼器檢查點初始化 `SpeechEncoderDecoderModel` 需要在下游任務上進行微調,如 《熱啟動編碼器-解碼器部落格文章》 所示。為此,`SpeechEncoderDecoderModel` 類提供了 `SpeechEncoderDecoderModel.from_encoder_decoder_pretrained()` 方法。
>>> from transformers import SpeechEncoderDecoderModel
>>> model = SpeechEncoderDecoderModel.from_encoder_decoder_pretrained(
... "facebook/hubert-large-ll60k", "google-bert/bert-base-uncased"
... )
載入現有 SpeechEncoderDecoderModel 檢查點並執行推理。
要載入 `SpeechEncoderDecoderModel` 類的微調檢查點,`SpeechEncoderDecoderModel` 提供了與 Transformers 中任何其他模型架構一樣的 `from_pretrained(...)` 方法。
要執行推理,可以使用 `generate` 方法,該方法允許自迴歸生成文字。此方法支援各種解碼形式,例如貪婪解碼、束搜尋和多項式取樣。
>>> from transformers import Wav2Vec2Processor, SpeechEncoderDecoderModel
>>> from datasets import load_dataset
>>> import torch
>>> # load a fine-tuned speech translation model and corresponding processor
>>> model = SpeechEncoderDecoderModel.from_pretrained("facebook/wav2vec2-xls-r-300m-en-to-15")
>>> processor = Wav2Vec2Processor.from_pretrained("facebook/wav2vec2-xls-r-300m-en-to-15")
>>> # let's perform inference on a piece of English speech (which we'll translate to German)
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> input_values = processor(ds[0]["audio"]["array"], return_tensors="pt").input_values
>>> # autoregressively generate transcription (uses greedy decoding by default)
>>> generated_ids = model.generate(input_values)
>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
>>> print(generated_text)
Mr. Quilter ist der Apostel der Mittelschicht und wir freuen uns, sein Evangelium willkommen heißen zu können.
訓練
模型建立後,可以像 BART、T5 或任何其他編碼器-解碼器模型一樣,在(語音、文字)對資料集上進行微調。如您所見,模型只需要 2 個輸入即可計算損失:`input_values`(語音輸入)和 `labels`(編碼目標序列的 `input_ids`)。
>>> from transformers import AutoTokenizer, AutoFeatureExtractor, SpeechEncoderDecoderModel
>>> from datasets import load_dataset
>>> encoder_id = "facebook/wav2vec2-base-960h" # acoustic model encoder
>>> decoder_id = "google-bert/bert-base-uncased" # text decoder
>>> feature_extractor = AutoFeatureExtractor.from_pretrained(encoder_id)
>>> tokenizer = AutoTokenizer.from_pretrained(decoder_id)
>>> # Combine pre-trained encoder and pre-trained decoder to form a Seq2Seq model
>>> model = SpeechEncoderDecoderModel.from_encoder_decoder_pretrained(encoder_id, decoder_id)
>>> model.config.decoder_start_token_id = tokenizer.cls_token_id
>>> model.config.pad_token_id = tokenizer.pad_token_id
>>> # load an audio input and pre-process (normalise mean/std to 0/1)
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> input_values = feature_extractor(ds[0]["audio"]["array"], return_tensors="pt").input_values
>>> # load its corresponding transcription and tokenize to generate labels
>>> labels = tokenizer(ds[0]["text"], return_tensors="pt").input_ids
>>> # the forward function automatically creates the correct decoder_input_ids
>>> loss = model(input_values=input_values, labels=labels).loss
>>> loss.backward()
SpeechEncoderDecoderConfig
class transformers.SpeechEncoderDecoderConfig
< source >( **kwargs )
引數
- kwargs (可選) — 關鍵字引數字典。特別地:
- encoder (`PretrainedConfig`, 可選) — 定義編碼器配置的配置物件例項。
- decoder (`PretrainedConfig`, 可選) — 定義解碼器配置的配置物件例項。
`SpeechEncoderDecoderConfig` 是用於儲存 `SpeechEncoderDecoderModel` 配置的配置類。它用於根據指定引數例項化編碼器-解碼器模型,定義編碼器和解碼器配置。
配置物件繼承自 `PretrainedConfig`,可用於控制模型輸出。有關更多資訊,請閱讀 `PretrainedConfig` 的文件。
示例
>>> from transformers import BertConfig, Wav2Vec2Config, SpeechEncoderDecoderConfig, SpeechEncoderDecoderModel
>>> # Initializing a Wav2Vec2 & BERT style configuration
>>> config_encoder = Wav2Vec2Config()
>>> config_decoder = BertConfig()
>>> config = SpeechEncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder)
>>> # Initializing a Wav2Vec2Bert model from a Wav2Vec2 & google-bert/bert-base-uncased style configurations
>>> model = SpeechEncoderDecoderModel(config=config)
>>> # Accessing the model configuration
>>> config_encoder = model.config.encoder
>>> config_decoder = model.config.decoder
>>> # set decoder config to causal lm
>>> config_decoder.is_decoder = True
>>> config_decoder.add_cross_attention = True
>>> # Saving the model, including its configuration
>>> model.save_pretrained("my-model")
>>> # loading model and config from pretrained folder
>>> encoder_decoder_config = SpeechEncoderDecoderConfig.from_pretrained("my-model")
>>> model = SpeechEncoderDecoderModel.from_pretrained("my-model", config=encoder_decoder_config)
from_encoder_decoder_configs
< source >( encoder_config: PretrainedConfig decoder_config: PretrainedConfig **kwargs ) → SpeechEncoderDecoderConfig
從預訓練編碼器模型配置和解碼器模型配置例項化 `SpeechEncoderDecoderConfig`(或派生類)。
SpeechEncoderDecoderModel
class transformers.SpeechEncoderDecoderModel
< source >( config: typing.Optional[transformers.configuration_utils.PretrainedConfig] = None encoder: typing.Optional[transformers.modeling_utils.PreTrainedModel] = None decoder: typing.Optional[transformers.modeling_utils.PreTrainedModel] = None )
引數
- config (`PretrainedConfig`, 可選) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 `from_pretrained()` 方法以載入模型權重。
- encoder (
PreTrainedModel
, 可選) — 要使用的編碼器模型。 - decoder (
PreTrainedModel
, 可選) — 要使用的解碼器模型。
純粹的語音編碼器-解碼器模型,輸出原始隱藏狀態,不帶任何特定的頭部層。
該模型繼承自 `PreTrainedModel`。請查閱超類文件,瞭解該庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
該模型也是 PyTorch `torch.nn.Module` 的子類。請將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件中所有與通用用法和行為相關的內容。
前向傳播
< source >( inputs: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.FloatTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.BoolTensor] = None encoder_outputs: typing.Optional[tuple[torch.FloatTensor]] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None decoder_inputs_embeds: typing.Optional[torch.FloatTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None input_values: typing.Optional[torch.FloatTensor] = None input_features: typing.Optional[torch.FloatTensor] = None return_dict: typing.Optional[bool] = None **kwargs ) → transformers.modeling_outputs.Seq2SeqLMOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
或(batch_size, sequence_length, feature_dim)
,可選) — 輸入原始語音波形或語音特徵的浮點值。值可以透過載入 `.flac` 或 `.wav` 音訊檔案到 `list[float]` 或 `numpy.ndarray` 型別的陣列中獲得,例如透過 soundfile 庫(`pip install soundfile`)。要將陣列準備成 `inputs`,應使用 `Wav2Vec2Processor` 或 `Speech2TextProcessor` 進行填充和轉換為 `torch.FloatTensor` 型別張量。 - attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 遮罩以避免在填充標記索引上執行注意力。遮罩值在 `[0, 1]` 中選擇:- 1 表示**未被遮罩**的標記,
- 0 表示**被遮罩**的標記。
- decoder_input_ids (
torch.LongTensor
,形狀為(batch_size, target_sequence_length)
,可選) — 解碼器輸入序列中詞彙表標記的索引。索引可以使用 `PreTrainedTokenizer` 獲取。有關詳細資訊,請參見 `PreTrainedTokenizer.encode()` 和 `PreTrainedTokenizer.__call__()`。
如果使用了 `past_key_values`,可選地只需輸入最後的 `decoder_input_ids`(那些沒有將過去的鍵值狀態傳遞給此模型的)形狀為 `(batch_size, 1)`,而不是所有 `input_ids` 形狀為 `(batch_size, sequence_length)`。
對於訓練,`decoder_input_ids` 由模型透過將 `labels` 右移,用 `pad_token_id` 替換 -100,並在其前面新增 `decoder_start_token_id` 自動建立。
- decoder_attention_mask (
torch.BoolTensor
,形狀為(batch_size, target_sequence_length)
,可選) — 預設行為:生成一個忽略 `decoder_input_ids` 中填充標記的張量。預設情況下也將使用因果遮罩。 - encoder_outputs (
tuple[torch.FloatTensor]
, 可選) — 元組由(`last_hidden_state`,可選:`hidden_states`,可選:`attentions`)組成。`last_hidden_state` 的形狀為 `(batch_size, sequence_length, hidden_size)`,可選)是編碼器最後一層輸出的隱藏狀態序列。用於解碼器的交叉注意力。 - past_key_values (
tuple[tuple[torch.FloatTensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前一階段返回的 `past_key_values`,當 `use_cache=True` 或 `config.use_cache=True` 時。允許兩種格式:
- `Cache` 例項,請參閱我們的 kv 快取指南;
- 長度為 `config.n_layers` 的 `tuple(torch.FloatTensor)` 元組,每個元組包含 2 個形狀為 `(batch_size, num_heads, sequence_length, embed_size_per_head)` 的張量)。這也被稱為傳統快取格式。
模型將輸出與輸入相同的快取格式。如果未傳遞 `past_key_values`,將返回傳統快取格式。
如果使用 `past_key_values`,使用者可以選擇只輸入最後一個 `input_ids`(那些沒有將過去的鍵值狀態提供給此模型的),其形狀為 `(batch_size, 1)`,而不是所有 `input_ids` 的形狀為 `(batch_size, sequence_length)`。
- decoder_inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, target_sequence_length, hidden_size)
,可選) — 可選地,除了傳遞 `decoder_input_ids`,您也可以直接傳遞嵌入表示。如果您希望對 `decoder_input_ids` 索引轉換為相關向量的方式進行更多控制,而不是使用模型的內部嵌入查詢矩陣,這將很有用。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算解碼器掩碼語言模型損失的標籤。索引應在 `[-100, 0, ..., config.vocab_size]` 範圍內(參見 `input_ids` 文件字串)。索引設定為 `-100` 的標記將被忽略(掩碼),損失僅針對標籤在 `[0, ..., config.vocab_size]` 範圍內的標記進行計算。 - use_cache (
bool
, 可選) — 如果設定為 `True`,則返回 `past_key_values` 鍵值狀態,可用於加速解碼(參見 `past_key_values`)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的 `hidden_states`。 - input_values (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 輸入原始語音波形的浮點值。這些值可以透過載入 `.flac` 或 `.wav` 音訊檔案到 `list[float]` 或 `numpy.ndarray` 型別的陣列中獲得,例如透過 soundfile 庫(`pip install soundfile`)。要將陣列準備成 `input_values`,應使用 `Wav2Vec2Processor` 進行填充和轉換為 `torch.FloatTensor` 型別的張量。有關詳細資訊,請參見 `Wav2Vec2Processor.__call__()`。 - input_features (
torch.FloatTensor
,形狀為(batch_size, sequence_length, feature_size)
,可選) — 從原始語音波形中提取的 fbank 特徵的浮點值。原始語音波形可以透過載入 `.flac` 或 `.wav` 音訊檔案到 `list[float]` 或 `numpy.ndarray` 型別的陣列中獲得,例如透過 soundfile 庫(`pip install soundfile`)。要將陣列準備成 `input_features`,應使用 `Speech2TextFeatureExtractor` 來提取 fbank 特徵、填充並轉換為 `torch.FloatTensor` 型別的張量。請參閱 `__call__()` - return_dict (
bool
, 可選) — 是否返回 `ModelOutput` 而不是普通元組。
返回
transformers.modeling_outputs.Seq2SeqLMOutput 或 tuple(torch.FloatTensor)
一個 `transformers.modeling_outputs.Seq2SeqLMOutput` 或一個 `torch.FloatTensor` 元組(如果傳遞了 `return_dict=False` 或 `config.return_dict=False`),包含根據配置 (`SpeechEncoderDecoderConfig`) 和輸入的不同元素。
-
loss (
torch.FloatTensor
,形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
EncoderDecoderCache
, 可選, 當 `use_cache=True` 或 `config.use_cache=True` 時返回) — 這是一個 `EncoderDecoderCache` 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
decoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為 `(batch_size, sequence_length, hidden_size)`。解碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
decoder_attentions (
tuple(torch.FloatTensor)
, 可選, 當 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `torch.FloatTensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
-
cross_attentions (
tuple(torch.FloatTensor)
, 可選, 當 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `torch.FloatTensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
encoder_last_hidden_state (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 模型編碼器最後一層輸出的隱藏狀態序列。 -
encoder_hidden_states (
tuple(torch.FloatTensor)
, 可選, 當 `output_hidden_states=True` 或 `config.output_hidden_states=True` 時返回) — `torch.FloatTensor` 的元組(一個用於嵌入層的輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為 `(batch_size, sequence_length, hidden_size)`。編碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
encoder_attentions (
tuple(torch.FloatTensor)
, 可選, 當 `output_attentions=True` 或 `config.output_attentions=True` 時返回) — `torch.FloatTensor` 的元組(每層一個),形狀為 `(batch_size, num_heads, sequence_length, sequence_length)`。編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
`SpeechEncoderDecoderModel` 的前向傳播方法,覆蓋了 `__call__` 特殊方法。
儘管前向傳播的配方需要在該函式中定義,但隨後應呼叫 `Module` 例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import SpeechEncoderDecoderModel, AutoProcessor
>>> from datasets import load_dataset
>>> import torch
>>> processor = AutoProcessor.from_pretrained("facebook/wav2vec2-xls-r-300m-en-to-15")
>>> model = SpeechEncoderDecoderModel.from_pretrained("facebook/wav2vec2-xls-r-300m-en-to-15")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> input_values = processor(ds[0]["audio"]["array"], return_tensors="pt").input_values
>>> # Inference: Translate English speech to German
>>> generated = model.generate(input_values)
>>> decoded = processor.batch_decode(generated, skip_special_tokens=True)[0]
>>> decoded
'Mr. Quilter ist der Apostel der Mittelschicht und wir freuen uns, sein Evangelium willkommen heißen zu können.'
>>> # Training: Train model on English transcription
>>> labels = processor(text=ds[0]["text"], return_tensors="pt").input_ids
>>> loss = model(input_values, labels=labels).loss
>>> loss.backward()
from_encoder_decoder_pretrained
< source >( encoder_pretrained_model_name_or_path: typing.Optional[str] = None decoder_pretrained_model_name_or_path: typing.Optional[str] = None *model_args **kwargs )
引數
- encoder_pretrained_model_name_or_path (
str
, 可選) — 初始化編碼器所需的資訊。可以是以下之一:- 一個字串,是託管在 huggingface.co 上模型倉庫中的預訓練模型的模型 ID。
- 一個目錄的路徑,其中包含使用 `save_pretrained()` 儲存的模型權重,例如 `./my_model_directory/`。
- 一個tensorflow 索引檢查點檔案(例如 `./tf_model/model.ckpt.index`)的路徑或 URL。在這種情況下,`from_tf` 應設定為 `True`,並且應提供一個配置物件作為 `config` 引數。這種載入路徑比使用提供的轉換指令碼將 TensorFlow 檢查點轉換為 PyTorch 模型,然後再載入 PyTorch 模型要慢。
- decoder_pretrained_model_name_or_path (
str
, 可選, 預設為 `None`) — 初始化解碼器所需的資訊。可以是以下之一:- 一個字串,是託管在 huggingface.co 上模型倉庫中的預訓練模型的模型 ID。
- 一個目錄的路徑,其中包含使用 `save_pretrained()` 儲存的模型權重,例如 `./my_model_directory/`。
- 一個tensorflow 索引檢查點檔案(例如 `./tf_model/model.ckpt.index`)的路徑或 URL。在這種情況下,`from_tf` 應設定為 `True`,並且應提供一個配置物件作為 `config` 引數。這種載入路徑比使用提供的轉換指令碼將 TensorFlow 檢查點轉換為 PyTorch 模型,然後再載入 PyTorch 模型要慢。
- model_args (剩餘位置引數,可選) — 所有剩餘位置引數將傳遞給底層模型的 `__init__` 方法。
- kwargs (剩餘關鍵字引數字典,可選) — 可用於更新配置物件(載入後)並初始化模型(例如,`output_attentions=True`)。
- 要更新編碼器配置,請為每個配置引數使用字首 encoder_。
- 要更新解碼器配置,請為每個配置引數使用字首 decoder_。
- 要更新父模型配置,請不要為每個配置引數使用字首。
根據是否提供 `config` 或自動載入而行為不同。
從庫的一個或兩個基類例項化一個編碼器和一個解碼器,這些基類來自預訓練的模型檢查點。
模型預設使用 model.eval()
設定為評估模式(Dropout 模組已停用)。要訓練模型,您需要首先使用 model.train()
將其設定回訓練模式。
示例
>>> from transformers import SpeechEncoderDecoderModel
>>> # initialize a wav2vec2bert from a pretrained Wav2Vec2 and a pretrained BERT model. Note that the cross-attention layers will be randomly initialized
>>> model = SpeechEncoderDecoderModel.from_encoder_decoder_pretrained(
... "facebook/wav2vec2-base-960h", "google-bert/bert-base-uncased"
... )
>>> # saving model after fine-tuning
>>> model.save_pretrained("./wav2vec2bert")
>>> # load fine-tuned model
>>> model = SpeechEncoderDecoderModel.from_pretrained("./wav2vec2bert")
FlaxSpeechEncoderDecoderModel
class transformers.FlaxSpeechEncoderDecoderModel
< source >( config: SpeechEncoderDecoderConfig input_shape: typing.Optional[tuple] = None seed: int = 0 dtype: dtype = <class 'jax.numpy.float32'> _do_init: bool = True **kwargs )
引數
- config (SpeechEncoderDecoderConfig) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型關聯的權重,只會載入配置。請查閱 from_pretrained() 方法以載入模型權重。
- dtype (
jax.numpy.dtype
, 可選, 預設為jax.numpy.float32
) — 計算的資料型別。可以是jax.numpy.float32
、jax.numpy.float16
(在 GPU 上) 和jax.numpy.bfloat16
(在 TPU 上) 之一。這可用於在 GPU 或 TPU 上啟用混合精度訓練或半精度推理。如果指定,所有計算將以給定的
dtype
執行。請注意,這僅指定計算的 dtype,不影響模型引數的 dtype。
此類可用於初始化語音序列到文字序列的模型,其中任何預訓練的語音自編碼模型作為編碼器,任何預訓練的文字自迴歸模型作為解碼器。編碼器透過 from_pretrained() 函式載入,解碼器透過 from_pretrained() 函式載入。交叉注意力層會自動新增到解碼器中,並且應該在下游生成任務(如摘要)上進行微調。
Sascha Rothe、Shashi Narayan、Aliaksei Severyn、Michael Matena、Yanqi Zhou、Wei Li、Peter J. Liu 在 Leveraging Pre-trained Checkpoints for Sequence Generation Tasks 中展示了使用預訓練檢查點初始化序列到序列模型在序列生成任務中的有效性。
此外,在 Large-Scale Self- and Semi-Supervised Learning for Speech Translation 中展示瞭如何利用大型預訓練語音模型進行語音翻譯可以顯著提高效能。
此類語音編碼器-解碼器模型經過訓練/微調後,可以像任何其他模型一樣儲存/載入(更多資訊請參閱示例)。
該模型繼承自 FlaxPreTrainedModel。查閱超類文件以瞭解庫為其所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)
該模型也是 Flax Linen flax.nn.Module 的子類。將其作為常規 Flax 模組使用,並參考 Flax 文件瞭解所有與一般用法和行為相關的事項。
FlaxSpeechEncoderDecoderModel 是一個通用模型類,當使用 :meth~transformers.FlaxAutoModel.from_pretrained 類方法用於編碼器和 :meth~transformers.FlaxAutoModelForCausalLM.from_pretrained 類方法用於解碼器建立時,它將被例項化為一個 Transformer 架構,其中包含庫中一個基礎模型類的模組 (flax.nn.Module) 作為編碼器模組,另一個作為解碼器模組。
__call__
< source >( inputs: Array attention_mask: typing.Optional[jax.Array] = None decoder_input_ids: typing.Optional[jax.Array] = None decoder_attention_mask: typing.Optional[jax.Array] = None decoder_position_ids: typing.Optional[jax.Array] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None train: bool = False freeze_feature_encoder: bool = False params: typing.Optional[dict] = None dropout_rng: <function PRNGKey at 0x7effc7ad3a30> = None ) → transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput 或 tuple(torch.FloatTensor)
引數
- inputs (形狀為
(batch_size, sequence_length)
或(batch_size, sequence_length, feature_dim)
的jnp.ndarray
, 可選) — 輸入原始語音波形或語音特徵的浮點值。可以透過將.flac
或.wav
音訊檔案載入到list[float]
型別的陣列或numpy.ndarray
中來獲取這些值,例如透過 soundfile 庫(pip install soundfile
)。為了將陣列準備到inputs
中,應使用 Wav2Vec2Processor 或 Speech2TextProcessor 進行填充和轉換為torch.FloatTensor
型別的張量。 - attention_mask (形狀為
(batch_size, sequence_length)
的jnp.ndarray
, 可選) — 避免對填充標記索引執行注意力的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示**未被掩碼**的標記,
- 0 表示**被掩碼**的標記。
- decoder_input_ids (形狀為
(batch_size, target_sequence_length)
的jnp.ndarray
, 可選) — 解碼器輸入序列標記在詞彙表中的索引。索引可以使用 PreTrainedTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
如果使用
past_key_values
,可以選擇只輸入最後一個decoder_input_ids
(請參閱past_key_values
)。對於序列到序列訓練,應提供
decoder_input_ids
。decoder_input_ids
應在模型外部建立,方法是將labels
右移,將 -100 替換為pad_token_id
,並在其前面新增decoder_start_token_id
。 - decoder_attention_mask (形狀為
(batch_size, target_sequence_length)
的jnp.ndarray
, 可選) — 預設行為:生成一個忽略decoder_input_ids
中填充標記的張量。預設情況下也將使用因果掩碼。 - decoder_position_ids (形狀為
(batch_size, sequence_length)
的numpy.ndarray
, 可選) — 每個解碼器輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.decoder.max_position_embeddings - 1]
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 如果設定為True
,模型將返回一個~utils.FlaxSeq2SeqLMOutput
而不是一個普通的元組。
返回
transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput 或 tuple(torch.FloatTensor)
一個 transformers.modeling_flax_outputs.FlaxSeq2SeqLMOutput 或一個 torch.FloatTensor
元組(如果傳遞了 return_dict=False
或當 config.return_dict=False
時),包含根據配置(SpeechEncoderDecoderConfig)和輸入而異的各種元素。
-
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的jnp.ndarray
) — 語言建模頭的預測分數(SoftMax 之前每個詞彙 token 的分數)。 -
past_key_values (
tuple(tuple(jnp.ndarray))
, 可選, 當傳遞use_cache=True
或當config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(jnp.ndarray)
元組,每個元組包含兩個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量和兩個形狀為(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的額外張量。包含預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
decoder_hidden_states (
tuple(jnp.ndarray)
, 可選, 當傳遞output_hidden_states=True
或當config.output_hidden_states=True
時返回) — 形狀為(batch_size, sequence_length, hidden_size)
的jnp.ndarray
元組(一個用於嵌入輸出 + 一個用於每層輸出)。解碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
decoder_attentions (
tuple(jnp.ndarray)
, 可選, 當傳遞output_attentions=True
或當config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的jnp.ndarray
元組(每層一個)。解碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
-
cross_attentions (
tuple(jnp.ndarray)
, 可選, 當傳遞output_attentions=True
或當config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的jnp.ndarray
元組(每層一個)。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
-
encoder_last_hidden_state (形狀為
(batch_size, sequence_length, hidden_size)
的jnp.ndarray
,可選) — 模型編碼器最後一層輸出的隱藏狀態序列。 -
encoder_hidden_states (
tuple(jnp.ndarray)
, 可選, 當傳遞output_hidden_states=True
或當config.output_hidden_states=True
時返回) — 形狀為(batch_size, sequence_length, hidden_size)
的jnp.ndarray
元組(一個用於嵌入輸出 + 一個用於每層輸出)。編碼器在每一層輸出時的隱藏狀態以及初始嵌入輸出。
-
encoder_attentions (
tuple(jnp.ndarray)
, 可選, 當傳遞output_attentions=True
或當config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的jnp.ndarray
元組(每層一個)。編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。
FlaxSpeechEncoderDecoderModel 的前向方法,重寫了 __call__
特殊方法。
儘管前向傳播的配方需要在該函式中定義,但隨後應呼叫 `Module` 例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。
示例
>>> from transformers import FlaxSpeechEncoderDecoderModel, AutoTokenizer
>>> # load a fine-tuned wav2vec2-2-bart model
>>> model = FlaxSpeechEncoderDecoderModel.from_pretrained("patrickvonplaten/wav2vec2-2-bart-large")
>>> # load output tokenizer
>>> tokenizer_output = AutoTokenizer.from_pretrained("facebook/bart-large")
>>> inputs = jnp.ones((2, 5000), dtype=jnp.float32)
>>> # use bart's special bos, pad and eos tokens
>>> model.config.decoder_start_token_id = model.decoder.config.bos_token_id
>>> model.config.pad_token_id = model.decoder.config.pad_token_id
>>> model.config.eos_token_id = model.decoder.config.eos_token_id
>>> outputs = model.generate(inputs)
# Assert something? More interesting input? dtype correct?
from_encoder_decoder_pretrained
< source >( encoder_pretrained_model_name_or_path: typing.Union[str, os.PathLike, NoneType] = None decoder_pretrained_model_name_or_path: typing.Union[str, os.PathLike, NoneType] = None *model_args **kwargs )
引數
- encoder_pretrained_model_name_or_path (
Union[str, os.PathLike]
, 可選) — 初始化編碼器所需的資訊。可以是以下之一:- 一個字串,huggingface.co 上模型倉庫中預訓練模型的*模型 ID*。
- 一個目錄的路徑,該目錄包含使用 save_pretrained() 儲存的模型權重,例如
./my_model_directory/
。
- decoder_pretrained_model_name_or_path (
Union[str, os.PathLike]
, 可選, 預設為None
) — 初始化解碼器所需的資訊。可以是以下之一:- 一個字串,huggingface.co 上模型倉庫中預訓練模型的*模型 ID*。
- 一個目錄的路徑,該目錄包含使用 save_pretrained() 儲存的模型權重,例如
./my_model_directory/
。
- model_args (剩餘位置引數,可選) — 所有剩餘的位置引數將傳遞給底層模型的
__init__
方法。 - kwargs (剩餘的關鍵字引數字典,可選) — 可用於更新配置物件(載入後)並初始化模型(例如,
output_attentions=True
)。- 要更新編碼器配置,請為每個配置引數使用字首 encoder_。
- 要更新解碼器配置,請為每個配置引數使用字首 decoder_。
- 要更新父模型配置,請不要為每個配置引數使用字首。
行為因是否提供了
config
或自動載入而異。
從庫的一個或兩個基類例項化一個編碼器和一個解碼器,這些基類來自預訓練的模型檢查點。
示例
>>> from transformers import FlaxSpeechEncoderDecoderModel
>>> # initialize a wav2vec2-2-bart from pretrained wav2vec2 and bart models. Note that the cross-attention layers will be randomly initialized
>>> model = FlaxSpeechEncoderDecoderModel.from_encoder_decoder_pretrained(
... "facebook/wav2vec2-large-lv60", "facebook/bart-large"
... )
>>> # saving model after fine-tuning
>>> model.save_pretrained("./wav2vec2-2-bart-large")
>>> # load fine-tuned model
>>> model = FlaxSpeechEncoderDecoderModel.from_pretrained("./wav2vec2-2-bart-large")