Transformers 4.37 中文文档(七十九)(2)https://developer.aliyun.com/article/1564171
Wav2Vec2
原始文本:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/wav2vec2
概述
Wav2Vec2 模型是由 Alexei Baevski、Henry Zhou、Abdelrahman Mohamed、Michael Auli 在wav2vec 2.0:自监督学习语音表示的框架中提出的。
论文摘要如下:
我们首次展示,仅通过从语音音频中学习强大的表示,然后在转录的语音上进行微调,可以胜过最佳的半监督方法,同时在概念上更简单。wav2vec 2.0 在潜在空间中屏蔽语音输入,并解决了一个在联合学习的潜在表示的量化上定义的对比任务。使用 Librispeech 的所有标记数据进行的实验在干净/其他测试集上实现了 1.8/3.3 的 WER。当将标记数据量降低到一小时时,wav2vec 2.0 在 100 小时子集上胜过了先前的最先进技术,同时使用的标记数据量减少了 100 倍。仅使用十分钟的标记数据并在 53k 小时的未标记数据上进行预训练仍然实现了 4.8/8.2 的 WER。这证明了在有限的标记数据量下进行语音识别的可行性。
此模型由patrickvonplaten贡献。
使用提示
- Wav2Vec2 是一个接受与语音信号的原始波形对应的浮点数组的语音模型。
- Wav2Vec2 模型是使用连接主义时间分类(CTC)进行训练的,因此模型输出必须使用 Wav2Vec2CTCTokenizer 进行解码。
资源
一份官方 Hugging Face 和社区(由🌎表示)资源列表,可帮助您开始使用 Wav2Vec2。如果您有兴趣提交资源以包含在此处,请随时打开 Pull Request,我们将进行审查!资源应该理想地展示一些新内容,而不是重复现有资源。
音频分类
- 一个关于如何利用预训练的 Wav2Vec2 模型进行情感分类的笔记本。🌎
- Wav2Vec2ForCTC 受到这个示例脚本和笔记本的支持。
- 音频分类任务指南
自动语音识别
- 一篇关于在🤗 Transformers 中使用 n-grams 增强 Wav2Vec2 的博客文章。
- 一篇关于如何使用🤗 Transformers 对英语 ASR 进行微调的博客文章。
- 一篇关于使用🤗 Transformers 对多语言 ASR 进行微调的博客文章。
- 一个关于如何通过使用 Wav2Vec2 转录音频从任何视频创建 YouTube 字幕的笔记本。🌎
- Wav2Vec2ForCTC 受到一篇关于如何在英语中微调语音识别模型的笔记本和如何在任何语言中微调语音识别模型的笔记本的支持。
- 自动语音识别任务指南
🚀 部署
Wav2Vec2Config
class transformers.Wav2Vec2Config
( vocab_size = 32 hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout = 0.1 activation_dropout = 0.1 attention_dropout = 0.1 feat_proj_dropout = 0.0 feat_quantizer_dropout = 0.0 final_dropout = 0.1 layerdrop = 0.1 initializer_range = 0.02 layer_norm_eps = 1e-05 feat_extract_norm = 'group' feat_extract_activation = 'gelu' conv_dim = (512, 512, 512, 512, 512, 512, 512) conv_stride = (5, 2, 2, 2, 2, 2, 2) conv_kernel = (10, 3, 3, 3, 3, 2, 2) conv_bias = False num_conv_pos_embeddings = 128 num_conv_pos_embedding_groups = 16 do_stable_layer_norm = False apply_spec_augment = True mask_time_prob = 0.05 mask_time_length = 10 mask_time_min_masks = 2 mask_feature_prob = 0.0 mask_feature_length = 10 mask_feature_min_masks = 0 num_codevectors_per_group = 320 num_codevector_groups = 2 contrastive_logits_temperature = 0.1 num_negatives = 100 codevector_dim = 256 proj_codevector_dim = 256 diversity_loss_weight = 0.1 ctc_loss_reduction = 'sum' ctc_zero_infinity = False use_weighted_layer_sum = False classifier_proj_size = 256 tdnn_dim = (512, 512, 512, 512, 1500) tdnn_kernel = (5, 3, 3, 1, 1) tdnn_dilation = (1, 2, 3, 1, 1) xvector_output_dim = 512 pad_token_id = 0 bos_token_id = 1 eos_token_id = 2 add_adapter = False adapter_kernel_size = 3 adapter_stride = 2 num_adapter_layers = 3 output_hidden_size = None adapter_attn_dim = None **kwargs )
参数
vocab_size
(int
, optional, defaults to 32) — Wav2Vec2 模型的词汇表大小。定义了在调用 Wav2Vec2Model 或 TFWav2Vec2Model 时可以表示的不同标记数量。模型的词汇表大小。定义了在调用 Wav2Vec2Model 的 forward 方法时可以表示的不同标记数量。hidden_size
(int
, optional, defaults to 768) — 编码器层和池化器层的维度。num_hidden_layers
(int
, optional, defaults to 12) — Transformer 编码器中的隐藏层数量。num_attention_heads
(int
, optional, defaults to 12) — Transformer 编码器中每个注意力层的注意力头数。intermediate_size
(int
, optional, defaults to 3072) — Transformer 编码器中“中间”(即前馈)层的维度。hidden_act
(str
orfunction
, optional, defaults to"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。hidden_dropout
(float
, optional, defaults to 0.1) — 嵌入层、编码器和池化器中所有完全连接层的 dropout 概率。activation_dropout
(float
, optional, defaults to 0.1) — 完全连接层内激活的 dropout 比率。attention_dropout
(float
, optional, defaults to 0.1) — 注意力概率的 dropout 比率。final_dropout
(float
, optional, defaults to 0.1) — Wav2Vec2ForCTC 最终投影层的 dropout 概率。layerdrop
(float
, optional, defaults to 0.1) — LayerDrop 概率。有关更多详细信息,请参阅 LayerDrop 论文)。initializer_range
(float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。layer_norm_eps
(float
, optional, defaults to 1e-12) — 层归一化层使用的 epsilon。feat_extract_norm
(str
, optional, defaults to"group"
) — 应用于特征编码器中 1D 卷积层的规范化。"group"
表示仅对第一个 1D 卷积层进行组归一化,"layer"
表示对所有 1D 卷积层进行层归一化。feat_proj_dropout
(float
, optional, defaults to 0.0) — 特征编码器输出的 dropout 概率。feat_extract_activation
(str,
optional, defaults to
“gelu”) -- 特征提取器中 1D 卷积层的非线性激活函数(函数或字符串)。如果是字符串,支持
“gelu”、
“relu”、
“selu”和
“gelu_new”`。feat_quantizer_dropout
(float
, optional, defaults to 0.0) — 量化特征编码器状态的 dropout 概率。conv_dim
(Tuple[int]
orList[int]
, optional, defaults to(512, 512, 512, 512, 512, 512, 512)
) — 一个整数元组,定义特征编码器中每个 1D 卷积层的输入和输出通道数。conv_dim的长度定义了 1D 卷积层的数量。conv_stride
(Tuple[int]
orList[int]
, optional, defaults to(5, 2, 2, 2, 2, 2, 2)
) — 在特征编码器中每个 1D 卷积层的步幅的整数元组。conv_stride的长度定义了卷积层的数量,并且必须与conv_dim的长度匹配。conv_kernel
(Tuple[int]
orList[int]
, optional, defaults to(10, 3, 3, 3, 3, 3, 3)
) — 在特征编码器中每个 1D 卷积层的卷积核大小的整数元组。conv_kernel的长度定义了卷积层的数量,并且必须与conv_dim的长度匹配。conv_bias
(bool
, optional, defaults toFalse
) — 1D 卷积层是否具有偏置。num_conv_pos_embeddings
(int
, optional, defaults to 128) — 卷积位置嵌入的数量。定义了 1D 卷积位置嵌入层的卷积核大小。num_conv_pos_embedding_groups
(int
, optional, defaults to 16) — 1D 卷积位置嵌入层的组数。do_stable_layer_norm
(bool
, optional, defaults toFalse
) — 是否应用 Transformer 编码器的stable层归一化架构。do_stable_layer_norm 为 True
表示在注意力层之前应用层归一化,而do_stable_layer_norm 为 False
表示在注意力层之后应用层归一化。apply_spec_augment
(bool
, optional, defaults toTrue
) — 是否将SpecAugment数据增强应用于特征编码器的输出。有关详细信息,请参阅SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition。mask_time_prob
(float
, optional, defaults to 0.05) — 沿时间轴的所有特征向量中将被掩盖的百分比(介于 0 和 1 之间)。掩码过程在轴上生成”mask_time_problen(time_axis)/mask_time_length”个独立的掩码。如果从每个特征向量被选择为掩盖的向量跨度起始的概率推理, mask_time_prob *应为prob_vector_start*mask_time_length
。请注意,重叠可能会降低实际掩盖向量的百分比。仅在apply_spec_augment 为 True
时相关。mask_time_length
(int
, optional, defaults to 10) — 沿时间轴的向量跨度长度。mask_time_min_masks
(int
, optional, defaults to 2), — 沿时间轴生成的长度为mask_feature_length
的最小掩码数量,每个时间步,与mask_feature_prob
无关。仅在”mask_time_prob*len(time_axis)/mask_time_length < mask_time_min_masks”时相关mask_feature_prob
(float
, optional, defaults to 0.0) — 沿特征轴的所有特征向量中将被掩盖的百分比(介于 0 和 1 之间)。掩码过程在轴上生成”mask_feature_problen(feature_axis)/mask_time_length”个独立的掩码。如果从每个特征向量被选择为掩盖的向量跨度起始的概率推理, mask_feature_prob *应为prob_vector_start*mask_feature_length
。请注意,重叠可能会降低实际掩盖向量的百分比。仅在apply_spec_augment 为 True
时相关。mask_feature_length
(int
, optional, defaults to 10) — 沿特征轴的向量跨度长度。mask_feature_min_masks
(int
, optional, defaults to 0), — 沿特征轴生成的长度为mask_feature_length
的最小掩码数量,每个时间步,与mask_feature_prob
无关。仅在”mask_feature_prob*len(feature_axis)/mask_feature_length < mask_feature_min_masks”时相关num_codevectors_per_group
(int
, optional, defaults to 320) — 每个量化码书(组)中的条目数。num_codevector_groups
(int
, optional, defaults to 2) — 产品码矢量量化的码矢量组数。contrastive_logits_temperature
(float
, 可选, 默认为 0.1) — 对比损失中的温度 kappa。feat_quantizer_dropout
(float
, 可选, 默认为 0.0) — 用于量化器使用的特征编码器输出的丢弃概率。num_negatives
(int
, 可选, 默认为 100) — 对比损失的负样本数量。codevector_dim
(int
, 可选, 默认为 256) — 量化特征向量的维度。proj_codevector_dim
(int
, 可选, 默认为 256) — 最终投影的维度,包括量化特征和变换器特征。diversity_loss_weight
(int
, 可选, 默认为 0.1) — 代码本多样性损失组件的权重。ctc_loss_reduction
(str
, 可选, 默认为"sum"
) — 指定应用于torch.nn.CTCLoss
输出的减少方式。仅在训练 Wav2Vec2ForCTC 实例时相关。ctc_zero_infinity
(bool
, 可选, 默认为False
) — 是否将torch.nn.CTCLoss
的无限损失和相关梯度置零。当输入太短无法与目标对齐时,主要会出现无限损失。仅在训练 Wav2Vec2ForCTC 实例时相关。use_weighted_layer_sum
(bool
, 可选, 默认为False
) — 是否使用具有学习权重的层输出的加权平均。仅在使用 Wav2Vec2ForSequenceClassification 实例时相关。classifier_proj_size
(int
, 可选, 默认为 256) — 用于分类的令牌均值池化之前的投影维度。tdnn_dim
(Tuple[int]
或List[int]
, 可选, 默认为(512, 512, 512, 512, 1500)
) — 一个整数元组,定义了 XVector 模型中 TDNN 模块中每个一维卷积层的输出通道数。tdnn_dim 的长度定义了 TDNN 层的数量。tdnn_kernel
(Tuple[int]
或List[int]
, 可选, 默认为(5, 3, 3, 1, 1)
) — 一个整数元组,定义了 XVector 模型中 TDNN 模块中每个一维卷积层的内核大小。tdnn_kernel 的长度必须与 tdnn_dim 的长度相匹配。tdnn_dilation
(Tuple[int]
或List[int]
, 可选, 默认为(1, 2, 3, 1, 1)
) — 一个整数元组,定义了 XVector 模型中 TDNN 模块中每个一维卷积层的膨胀因子。tdnn_dilation 的长度必须与 tdnn_dim 的长度相匹配。xvector_output_dim
(int
, 可选, 默认为 512) — XVector 嵌入向量的维度。add_adapter
(bool
, 可选, 默认为False
) — 是否在 Wav2Vec2 编码器顶部堆叠卷积网络。对于 Warm-starting Wav2Vec2 for SpeechEncoderDecoder 模型非常有用。adapter_kernel_size
(int
, 可选, 默认为 3) — 适配器网络中卷积层的内核大小。仅在add_adapter
为 True 时相关。adapter_stride
(int
, 可选, 默认为 2) — 适配器网络中卷积层的步幅。仅在add_adapter
为 True 时相关。num_adapter_layers
(int
, 可选, 默认为 3) — 适配器网络中应使用的卷积层数量。仅在add_adapter
为 True 时相关。adapter_attn_dim
(int
, 可选) — 每个注意力块中要使用的注意力适配器权重的维度。使用注意力适配器的模型示例是 facebook/mms-1b-all。output_hidden_size
(int
, 可选) — 编码器输出层的维度。如果未定义,则默认为 hidden-size。仅在add_adapter
为 True 时相关。
这是用于存储 Wav2Vec2Model 配置的配置类。它用于根据指定的参数实例化 Wav2Vec2 模型,定义模型架构。使用默认值实例化配置将产生类似于 Wav2Vec2 facebook/wav2vec2-base-960h 架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读来自 PretrainedConfig 的文档以获取更多信息。
示例:
>>> from transformers import Wav2Vec2Config, Wav2Vec2Model >>> # Initializing a Wav2Vec2 facebook/wav2vec2-base-960h style configuration >>> configuration = Wav2Vec2Config() >>> # Initializing a model (with random weights) from the facebook/wav2vec2-base-960h style configuration >>> model = Wav2Vec2Model(configuration) >>> # Accessing the model configuration >>> configuration = model.config
Wav2Vec2CTCTokenizer
class transformers.Wav2Vec2CTCTokenizer
( vocab_file bos_token = '<s>' eos_token = '</s>' unk_token = '<unk>' pad_token = '<pad>' word_delimiter_token = '|' replace_word_delimiter_char = ' ' do_lower_case = False target_lang = None **kwargs )
参数
vocab_file
(str
) — 包含词汇表的文件。bos_token
(str
, 可选, 默认为"
") — 句子开头标记。eos_token
(str
, 可选, 默认为"
"
) — 句子结束标记。unk_token
(str
, 可选, 默认为""
) — 未知标记。词汇表中不存在的标记无法转换为 ID,而是设置为此标记。pad_token
(str
, 可选, 默认为""
) — 用于填充的标记,例如在批处理不同长度的序列时使用。word_delimiter_token
(str
, 可选, 默认为"|"
) — 用于定义单词结尾的标记。do_lower_case
(bool
, 可选, 默认为False
) — 是否接受小写输入并在解码时将输出转换为小写。target_lang
(str
, 可选) — 分词器应默认设置的目标语言。对于多语言、嵌套词汇表,如 facebook/mms-1b-all,必须定义target_lang
。
**kwargs — 传递给 PreTrainedTokenizer 的额外关键字参数
构建一个 Wav2Vec2CTC 分词器。
这个分词器继承自 PreTrainedTokenizer,其中包含一些主要方法。用户应参考超类以获取有关这些方法的更多信息。
__call__
( text: Union = None text_pair: Union = None text_target: Union = None text_pair_target: Union = None add_special_tokens: bool = True padding: Union = False truncation: Union = None max_length: Optional = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: Optional = None return_tensors: Union = None return_token_type_ids: Optional = None return_attention_mask: Optional = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) → export const metadata = 'undefined';BatchEncoding
参数
text
(str
,List[str]
,List[List[str]]
, 可选) — 要编码的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果提供的序列是字符串列表(预分词),必须设置is_split_into_words=True
(以消除与批处理序列的歧义)。text_pair
(str
,List[str]
,List[List[str]]
, 可选) — 要编码的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果提供的序列是字符串列表(预分词),必须设置is_split_into_words=True
(以消除与批处理序列的歧义)。text_target
(str
,List[str]
,List[List[str]]
, 可选) — 要编码为目标文本的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果提供的序列是字符串列表(预分词),必须设置is_split_into_words=True
(以消除与批处理序列的歧义)。text_pair_target
(str
,List[str]
,List[List[str]]
, optional) — 要编码为目标文本的序列或批量序列。每个序列可以是一个字符串或一个字符串列表(预先标记化的字符串)。如果序列以字符串列表(预先标记化)的形式提供,则必须设置is_split_into_words=True
(以消除批量序列的歧义)。add_special_tokens
(bool
, optional, 默认为True
) — 在编码序列时是否添加特殊标记。这将使用底层的PretrainedTokenizerBase.build_inputs_with_special_tokens
函数,该函数定义了自动添加到输入 id 的标记。如果要自动添加bos
或eos
标记,则这很有用。padding
(bool
,str
或 PaddingStrategy, optional, 默认为False
) — 激活和控制填充。接受以下值:
True
或'longest'
:填充到批量中最长的序列(如果只提供单个序列,则不填充)。'max_length'
:填充到由参数max_length
指定的最大长度,或者填充到模型的最大可接受输入长度(如果未提供该参数)。False
或'do_not_pad'
(默认):不填充(即,可以输出长度不同的序列批次)。
truncation
(bool
,str
或 TruncationStrategy, optional, 默认为False
) — 激活和控制截断。接受以下值:
True
或'longest_first'
:截断到由参数max_length
指定的最大长度,或者截断到模型的最大可接受输入长度(如果未提供该参数)。如果提供了一对序列(或一批对),则将逐标记截断,从一对序列中最长的序列中删除一个标记。'only_first'
:截断到由参数max_length
指定的最大长度,或者截断到模型的最大可接受输入长度(如果未提供该参数)。如果提供了一对序列(或一批对),则只会截断第一个序列。'only_second'
:截断到由参数max_length
指定的最大长度,或者截断到模型的最大可接受输入长度(如果未提供该参数)。如果提供了一对序列(或一批对),则只会截断第二个序列。False
或'do_not_truncate'
(默认):不截断(即,可以输出长度大于模型最大可接受输入大小的序列批次)。
max_length
(int
, optional) — 控制截断/填充参数之一使用的最大长度。
如果未设置或设置为None
,则将使用预定义的模型最大长度(如果截断/填充参数之一需要最大长度)。如果模型没有特定的最大输入长度(如 XLNet),则将禁用截断/填充到最大长度。stride
(int
, optional, 默认为 0) — 如果与max_length
一起设置为一个数字,则当return_overflowing_tokens=True
时返回的溢出标记将包含从截断序列末尾返回的一些标记,以提供截断和溢出序列之间的一些重叠。该参数的值定义了重叠标记的数量。is_split_into_words
(bool
, optional, 默认为False
) — 输入是否已经预标记化(例如,已分割为单词)。如果设置为True
,则分词器会假定输入已经分割为单词(例如,通过在空格上分割),然后对其进行标记化。这对于命名实体识别或标记分类很有用。pad_to_multiple_of
(int
, 可选) — 如果设置,将序列填充到提供的值的倍数。需要激活padding
。这对于在具有计算能力>= 7.5
(Volta)的 NVIDIA 硬件上启用 Tensor Cores 特别有用。return_tensors
(str
或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:
'tf'
: 返回 TensorFlowtf.constant
对象。'pt'
: 返回 PyTorchtorch.Tensor
对象。'np'
: 返回 Numpynp.ndarray
对象。
return_token_type_ids
(bool
, 可选) — 是否返回 token type IDs。如果保持默认设置,将根据特定标记化器的默认值返回 token type IDs,由return_outputs
属性定义。
什么是 token type IDs?return_attention_mask
(bool
, 可选) — 是否返回注意力掩码。如果保持默认设置,将根据特定标记化器的默认值返回注意力掩码,由return_outputs
属性定义。
什么是 attention masks?return_overflowing_tokens
(bool
, 可选, 默认为False
) — 是否返回溢出的 token 序列。如果提供了一对输入 id 序列(或一批对)并且truncation_strategy = longest_first
或True
,则会引发错误,而不是返回溢出的 tokens。return_special_tokens_mask
(bool
, 可选, 默认为False
) — 是否返回特殊 token 掩码信息。return_offsets_mapping
(bool
, 可选, 默认为False
) — 是否返回每个 token 的(char_start, char_end)
。
这仅适用于继承自 PreTrainedTokenizerFast 的快速标记化器,如果使用 Python 的标记化器,此方法将引发NotImplementedError
。return_length
(bool
, 可选, 默认为False
) — 是否返回编码输入的长度。verbose
(bool
, 可选, 默认为True
) — 是否打印更多信息和警告。**kwargs — 传递给self.tokenize()
方法
返回
BatchEncoding
一个具有以下字段的 BatchEncoding:
input_ids
— 要提供给模型的 token id 列表。
什么是 input IDs?token_type_ids
— 要提供给模型的 token type ids 列表(当return_token_type_ids=True
或*token_type_ids
*在self.model_input_names
中时)。
什么是 token type IDs?attention_mask
— 指定哪些 token 应该被模型关注的索引列表(当return_attention_mask=True
或*attention_mask
*在self.model_input_names
中时)。
什么是 attention masks?overflowing_tokens
— 溢出的 token 序列列表(当指定了max_length
并且return_overflowing_tokens=True
时)。num_truncated_tokens
— 被截断的 token 数量(当指定了max_length
并且return_overflowing_tokens=True
时)。special_tokens_mask
— 由 0 和 1 组成的列表,其中 1 指定添加的特殊 token,0 指定常规序列 token(当add_special_tokens=True
且return_special_tokens_mask=True
时)。length
— 输入的长度(当return_length=True
时)
将主要方法标记化并为模型准备一个或多个序列或一个或多个序列对。
save_vocabulary
( save_directory: str filename_prefix: Optional = None )
decode
( token_ids: Union skip_special_tokens: bool = False clean_up_tokenization_spaces: bool = None output_char_offsets: bool = False output_word_offsets: bool = False **kwargs ) → export const metadata = 'undefined';str or Wav2Vec2CTCTokenizerOutput
参数
token_ids
(Union[int, List[int], np.ndarray, torch.Tensor, tf.Tensor]
) — 分词后的输入 id 列表。可以使用__call__
方法获得。skip_special_tokens
(bool
,可选,默认为False
) — 是否在解码中删除特殊标记。clean_up_tokenization_spaces
(bool
,可选) — 是否清理分词空格。output_char_offsets
(bool
,可选,默认为False
) — 是否输出字符偏移量。字符偏移量可以与采样率和模型下采样率结合使用,计算转录字符的时间戳。
请查看下面的示例,以更好地理解如何使用output_char_offsets
。output_word_offsets
(bool
,可选,默认为False
) — 是否输出单词偏移量。单词偏移量可以与采样率和模型下采样率结合使用,计算转录单词的时间戳。
请查看下面的示例,以更好地理解如何使用output_word_offsets
。kwargs
(其他关键字参数,可选) — 将传递给底层模型特定的解码方法。
返回
str
或Wav2Vec2CTCTokenizerOutput
解码后的句子列表。当output_char_offsets == True
或output_word_offsets == True
时,将是Wav2Vec2CTCTokenizerOutput
。
将一系列 id 转换为字符串,使用分词器和词汇表,可以选择删除特殊标记并清理分词空格。
类似于执行self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))
。
示例:
>>> # Let's see how to retrieve time steps for a model >>> from transformers import AutoTokenizer, AutoFeatureExtractor, AutoModelForCTC >>> from datasets import load_dataset >>> import datasets >>> import torch >>> # import model, feature extractor, tokenizer >>> model = AutoModelForCTC.from_pretrained("facebook/wav2vec2-base-960h") >>> tokenizer = AutoTokenizer.from_pretrained("facebook/wav2vec2-base-960h") >>> feature_extractor = AutoFeatureExtractor.from_pretrained("facebook/wav2vec2-base-960h") >>> # load first sample of English common_voice >>> dataset = load_dataset("mozilla-foundation/common_voice_11_0", "en", split="train", streaming=True) >>> dataset = dataset.cast_column("audio", datasets.Audio(sampling_rate=16_000)) >>> dataset_iter = iter(dataset) >>> sample = next(dataset_iter) >>> # forward sample through model to get greedily predicted transcription ids >>> input_values = feature_extractor(sample["audio"]["array"], return_tensors="pt").input_values >>> logits = model(input_values).logits[0] >>> pred_ids = torch.argmax(logits, axis=-1) >>> # retrieve word stamps (analogous commands for `output_char_offsets`) >>> outputs = tokenizer.decode(pred_ids, output_word_offsets=True) >>> # compute `time_offset` in seconds as product of downsampling ratio and sampling_rate >>> time_offset = model.config.inputs_to_logits_ratio / feature_extractor.sampling_rate >>> word_offsets = [ ... { ... "word": d["word"], ... "start_time": round(d["start_offset"] * time_offset, 2), ... "end_time": round(d["end_offset"] * time_offset, 2), ... } ... for d in outputs.word_offsets ... ] >>> # compare word offsets with audio `en_train_0/common_voice_en_19121553.mp3` online on the dataset viewer: >>> # https://huggingface.co/datasets/mozilla-foundation/common_voice_11_0/viewer/en >>> word_offsets[:3] [{'word': 'THE', 'start_time': 0.7, 'end_time': 0.78}, {'word': 'TRICK', 'start_time': 0.88, 'end_time': 1.08}, {'word': 'APPEARS', 'start_time': 1.2, 'end_time': 1.64}]
batch_decode
( sequences: Union skip_special_tokens: bool = False clean_up_tokenization_spaces: bool = None output_char_offsets: bool = False output_word_offsets: bool = False **kwargs ) → export const metadata = 'undefined';List[str] or Wav2Vec2CTCTokenizerOutput
参数
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
,可选) — 是否清理分词空格。output_char_offsets
(bool
,可选,默认为False
) — 是否输出字符偏移量。字符偏移量可以与采样率和模型下采样率结合使用,计算转录字符的时间戳。
请查看 decode()的示例,以更好地理解如何使用output_char_offsets
。batch_decode()与批量输出的方式相同。output_word_offsets
(bool
,可选,默认为False
) — 是否输出单词偏移量。单词偏移量可以与采样率和模型下采样率结合使用,计算转录单词的时间戳。
请查看 decode()的示例,以更好地理解如何使用output_word_offsets
。batch_decode()与批量输出的方式相同。kwargs
(其他关键字参数,可选) — 将传递给底层模型特定的解码方法。
返回
List[str]
或Wav2Vec2CTCTokenizerOutput
解码后的句子列表。当output_char_offsets == True
或output_word_offsets == True
时,将是Wav2Vec2CTCTokenizerOutput
。
通过调用解码函数,将一系列 token id 的列表转换为字符串列表。
set_target_lang
( target_lang: str )
设置嵌套多语言字典的目标语言
Wav2Vec2FeatureExtractor
class transformers.Wav2Vec2FeatureExtractor
( feature_size = 1 sampling_rate = 16000 padding_value = 0.0 return_attention_mask = False do_normalize = True **kwargs )
参数
feature_size
(int
,默认为 1)— 提取特征的特征维度。sampling_rate
(int
,默认为 16000)— 应以赫兹(Hz)表示的音频文件数字化的采样率。padding_value
(float
,默认为 0.0)— 用于填充值的值。do_normalize
(bool
,可选,默认为True
)— 是否对输入进行零均值单位方差归一化。归一化可以帮助一些模型显著提高性能,例如 wav2vec2-lv60。return_attention_mask
(bool
,可选,默认为False
)— 是否call
() 应该返回attention_mask
。
设置了config.feat_extract_norm == "group"
的 Wav2Vec2 模型,例如 wav2vec2-base,没有使用attention_mask
进行训练。对于这样的模型,input_values
应该简单地用 0 填充,不应传递attention_mask
。
对于设置了config.feat_extract_norm == "layer"
的 Wav2Vec2 模型,例如 wav2vec2-lv60,应该为批量推断传递attention_mask
。
构建一个 Wav2Vec2 特征提取器。
此特征提取器继承自 SequenceFeatureExtractor,其中包含大多数主要方法。用户应参考此超类以获取有关这些方法的更多信息。
__call__
( raw_speech: Union padding: Union = False max_length: Optional = None truncation: bool = False pad_to_multiple_of: Optional = None return_attention_mask: Optional = None return_tensors: Union = None sampling_rate: Optional = None **kwargs )
参数
raw_speech
(np.ndarray
,List[float]
,List[np.ndarray]
,List[List[float]]
)— 要填充的序列或批次序列。每个序列可以是一个 numpy 数组,一个浮点值列表,一个 numpy 数组列表或一个浮点值列表的列表。必须是单声道音频,不是立体声,即每个时间步长一个浮点数。padding
(bool
,str
或 PaddingStrategy,可选,默认为False
)— 选择一种策略来填充返回的序列(根据模型的填充方向和填充索引),包括:
True
或'longest'
:填充到批次中最长的序列(如果只提供单个序列,则不进行填充)。'max_length'
:填充到指定参数max_length
的最大长度,或者如果未提供该参数,则填充到模型的最大可接受输入长度。False
或'do_not_pad'
(默认):无填充(即,可以输出具有不同长度序列的批次)。
max_length
(int
,可选)— 返回列表的最大长度和可选填充长度(见上文)。truncation
(bool
)— 激活截断,将输入序列截断为比 max_length 更长的序列到 max_length。pad_to_multiple_of
(int
,可选)— 如果设置,将填充序列到提供的值的倍数。
这对于启用 NVIDIA 硬件上的 Tensor Cores 特别有用,其计算能力>= 7.5
(Volta),或者对于受益于序列长度为 128 的倍数的 TPU。return_attention_mask
(bool
,可选)— 是否返回注意力掩码。如果保持默认值,将根据特定 feature_extractor 的默认值返回注意力掩码。
什么是注意力掩码?
对于设置了config.feat_extract_norm == "group"
的 Wav2Vec2 模型,例如 wav2vec2-base,没有使用attention_mask
进行训练。对于这样的模型,input_values
应该简单地用 0 填充,不应传递attention_mask
。
对于设置了config.feat_extract_norm == "layer"
的 Wav2Vec2 模型,例如 wav2vec2-lv60,应该为批量推断传递attention_mask
。return_tensors
(str
或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:
'tf'
: 返回 TensorFlowtf.constant
对象。'pt'
: 返回 PyTorchtorch.Tensor
对象。'np'
: 返回 Numpynp.ndarray
对象。
sampling_rate
(int
, 可选) —raw_speech
输入采样的采样率。强烈建议在前向调用时传递sampling_rate
以防止静默错误。padding_value
(float
, 默认为 0.0) —
对一个或多个序列进行特征化和为模型准备的主要方法。
Wav2Vec2Processor
class transformers.Wav2Vec2Processor
( feature_extractor tokenizer )
参数
feature_extractor
(Wav2Vec2FeatureExtractor
) — Wav2Vec2FeatureExtractor 的一个实例。特征提取器是必需的输入。tokenizer
(PreTrainedTokenizer) — PreTrainedTokenizer 的一个实例。分词器是必需的输入。
构建一个 Wav2Vec2 处理器,将 Wav2Vec2 特征提取器和 Wav2Vec2 CTC 分词器封装成一个单一处理器。
Wav2Vec2Processor 提供了 Wav2Vec2FeatureExtractor 和 PreTrainedTokenizer 的所有功能。查看 call() 和 decode() 的文档字符串以获取更多信息。
__call__
( *args **kwargs )
在正常模式下使用时,此方法将所有参数转发到 Wav2Vec2FeatureExtractor 的 call() 并返回其输出。如果在上下文 as_target_processor()
中使用此方法,将所有参数转发到 PreTrainedTokenizer 的 call()。请参考上述两个方法的文档字符串以获取更多信息。
pad
( *args **kwargs )
在正常模式下使用时,此方法将所有参数转发到 Wav2Vec2FeatureExtractor 的 pad()并返回其输出。如果在上下文as_target_processor()
中使用,此方法将所有参数转发到 PreTrainedTokenizer 的 pad()。有关更多信息,请参考上述两种方法的文档字符串。
from_pretrained
( pretrained_model_name_or_path **kwargs )
save_pretrained
( 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()。有关更多信息,请参考上述方法的文档字符串。
batch_decode
( *args **kwargs )
此方法将所有参数转发到 PreTrainedTokenizer 的 batch_decode()。有关更多信息,请参考此方法的文档字符串。
decode
( *args **kwargs )
此方法将所有参数转发到 PreTrainedTokenizer 的 decode()。有关更多信息,请参考此方法的文档字符串。
Wav2Vec2ProcessorWithLM
class transformers.Wav2Vec2ProcessorWithLM
( feature_extractor: FeatureExtractionMixin tokenizer: PreTrainedTokenizerBase decoder: BeamSearchDecoderCTC )
参数
feature_extractor
(Wav2Vec2FeatureExtractor 的一个实例。特征提取器是必需的输入。tokenizer
(Wav2Vec2CTCTokenizer 的一个实例。分词器是必需的输入。decoder
(pyctcdecode.BeamSearchDecoderCTC
)—pyctcdecode.BeamSearchDecoderCTC
的一个实例。解码器是必需的输入。
构建一个 Wav2Vec2 处理器,将 Wav2Vec2 特征提取器、Wav2Vec2 CTC 分词器和具有语言模型支持的解码器包装到一个单一的处理器中,用于语言模型增强的语音识别解码。
__call__
( *args **kwargs )
在正常模式下使用时,此方法将所有参数转发到 Wav2Vec2FeatureExtractor 的call(),并返回其输出。如果在上下文中使用as_target_processor()
,此方法将所有参数转发到 Wav2Vec2CTCTokenizer 的call()。请参考上述两种方法的文档字符串以获取更多信息。
pad
( *args **kwargs )
在正常模式下使用时,此方法将所有参数转发到 Wav2Vec2FeatureExtractor 的 pad(),并返回其输出。如果在上下文中使用as_target_processor()
,此方法将所有参数转发到 Wav2Vec2CTCTokenizer 的 pad()。请参考上述两种方法的文档字符串以获取更多信息。
from_pretrained
( pretrained_model_name_or_path **kwargs )
参数
pretrained_model_name_or_path
(str
oros.PathLike
) — 可以是:
- 预训练特征提取器的模型 ID的字符串,托管在 huggingface.co 上的模型存储库中。有效的模型 ID 可以位于根级别,如
bert-base-uncased
,或者在用户或组织名称下命名空间化,如dbmdz/bert-base-german-cased
。 - 一个包含使用 save_pretrained()方法保存的特征提取器文件的目录路径,例如
./my_model_directory/
。 - 从预训练的特征提取器 JSON 文件的路径或 URL,例如
./my_model_directory/preprocessor_config.json
。**kwargs — 传递给 SequenceFeatureExtractor 和 PreTrainedTokenizer 的额外关键字参数
从预训练的 Wav2Vec2 处理器实例化一个 Wav2Vec2ProcessorWithLM。
这个类方法只是调用了 Wav2Vec2FeatureExtractor 的 from_pretrained(),Wav2Vec2CTCTokenizer 的 from_pretrained(),以及pyctcdecode.BeamSearchDecoderCTC.load_from_hf_hub
。
请参考上述方法的文档字符串以获取更多信息。
save_pretrained
( save_directory )
batch_decode
( logits: ndarray pool: Optional = None num_processes: Optional = None beam_width: Optional = None beam_prune_logp: Optional = None token_min_logp: Optional = None hotwords: Optional = None hotword_weight: Optional = None alpha: Optional = None beta: Optional = None unk_score_offset: Optional = None lm_score_boundary: Optional = None output_word_offsets: bool = False n_best: int = 1 )
参数
logits
(np.ndarray
) — 模型输出的 logits 向量,表示每个标记的对数概率。pool
(multiprocessing.Pool
, optional) — 可选的用户管理的池。如果未设置,将自动创建并关闭一个池。池应在Wav2Vec2ProcessorWithLM
之后实例化。否则,LM 将不可用于池的子进程。
目前,只有使用“fork”上下文创建的池才能使用。如果传递了“spawn”池,它将被忽略,而将使用顺序解码。num_processes
(int
, optional) — 如果未设置pool
,则应该在哪些进程上并行化函数。默认为可用 CPU 的数量。beam_width
(int
, optional) — 解码过程中每一步的最大 beam 数。默认为 pyctcdecode 的 DEFAULT_BEAM_WIDTH。beam_prune_logp
(int
, optional) — 比最佳 beam 差很多的 beam 将被修剪。默认为 pyctcdecode 的 DEFAULT_PRUNE_LOGP。token_min_logp
(int
, optional) — 低于此 logp 的标记将被跳过,除非它们是帧的 argmax。默认为 pyctcdecode 的 DEFAULT_MIN_TOKEN_LOGP。hotwords
(List[str]
, optional) — 具有额外重要性的单词列表,可以是 LM 的 OOVhotword_weight
(int
, optional) — 热词重要性的权重因子,默认为 pyctcdecode 的 DEFAULT_HOTWORD_WEIGHT。alpha
(float
, optional) — 浅融合期间语言模型的权重beta
(float
, optional) — 在评分过程中长度得分调整的权重unk_score_offset
(float
, optional) — 未知标记的对数分数偏移量lm_score_boundary
(bool
, optional) — 在评分时是否让 kenlm 尊重边界output_word_offsets
(bool
, optional, 默认为False
) — 是否输出单词偏移量。单词偏移量可以与采样率和模型下采样率结合使用,以计算转录单词的时间戳。n_best
(int
, optional, 默认为1
) — 要返回的最佳假设数量。如果n_best
大于 1,则返回的text
将是一个字符串列表的列表,logit_score
将是一个浮点数列表的列表,lm_score
将是一个浮点数列表的列表,外部列表的长度将对应批次大小,内部列表的长度将对应返回的假设数量。该值应 >= 1。
请查看 decode()的示例,以更好地理解如何使用output_word_offsets
。batch_decode()与批量输出的方式相同。
批量解码输出 logits 以支持语言模型的音频转录。
此函数利用了 Python 的多进程。目前,多进程仅在 Unix 系统上可用(请参阅此问题)。
如果您正在解码多个批次,请考虑创建一个Pool
并将其传递给batch_decode
。否则,batch_decode
将非常慢,因为它将为每次调用创建一个新的Pool
。请参见下面的用法示例。
示例:请参见解码多个音频。
decode
( logits: ndarray beam_width: Optional = None beam_prune_logp: Optional = None token_min_logp: Optional = None hotwords: Optional = None hotword_weight: Optional = None alpha: Optional = None beta: Optional = None unk_score_offset: Optional = None lm_score_boundary: Optional = None output_word_offsets: bool = False n_best: int = 1 )
参数
logits
(np.ndarray
) — 代表每个标记的对数概率的模型输出向量。beam_width
(int
, optional) — 解码过程中每一步的最大 beam 数。默认为 pyctcdecode 的 DEFAULT_BEAM_WIDTH。beam_prune_logp
(int
, optional) — 一个用于修剪 log-probs 小于 best_beam_logp + beam_prune_logp 的阈值。该值应 <= 0。默认为 pyctcdecode 的 DEFAULT_PRUNE_LOGP。token_min_logp
(int
,optional) — log-probs 低于 token_min_logp 的标记将被跳过,除非它们是话语的最大 log-prob。默认为 pyctcdecode 的 DEFAULT_MIN_TOKEN_LOGP。hotwords
(List[str]
,optional) — 具有额外重要性的单词列表,可能不在 LM 的词汇表中,例如[“huggingface”]hotword_weight
(int
,optional) — 增强热词分数的权重乘数。默认为 pyctcdecode 的 DEFAULT_HOTWORD_WEIGHT。alpha
(float
,optional) — 浅融合期间语言模型的权重beta
(float
,optional) — 在评分过程中长度分数调整的权重unk_score_offset
(float
,optional) — 未知标记的 log 分数偏移量lm_score_boundary
(bool
, optional) — 是否在评分时让 kenlm 尊重边界output_word_offsets
(bool
, optional, 默认为False
) — 是否输出单词偏移量。单词偏移量可以与采样率和模型下采样率结合使用,计算转录单词的时间戳。n_best
(int
,optional,默认为1
) — 要返回的最佳假设数量。如果n_best
大于 1,则返回的text
将是一个字符串列表,logit_score
将是一个浮点数列表,lm_score
将是一个浮点数列表,这些列表的长度将对应于返回的假设数量。该值应大于等于 1。
请查看下面的示例,以更好地理解如何使用output_word_offsets
。
使用语言模型支持将输出逻辑解码为音频转录。
示例:
>>> # Let's see how to retrieve time steps for a model >>> from transformers import AutoTokenizer, AutoProcessor, AutoModelForCTC >>> from datasets import load_dataset >>> import datasets >>> import torch >>> # import model, feature extractor, tokenizer >>> model = AutoModelForCTC.from_pretrained("patrickvonplaten/wav2vec2-base-100h-with-lm") >>> processor = AutoProcessor.from_pretrained("patrickvonplaten/wav2vec2-base-100h-with-lm") >>> # load first sample of English common_voice >>> dataset = load_dataset("mozilla-foundation/common_voice_11_0", "en", split="train", streaming=True) >>> dataset = dataset.cast_column("audio", datasets.Audio(sampling_rate=16_000)) >>> dataset_iter = iter(dataset) >>> sample = next(dataset_iter) >>> # forward sample through model to get greedily predicted transcription ids >>> input_values = processor(sample["audio"]["array"], return_tensors="pt").input_values >>> with torch.no_grad(): ... logits = model(input_values).logits[0].cpu().numpy() >>> # retrieve word stamps (analogous commands for `output_char_offsets`) >>> outputs = processor.decode(logits, output_word_offsets=True) >>> # compute `time_offset` in seconds as product of downsampling ratio and sampling_rate >>> time_offset = model.config.inputs_to_logits_ratio / processor.feature_extractor.sampling_rate >>> word_offsets = [ ... { ... "word": d["word"], ... "start_time": round(d["start_offset"] * time_offset, 2), ... "end_time": round(d["end_offset"] * time_offset, 2), ... } ... for d in outputs.word_offsets ... ] >>> # compare word offsets with audio `en_train_0/common_voice_en_19121553.mp3` online on the dataset viewer: >>> # https://huggingface.co/datasets/mozilla-foundation/common_voice_11_0/viewer/en >>> word_offsets[:4] [{'word': 'THE', 'start_time': 0.68, 'end_time': 0.78}, {'word': 'TRACK', 'start_time': 0.88, 'end_time': 1.1}, {'word': 'APPEARS', 'start_time': 1.18, 'end_time': 1.66}, {'word': 'ON', 'start_time': 1.86, 'end_time': 1.92}]
解码多个音频
如果您计划解码多批音频,应考虑使用 batch_decode()并传递一个实例化的multiprocessing.Pool
。否则,batch_decode()的性能将比为每个音频单独调用 decode()慢,因为它在每次调用时内部实例化一个新的Pool
。请参阅下面的示例:
>>> # Let's see how to use a user-managed pool for batch decoding multiple audios >>> from multiprocessing import get_context >>> from transformers import AutoTokenizer, AutoProcessor, AutoModelForCTC >>> from datasets import load_dataset >>> import datasets >>> import torch >>> # import model, feature extractor, tokenizer >>> model = AutoModelForCTC.from_pretrained("patrickvonplaten/wav2vec2-base-100h-with-lm").to("cuda") >>> processor = AutoProcessor.from_pretrained("patrickvonplaten/wav2vec2-base-100h-with-lm") >>> # load example dataset >>> dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") >>> dataset = dataset.cast_column("audio", datasets.Audio(sampling_rate=16_000)) >>> def map_to_array(batch): ... batch["speech"] = batch["audio"]["array"] ... return batch >>> # prepare speech data for batch inference >>> dataset = dataset.map(map_to_array, remove_columns=["audio"]) >>> def map_to_pred(batch, pool): ... inputs = processor(batch["speech"], sampling_rate=16_000, padding=True, return_tensors="pt") ... inputs = {k: v.to("cuda") for k, v in inputs.items()} ... with torch.no_grad(): ... logits = model(**inputs).logits ... transcription = processor.batch_decode(logits.cpu().numpy(), pool).text ... batch["transcription"] = transcription ... return batch >>> # note: pool should be instantiated *after* `Wav2Vec2ProcessorWithLM`. >>> # otherwise, the LM won't be available to the pool's sub-processes >>> # select number of processes and batch_size based on number of CPU cores available and on dataset size >>> with get_context("fork").Pool(processes=2) as pool: ... result = dataset.map( ... map_to_pred, batched=True, batch_size=2, fn_kwargs={"pool": pool}, remove_columns=["speech"] ... ) >>> result["transcription"][:2] ['MISTER QUILTER IS THE APOSTLE OF THE MIDDLE CLASSES AND WE ARE GLAD TO WELCOME HIS GOSPEL', "NOR IS MISTER COULTER'S MANNER LESS INTERESTING THAN HIS MATTER"]
Wav2Vec2 特定输出
class transformers.models.wav2vec2_with_lm.processing_wav2vec2_with_lm.Wav2Vec2DecoderWithLMOutput
( text: Union logit_score: Union = None lm_score: Union = None word_offsets: Union = None )
参数
text
(str
列表或str
) — 文本中的解码逻辑。通常是语音转录。logit_score
(float
列表或float
) — 与生成文本相关的 beam 的总 logit 分数。lm_score
(float
列表) — 与生成文本相关的 beam 的融合 lm_score。word_offsets
(List[Dict[str, Union[int, str]]]
或List[Dict[str, Union[int, str]]]
列表 — 解码单词的偏移量。结合采样率和模型下采样率,单词偏移量可用于计算每个单词的时间戳。
Wav2Vec2DecoderWithLM
的输出类型,带有转录。
Transformers 4.37 中文文档(七十九)(4)https://developer.aliyun.com/article/1564173