Transformers 文件
Speech2Text2
並獲得增強的文件體驗
開始使用
Speech2Text2
此模型僅處於維護模式,我們不接受任何更改其程式碼的新 PR。如果您在執行此模型時遇到任何問題,請重新安裝支援此模型的最後一個版本:v4.40.2。您可以透過執行以下命令進行安裝:pip install -U transformers==4.40.2
。
概述
Speech2Text2 模型與 Wav2Vec2 一起用於 Changhan Wang、Anne Wu、Juan Pino、Alexei Baevski、Michael Auli 和 Alexis Conneau 在 大規模自監督和半監督語音翻譯學習 中提出的語音翻譯模型。
Speech2Text2 是一個*僅解碼器*轉換器模型,可與任何*僅編碼器*的語音模型(例如 Wav2Vec2 或 HuBERT)一起用於語音到文字任務。有關如何將 Speech2Text2 與任何*僅編碼器*的語音模型結合使用的資訊,請參閱 SpeechEncoderDecoder 類。
此模型由 Patrick von Platen 貢獻。
原始程式碼可在此處找到。
使用技巧
- Speech2Text2 在 CoVoST 語音翻譯資料集上取得了最先進的結果。有關更多資訊,請參閱官方模型。
- Speech2Text2 始終在 SpeechEncoderDecoder 框架內使用。
- Speech2Text2 的分詞器基於 fastBPE。
推理
Speech2Text2 的 SpeechEncoderDecoderModel 模型接受來自語音的原始波形輸入值,並使用 generate() 自動迴歸地將輸入語音翻譯成目標語言。
Wav2Vec2FeatureExtractor 類負責預處理輸入語音,而 Speech2Text2Tokenizer 將生成的語言標記解碼為目標字串。Speech2Text2Processor 將 Wav2Vec2FeatureExtractor 和 Speech2Text2Tokenizer 封裝成一個例項,以便同時提取輸入特徵並解碼預測的標記 ID。
- 語音翻譯分步指南
>>> import torch
>>> from transformers import Speech2Text2Processor, SpeechEncoderDecoderModel
>>> from datasets import load_dataset
>>> import soundfile as sf
>>> model = SpeechEncoderDecoderModel.from_pretrained("facebook/s2t-wav2vec2-large-en-de")
>>> processor = Speech2Text2Processor.from_pretrained("facebook/s2t-wav2vec2-large-en-de")
>>> def map_to_array(batch):
... speech, _ = sf.read(batch["file"])
... batch["speech"] = speech
... return batch
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> ds = ds.map(map_to_array)
>>> inputs = processor(ds["speech"][0], sampling_rate=16_000, return_tensors="pt")
>>> generated_ids = model.generate(inputs=inputs["input_values"], attention_mask=inputs["attention_mask"])
>>> transcription = processor.batch_decode(generated_ids)
透過管道進行語音翻譯
自動語音識別管道也可以僅用幾行程式碼進行語音翻譯
>>> from datasets import load_dataset
>>> from transformers import pipeline
>>> librispeech_en = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> asr = pipeline(
... "automatic-speech-recognition",
... model="facebook/s2t-wav2vec2-large-en-de",
... feature_extractor="facebook/s2t-wav2vec2-large-en-de",
... )
>>> translation_de = asr(librispeech_en[0]["file"])
請參閱模型中心查詢 Speech2Text2 檢查點。
資源
Speech2Text2Config
類 transformers.Speech2Text2Config
< 源 >( vocab_size = 10000 decoder_layers = 6 decoder_ffn_dim = 2048 decoder_attention_heads = 4 decoder_layerdrop = 0.0 use_cache = True activation_function = 'relu' d_model = 256 dropout = 0.1 attention_dropout = 0.0 activation_dropout = 0.0 init_std = 0.02 decoder_start_token_id = 2 scale_embedding = True pad_token_id = 1 bos_token_id = 0 eos_token_id = 2 max_target_positions = 1024 **kwargs )
引數
- vocab_size (
int
, 可選, 預設值為 50265) — Speech2Text 模型的詞彙量大小。定義了呼叫 Speech2TextModel 時傳入的inputs_ids
可以表示的不同標記的數量。 - d_model (
int
, 可選, 預設值為 1024) — 層和池化器層的維度。 - decoder_layers (
int
, 可選, 預設值為 12) — 解碼器層數。 - decoder_attention_heads (
int
, 可選, 預設值為 16) — Transformer 解碼器中每個注意力層的注意力頭數量。 - decoder_ffn_dim (
int
, 可選, 預設值為 4096) — 解碼器中“中間”(通常稱為前饋)層的維度。 - activation_function (
str
或function
, 可選, 預設值為"gelu"
) — 池化器中的非線性啟用函式(函式或字串)。如果是字串,支援"gelu"
、"relu"
、"silu"
和"gelu_new"
。 - dropout (
float
, 可選, 預設值為 0.1) — 嵌入和池化器中所有全連線層的 dropout 機率。 - attention_dropout (
float
, 可選, 預設值為 0.0) — 注意力機率的 dropout 比率。 - activation_dropout (
float
, 可選, 預設值為 0.0) — 全連線層內部啟用的 dropout 比率。 - init_std (
float
, 可選, 預設值為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。https://huggingface.co/papers/1909.11556>`__ 瞭解更多詳情。 - decoder_layerdrop (
float
, 可選, 預設值為 0.0) — 解碼器的 LayerDrop 機率。有關更多詳細資訊,請參閱 [LayerDrop 論文](參閱 https://huggingface.co/papers/1909.11556)。 - use_cache (
bool
, 可選, 預設值為True
) — 模型是否應返回最後一個鍵/值注意力(並非所有模型都使用)。 - max_target_positions (
int
, 可選, 預設值為 1024) — 該模型可能使用的最大序列長度。通常情況下,將其設定為較大的值以防萬一(例如 512 或 1024 或 2048)。
這是用於儲存 Speech2Text2ForCausalLM 配置的配置類。它用於根據指定引數例項化 Speech2Text2 模型,定義模型架構。使用預設值例項化配置將生成與 Speech2Text2 facebook/s2t-wav2vec2-large-en-de 架構相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。
示例
>>> from transformers import Speech2Text2Config, Speech2Text2ForCausalLM
>>> # Initializing a Speech2Text2 s2t_transformer_s style configuration
>>> configuration = Speech2Text2Config()
>>> # Initializing a model (with random weights) from the s2t_transformer_s style configuration
>>> model = Speech2Text2ForCausalLM(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
Speech2Text 分詞器
類 transformers.Speech2Text2Tokenizer
< 源 >( vocab_file bos_token = '<s>' pad_token = '<pad>' eos_token = '</s>' unk_token = '<unk>' do_lower_case = False merges_file = None **kwargs )
引數
- vocab_file (
str
) — 包含詞彙表的檔案。 - bos_token (
str
, 可選, 預設值為"<s>"
) — 句子起始標記。 - eos_token (
str
, 可選, 預設值為"</s>"
) — 句子結束標記。 - unk_token (
str
, 可選, 預設值為"<unk>"
) — 未知標記。不在詞彙表中的標記不能轉換為 ID,而是設定為此標記。 - pad_token (
str
, 可選, 預設值為"<pad>"
) — 用於填充的標記,例如在對不同長度的序列進行批處理時。 - **kwargs — 傳遞給 PreTrainedTokenizer 的其他關鍵字引數。
構造 Speech2Text2Tokenizer。
此分詞器繼承自 PreTrainedTokenizer,其中包含一些主要方法。使用者應參閱超類以獲取有關此類方法的更多資訊。
batch_decode
< 源 >( sequences: typing.Union[list[int], list[list[int]], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None **kwargs ) → list[str]
引數
- sequences (
Union[list[int], list[list[int]], np.ndarray, torch.Tensor, tf.Tensor]
) — 標記化輸入 ID 列表。可以使用__call__
方法獲取。 - skip_special_tokens (
bool
, 可選, 預設值為False
) — 是否在解碼中移除特殊標記。 - clean_up_tokenization_spaces (
bool
, 可選) — 是否清理分詞空間。如果為None
,將預設為self.clean_up_tokenization_spaces
。 - kwargs (附加關鍵字引數,可選) — 將傳遞給底層模型特定解碼方法。
返回
list[str]
解碼後的句子列表。
透過呼叫 decode 將標記 ID 列表的列表轉換為字串列表。
解碼
< 源 >( token_ids: typing.Union[int, list[int], ForwardRef('np.ndarray'), ForwardRef('torch.Tensor'), ForwardRef('tf.Tensor')] skip_special_tokens: bool = False clean_up_tokenization_spaces: typing.Optional[bool] = None **kwargs ) → str
引數
- token_ids (
Union[int, list[int], np.ndarray, torch.Tensor, tf.Tensor]
) — 標記化輸入 ID 列表。可以使用__call__
方法獲取。 - skip_special_tokens (
bool
, 可選, 預設值為False
) — 是否在解碼中移除特殊標記。 - clean_up_tokenization_spaces (
bool
, 可選) — 是否清理分詞空間。如果為None
,將預設為self.clean_up_tokenization_spaces
。 - kwargs (附加關鍵字引數,可選) — 將傳遞給底層模型特定解碼方法。
返回
字串
解碼後的句子。
使用分詞器和詞彙表將 ID 序列轉換為字串,可以選擇移除特殊標記並清理分詞空間。
類似於執行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))
。
Speech2Text2處理器
類 transformers.Speech2Text2Processor
< 源 >( feature_extractor tokenizer )
引數
- feature_extractor (
AutoFeatureExtractor
) — AutoFeatureExtractor 例項。特徵提取器是必需輸入。 - tokenizer (
Speech2Text2Tokenizer
) — Speech2Text2Tokenizer 例項。分詞器是必需輸入。
構建 Speech2Text2 處理器,它將 Speech2Text2 特徵提取器和 Speech2Text2 分詞器封裝到一個處理器中。
Speech2Text2Processor 提供 AutoFeatureExtractor 和 Speech2Text2Tokenizer 的所有功能。有關更多資訊,請參閱 call() 和 decode()。
在正常模式下使用時,此方法將所有引數轉發到 AutoFeatureExtractor 的 __call__()
並返回其輸出。如果在 as_target_processor()
上下文中使用,此方法會將所有引數轉發到 Speech2Text2Tokenizer 的 call()。有關更多資訊,請參閱上述兩種方法的文件字串。
from_pretrained
< 源 >( pretrained_model_name_or_path: typing.Union[str, os.PathLike] cache_dir: typing.Union[str, os.PathLike, NoneType] = None force_download: bool = False local_files_only: bool = False token: typing.Union[str, bool, NoneType] = None revision: str = 'main' **kwargs )
引數
- pretrained_model_name_or_path (
str
或os.PathLike
) — 這可以是以下之一:- 一個字串,託管在 huggingface.co 模型倉庫中的預訓練 feature_extractor 的模型 ID。
- 一個目錄路徑,包含使用 save_pretrained() 方法儲存的特徵提取器檔案,例如
./my_model_directory/
。 - 一個儲存的特徵提取器 JSON 檔案的路徑或 URL,例如
./my_model_directory/preprocessor_config.json
。
- **kwargs — 額外關鍵字引數,傳遞給 from_pretrained() 和
~tokenization_utils_base.PreTrainedTokenizer.from_pretrained
。
例項化與預訓練模型關聯的處理器。
此方法僅呼叫特徵提取器 from_pretrained()、影像處理器 ImageProcessingMixin 和分詞器 ~tokenization_utils_base.PreTrainedTokenizer.from_pretrained
方法。更多資訊請參考上述方法的文件字串。
save_pretrained
< source >( save_directory push_to_hub: bool = False **kwargs )
引數
- save_directory (
str
或os.PathLike
) — 特徵提取器 JSON 檔案和分詞器檔案將儲存的目錄(如果目錄不存在則會建立)。 - push_to_hub (
bool
, 可選, 預設為False
) — 是否在儲存模型後將其推送到 Hugging Face 模型中心。你可以使用repo_id
指定要推送到的倉庫(預設為你名稱空間中save_directory
的名稱)。 - kwargs (
dict[str, Any]
, 可選) — 傳遞給 push_to_hub() 方法的額外關鍵字引數。
將此處理器(特徵提取器、分詞器等)的屬性儲存在指定目錄中,以便可以使用 from_pretrained() 方法重新載入。
此方法僅呼叫 save_pretrained() 和 save_pretrained()。更多資訊請參考上述方法的文件字串。
此方法將其所有引數轉發給 Speech2Text2Tokenizer 的 batch_decode()。有關詳細資訊,請參閱此方法的文件字串。
此方法將其所有引數轉發給 Speech2Text2Tokenizer 的 decode()。有關詳細資訊,請參閱此方法的文件字串。
Speech2Text2ForCausalLM
class transformers.Speech2Text2ForCausalLM
< source >( config )
引數
- config (Speech2Text2Config) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視 from_pretrained() 方法。
帶語言建模頭的 Speech2Text2 解碼器。可用作 EncoderDecoderModel 和 SpeechEncoderDecoder
的解碼器部分。此模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請檢視父類文件。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.FloatTensor] = None encoder_attention_mask: typing.Optional[torch.FloatTensor] = None head_mask: typing.Optional[torch.Tensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.FloatTensor]]] = None 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 return_dict: typing.Optional[bool] = None ) → transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列 token 的索引。如果提供了填充,預設情況下將被忽略。索引可以使用 Speech2Text2Tokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 遮罩,用於避免在填充 token 索引上執行注意力。遮罩值在[0, 1]
中選擇:- 1 表示 token 未被遮罩,
- 0 表示 token 被遮罩。
- encoder_hidden_states (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型被配置為解碼器,則用於交叉注意力。 - encoder_attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 遮罩,用於避免在編碼器輸入填充 token 索引上執行注意力。如果模型被配置為解碼器,則此遮罩用於交叉注意力。遮罩值在[0, 1]
中選擇: - head_mask (
torch.Tensor
,形狀為(decoder_layers, decoder_attention_heads)
,可選) — 遮罩,用於將注意力模組中選定的頭部置空。遮罩值在[0, 1]
中選擇:- 1 表示頭部未被遮罩,
- 0 表示頭部被遮罩。
- cross_attn_head_mask (
torch.Tensor
,形狀為(decoder_layers, decoder_attention_heads)
,可選) — 遮罩,用於將交叉注意力模組中選定的頭部置空。遮罩值在[0, 1]
中選擇:- 1 表示頭部未被遮罩,
- 0 表示頭部被遮罩。
- past_key_values (
tuple(tuple(torch.FloatTensor))
,可選,當傳遞use_cache=True
或config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量,以及 2 個額外的形狀為(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的張量。只有當模型在序列到序列模型中用作解碼器時,才需要這兩個額外的張量。包含預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。如果使用
past_key_values
,使用者可以選擇僅輸入最後一個decoder_input_ids
(那些沒有將其過去鍵值狀態提供給此模型的)形狀為(batch_size, 1)
,而不是所有decoder_input_ids
形狀為(batch_size, sequence_length)
。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算遮罩語言建模損失的標籤。索引應在[0, ..., config.vocab_size]
或 -100 中(參見input_ids
文件字串)。索引設定為-100
的 token 將被忽略(遮罩),損失僅針對標籤在[0, ..., config.vocab_size]
中的 token 計算。 - use_cache (
bool
,可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。- 1 表示 token 未被遮罩,
- 0 表示 token 被遮罩。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或一個 torch.FloatTensor
元組(如果傳遞 return_dict=False
或 config.return_dict=False
),包含根據配置 (Speech2Text2Config) 和輸入而定的各種元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳遞output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
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 後的交叉注意力權重,用於計算交叉注意力頭中的加權平均。
-
past_key_values (
Cache
,可選,當傳遞use_cache=True
或config.use_cache=True
時返回) — 它是 Cache 例項。有關更多詳細資訊,請參閱我們的 kv cache 指南。包含預先計算的隱藏狀態(注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。
示例
>>> from transformers import (
... SpeechEncoderDecoderModel,
... Speech2Text2ForCausalLM,
... Wav2Vec2Model,
... Speech2Text2Config,
... Wav2Vec2Config,
... Wav2Vec2FeatureExtractor,
... Speech2Text2Tokenizer,
... )
>>> from datasets import load_dataset
>>> feature_extractor = Wav2Vec2FeatureExtractor()
>>> tokenizer = Speech2Text2Tokenizer.from_pretrained("facebook/s2t-wav2vec2-large-en-de")
>>> encoder = Wav2Vec2Model(Wav2Vec2Config())
>>> decoder = Speech2Text2ForCausalLM(Speech2Text2Config())
>>> # init random speech2text model
>>> model = SpeechEncoderDecoderModel(encoder=encoder, decoder=decoder)
>>> model.config.pad_token_id = tokenizer.pad_token_id
>>> model.config.decoder_start_token_id = tokenizer.bos_token_id
>>> # pre-process inputs and labels
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = feature_extractor(
... ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], return_tensors="pt"
... )
>>> input_values = inputs.input_values
>>> decoder_input_ids = tokenizer(ds[0]["text"], return_tensors="pt").input_ids
>>> # compute loss
>>> loss = model(inputs=input_values, labels=decoder_input_ids).loss
>>> # backprop loss
>>> loss.backward()