Transformers 文件

Speech2Text2

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

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 是一個*僅解碼器*轉換器模型,可與任何*僅編碼器*的語音模型(例如 Wav2Vec2HuBERT)一起用於語音到文字任務。有關如何將 Speech2Text2 與任何*僅編碼器*的語音模型結合使用的資訊,請參閱 SpeechEncoderDecoder 類。

此模型由 Patrick von Platen 貢獻。

原始程式碼可在此處找到。

使用技巧

  • Speech2Text2 在 CoVoST 語音翻譯資料集上取得了最先進的結果。有關更多資訊,請參閱官方模型
  • Speech2Text2 始終在 SpeechEncoderDecoder 框架內使用。
  • Speech2Text2 的分詞器基於 fastBPE

推理

Speech2Text2 的 SpeechEncoderDecoderModel 模型接受來自語音的原始波形輸入值,並使用 generate() 自動迴歸地將輸入語音翻譯成目標語言。

Wav2Vec2FeatureExtractor 類負責預處理輸入語音,而 Speech2Text2Tokenizer 將生成的語言標記解碼為目標字串。Speech2Text2ProcessorWav2Vec2FeatureExtractorSpeech2Text2Tokenizer 封裝成一個例項,以便同時提取輸入特徵並解碼預測的標記 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 (strfunction, 可選, 預設值為 "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))

儲存詞彙表

< >

( save_directory: str filename_prefix: typing.Optional[str] = None )

Speech2Text2處理器

transformers.Speech2Text2Processor

< >

( feature_extractor tokenizer )

引數

  • feature_extractor (AutoFeatureExtractor) — AutoFeatureExtractor 例項。特徵提取器是必需輸入。
  • tokenizer (Speech2Text2Tokenizer) — Speech2Text2Tokenizer 例項。分詞器是必需輸入。

構建 Speech2Text2 處理器,它將 Speech2Text2 特徵提取器和 Speech2Text2 分詞器封裝到一個處理器中。

Speech2Text2Processor 提供 AutoFeatureExtractorSpeech2Text2Tokenizer 的所有功能。有關更多資訊,請參閱 call()decode()

__call__

< >

( *args **kwargs )

在正常模式下使用時,此方法將所有引數轉發到 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 (stros.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

< >

( save_directory push_to_hub: bool = False **kwargs )

引數

  • save_directory (stros.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()。更多資訊請參考上述方法的文件字串。

batch_decode

< >

( *args **kwargs )

此方法將其所有引數轉發給 Speech2Text2Tokenizer 的 batch_decode()。有關詳細資訊,請參閱此方法的文件字串。

解碼

< >

( *args **kwargs )

此方法將其所有引數轉發給 Speech2Text2Tokenizer 的 decode()。有關詳細資訊,請參閱此方法的文件字串。

Speech2Text2ForCausalLM

class transformers.Speech2Text2ForCausalLM

< >

( config )

引數

  • config (Speech2Text2Config) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,只會載入配置。要載入模型權重,請檢視 from_pretrained() 方法。

帶語言建模頭的 Speech2Text2 解碼器。可用作 EncoderDecoderModelSpeechEncoderDecoder 的解碼器部分。此模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等)的更多資訊,請檢視父類文件。

此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件瞭解所有與通用用法和行為相關的事項。

forward

< >

( 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.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, sequence_length)) — 詞彙表中輸入序列 token 的索引。如果提供了填充,預設情況下將被忽略。

    索引可以使用 Speech2Text2Tokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什麼是輸入 ID?

  • 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=Trueconfig.use_cache=True 時返回) — 長度為 config.n_layerstuple(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.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

一個 transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或一個 torch.FloatTensor 元組(如果傳遞 return_dict=Falseconfig.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=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 元組(一個用於嵌入層輸出,如果模型有嵌入層,+ 每個層的輸出一個),形狀為 (batch_size, sequence_length, hidden_size)

    模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。

  • attentions (tuple(torch.FloatTensor)可選,當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 元組(每個層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。

  • cross_attentions (tuple(torch.FloatTensor)可選,當傳遞 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 元組(每個層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 後的交叉注意力權重,用於計算交叉注意力頭中的加權平均。

  • past_key_values (Cache可選,當傳遞 use_cache=Trueconfig.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()
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.