Whisper
原文:
huggingface.co/docs/transformers/v4.37.2/en/model_doc/whisper
概述
Whisper 模型由 Alec Radford、Jong Wook Kim、Tao Xu、Greg Brockman、Christine McLeavey、Ilya Sutskever 在通过大规模弱监督实现稳健语音识别中提出。
论文摘要如下:
我们研究了简单训练以预测互联网上大量音频转录的语音处理系统的能力。当扩展到 680,000 小时的多语言和多任务监督时,得到的模型在标准基准上表现良好,并且通常与先前的完全监督结果竞争,但在零次迁移设置中无需任何微调。与人类相比,模型接近其准确性和稳健性。我们发布了模型和推理代码,以作为进一步研究稳健语音处理的基础。
此模型由Arthur Zucker贡献。此模型的 Tensorflow 版本由amyeroberts贡献。原始代码可在此处找到。
使用提示
- 该模型通常无需任何微调即可表现良好。
- 该架构遵循经典的编码器-解码器架构,这意味着它依赖于 generate()函数进行推理。
- 目前仅实现了短形式的推理,即音频被预分段为<=30 秒的片段。长形式(包括时间戳)将在未来的版本中实现。
- 可以使用 WhisperProcessor 来准备音频以供模型使用,并将预测的 ID 解码回文本。
- 要转换模型和处理器,我们建议使用以下方法:
python src/transformers/models/whisper/convert_openai_to_hf.py --checkpoint_path "" --pytorch_dump_folder_path "Arthur/whisper-3" --convert_preprocessor True
脚本将自动从 OpenAI 检查点确定所有必要的参数。需要安装tiktoken
库以执行将 OpenAI 分词器转换为tokenizers
版本的转换。
推理
以下是使用预训练的 Whisper 模型转录音频样本的逐步指南:
>>> from datasets import load_dataset >>> from transformers import WhisperProcessor, WhisperForConditionalGeneration >>> # Select an audio file and read it: >>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation") >>> audio_sample = ds[0]["audio"] >>> waveform = audio_sample["array"] >>> sampling_rate = audio_sample["sampling_rate"] >>> # Load the Whisper model in Hugging Face format: >>> processor = WhisperProcessor.from_pretrained("openai/whisper-tiny.en") >>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en") >>> # Use the model and processor to transcribe the audio: >>> input_features = processor( ... waveform, sampling_rate=sampling_rate, return_tensors="pt" ... ).input_features >>> # Generate token ids >>> predicted_ids = model.generate(input_features) >>> # Decode token ids to text >>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True) >>> transcription[0] ' Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.'
资源
官方 Hugging Face 和社区(由🌎表示)资源列表,可帮助您开始使用 Whisper。如果您有兴趣提交资源以包含在此处,请随时提交拉取请求,我们将进行审核!资源应该展示一些新东西,而不是重复现有资源。
- 一个包含脚本的分支,用于将 Hugging Face 格式的 Whisper 模型转换为 OpenAI 格式。🌎 使用示例:
pip install -U openai-whisper python convert_hf_to_openai.py \ --checkpoint openai/whisper-tiny \ --whisper_dump_path whisper-tiny-openai.pt
WhisperConfig
class transformers.WhisperConfig
( vocab_size = 51865 num_mel_bins = 80 encoder_layers = 4 encoder_attention_heads = 6 decoder_layers = 4 decoder_attention_heads = 6 decoder_ffn_dim = 1536 encoder_ffn_dim = 1536 encoder_layerdrop = 0.0 decoder_layerdrop = 0.0 decoder_start_token_id = 50257 use_cache = True is_encoder_decoder = True activation_function = 'gelu' d_model = 384 dropout = 0.0 attention_dropout = 0.0 activation_dropout = 0.0 init_std = 0.02 scale_embedding = False max_source_positions = 1500 max_target_positions = 448 pad_token_id = 50256 bos_token_id = 50256 eos_token_id = 50256 suppress_tokens = None begin_suppress_tokens = [220, 50256] use_weighted_layer_sum = False classifier_proj_size = 256 apply_spec_augment = False 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 median_filter_width = 7 **kwargs )
参数
vocab_size
(int
,可选,默认为 51865)— Whisper 模型的词汇量。定义了在调用 WhisperModel 时可以由decoder_input_ids
表示的不同标记数量。num_mel_bins
(int
,可选,默认为 80)— 每个输入特征中使用的 mel 特征数量。应与WhisperProcessor
类中使用的值对应。encoder_layers
(int
,可选,默认为 4)— 编码器层数。decoder_layers
(int
,可选,默认为 4)— 解码器层数。encoder_attention_heads
(int
,可选,默认为 6)— Transformer 编码器中每个注意力层的注意力头数。decoder_attention_heads
(int
, optional, 默认为 6) — Transformer 解码器中每个注意力层的注意力头数。encoder_ffn_dim
(int
, optional, 默认为 1536) — 编码器中“中间”(通常称为前馈)层的维度。decoder_ffn_dim
(int
, optional, 默认为 1536) — 解码器中“中间”(通常称为前馈)层的维度。encoder_layerdrop
(float
, optional, 默认为 0.0) — 编码器的 LayerDrop 概率。有关更多详细信息,请参阅 LayerDrop paper)。decoder_layerdrop
(float
, optional, 默认为 0.0) — 解码器的 LayerDrop 概率。有关更多详细信息,请参阅 LayerDrop paper)。decoder_start_token_id
(int
,optional,默认为 50257)–对应于“<|startoftranscript|>”
标记,当没有向generate
函数提供decoder_input_ids
时,会自动使用该标记。它用于根据任务指导模型的生成过程。use_cache
(bool
, optional, 默认为True
) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。is_encoder_decoder
(bool
, optional, 默认为True
) — 模型是否用作编码器/解码器。activation_function
(str
, optional, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"silu"
和"gelu_new"
。d_model
(int
, optional, 默认为 384) — 层的维度。dropout
(float
, optional, 默认为 0.1) — 嵌入层、编码器和池化层中所有全连接层的丢弃概率。attention_dropout
(float
, optional, 默认为 0.0) — 注意力概率的丢弃比率。activation_dropout
(float
, optional, 默认为 0.0) — 全连接层内部激活的丢弃比率。init_std
(float
, optional, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。scale_embedding
(bool
, optional, 默认为 False) — 通过除以 sqrt(d_model)来缩放嵌入。max_source_positions
(int
, optional, 默认为 1500) — 该模型可能用于的对数梅尔滤波器组特征的最大序列长度。max_target_positions
(int
, optional, 默认为 448) — 该模型可能用于的最大序列长度。通常将其设置为较大的值以防万一(例如 512、1024 或 2048)。pad_token_id
(int
, optional, 默认为 50256) — 填充标记 id。bos_token_id
(int
, optional, 默认为 50256) — 流的开始标记 id。eos_token_id
(int
, optional, 默认为 50256) — 流的结束标记 id。suppress_tokens
(List[int]
, optional) — 包含将在generate
函数中由对数处理器使用的非语音标记的列表。NON_SPEECH_TOKENS 和 NON_SPEECH_TOKENS_MULTI 分别对应于english-only
和multilingual
模型。begin_suppress_tokens
(List[int]
, optional, 默认为[220,50256]
) — 包含在采样过程开始时将被抑制的标记的列表。初始化为" "
(blank_token_id
)和eos_token_id
的标记。use_weighted_layer_sum
(bool
, optional, 默认为False
) — 是否使用带有学习权重的层输出的加权平均值。仅在使用 WhisperForAudioClassification 的实例时相关。classifier_proj_size
(int
, optional, 默认为 256) — 分类前的投影维度,用于标记均值池化。仅在使用 WhisperForAudioClassification 的实例时相关。apply_spec_augment
(bool
, optional, defaults toFalse
) — 是否将SpecAugment数据增强应用于特征编码器的输出。有关详细信息,请参阅SpecAugment: A Simple Data Augmentation Method for Automatic Speech Recognition。mask_time_prob
(float
, optional, defaults to 0.05) — 沿时间轴的所有特征向量的百分比(介于 0 和 1 之间)将被掩盖。掩盖过程在轴上生成mask_time_prob*len(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_prob*len(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
时才相关。median_filter_width
(int
, optional, defaults to 7) — 用于在计算标记时间戳时平滑交叉注意力输出的中值滤波器的宽度。应为奇数。
这是用于存储 WhisperModel 配置的配置类。它用于根据指定的参数实例化 Whisper 模型,定义模型架构。使用默认值实例化配置将产生类似于 Whisper openai/whisper-tiny架构的配置。
配置对象继承自 PretrainedConfig,可用于控制模型输出。阅读 PretrainedConfig 的文档以获取更多信息。
示例:
>>> from transformers import WhisperConfig, WhisperModel >>> # Initializing a Whisper tiny style configuration >>> configuration = WhisperConfig() >>> # Initializing a model (with random weights) from the tiny style configuration >>> model = WhisperModel(configuration) >>> # Accessing the model configuration >>> configuration = model.config
WhisperTokenizer
class transformers.WhisperTokenizer
( vocab_file merges_file normalizer_file = None errors = 'replace' unk_token = '<|endoftext|>' bos_token = '<|endoftext|>' eos_token = '<|endoftext|>' pad_token = None add_prefix_space = False language = None task = None predict_timestamps = False **kwargs )
参数
vocab_file
(str
) — 词汇文件的路径。merges_file
(str
) — 合并文件的路径。normalizer_file
(str
, optional) — 正则化器文件的路径。errors
(str
,optional,默认为"replace"
)–将字节解码为 UTF-8 时要遵循的示例。请参阅bytes.decode了解更多信息。unk_token
(str
,optional,默认为"<|endoftext|>"
)–未知令牌。词汇表中没有的令牌无法转换为 ID,而是设置为该令牌。bos_token
(str
,optional,默认为"<|endoftext|>"
)–序列标记的开头。decoder_start_token_id
用于在生成时将第一个令牌设置为"<|startoftranscript|>"
。eos_token
(str
,optional,默认为"<|endoftext|>"
)–序列结束标记。pad_token
(str
, optional) — 用于填充的标记,例如在批处理不同长度的序列时。add_prefix_space
(bool
, optional, defaults toFalse
) — 是否在输入前添加一个初始空格。这允许将前导单词视为任何其他单词。language
(str
,可选)–转录文本的语言。对于多语言语音识别和语音翻译任务,相应的语言 id 标记被附加到序列的开头,例如对于西班牙语,标记"<|es|>"
被附加到顺序的开头。这只能用于多语言微调。task
(str
,可选)–要附加在序列开头的任务标识符(如果有)。这应用于多语言微调,"transcribe"
用于语音识别,"translate"
用于语音翻译。- predict_timestamps
(
bool,*optional*,默认为
False)--是否省略序列开头的
<|notimestamps|>`标记。
构建一个 Whisper tokenizer。
这个分词器继承自 PreTrainedTokenizer,其中包含一些主要方法。用户应参考超类以获取有关这些方法的更多信息。
set_prefix_tokens
( language: str = None task: str = None predict_timestamps: bool = None )
参数
language
(str
,可选,默认为None
)— 转录文本的语言。task
(str
,可选,默认为None
)— 任务标识符,附加在序列开头(如果有)。predict_timestamps
(bool
,optional,默认为None
)–是否省略序列开头的<|notimestamps|>
标记。
覆盖附加到标签序列开头的前缀标记。此方法可以独立使用以
在微调时根据需要更新前缀标记。示例:
>>> # instantiate the tokenizer and set the prefix token to Spanish >>> tokenizer = WhisperTokenizer.from_pretrained("openai/whisper-tiny", language="spanish") >>> # now switch the prefix token from Spanish to French >>> tokenizer.set_prefix_tokens(language="french")
build_inputs_with_special_tokens
( token_ids_0 token_ids_1 = None )
通过附加 eos_token_id 从序列构建模型输入。
get_special_tokens_mask
( token_ids_0: List token_ids_1: Optional = None already_has_special_tokens: bool = False ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
)— ID 列表。token_ids_1
(List[int]
,可选)— 序列对的可选第二个 ID 列表。already_has_special_tokens
(bool
,可选,默认为False
)— 标记列表是否已经格式化为模型的特殊标记。
返回
List[int]
一个整数列表,范围为 [0, 1]:1 表示特殊标记,0 表示序列标记。
从没有添加特殊标记的标记列表中检索序列 ID。在使用分词器的 prepare_for_model
方法添加特殊标记时调用此方法。
create_token_type_ids_from_sequences
( token_ids_0: List token_ids_1: Optional = None ) → export const metadata = 'undefined';List[int]
参数
token_ids_0
(List[int]
)— 第一个标记化序列。token_ids_1
(List[int]
,可选)— 第二个标记化序列。
返回
List[int]
标记类型 ID。
创建与传递的序列对应的标记类型 ID。什么是标记类型 ID?
如果模型有一种特殊的构建方式,则应在子类中重写它。
save_vocabulary
( save_directory: str filename_prefix: Optional = None )
batch_decode
( sequences: Union skip_special_tokens: bool = False clean_up_tokenization_spaces: bool = None **kwargs ) → export const metadata = 'undefined';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]
解码的句子列表。
通过调用解码将标记 ID 的列表列表转换为字符串列表。
decode
( token_ids skip_special_tokens: bool = False clean_up_tokenization_spaces: bool = None output_offsets: bool = False time_precision: float = 0.02 decode_with_timestamps: bool = False normalize: bool = False basic_normalize: bool = False remove_diacritics: bool = False **kwargs ) → export const metadata = 'undefined';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
(在tokenizer_config
中可用)。output_offsets
(bool
, optional, 默认为False
) — 是否输出标记的偏移量。只有在模型预测时间戳时才应设置此选项。time_precision
(float
,optional
, 默认为 0.02) — 从标记转换为时间的时间比率。decode_with_timestamps
(bool
, optional, 默认为False
) — 是否在原始文本中包含时间戳进行解码。normalize
(bool
, optional, 默认为False
) — 是否对解码后的文本应用英文文本规范化。仅当目标文本为英文时适用。否则,应应用基本文本规范化。basic_normalize
(bool
, optional, 默认为False
) — 是否对解码后的文本应用基本文本规范化。适用于多语言目标文本。remove_diacritics
(bool
, optional, 默认为False
) — 在应用基本文本规范化时是否删除变音符号。删除变音符号可能会破坏解码后文本中的信息,因此应谨慎使用。kwargs
(其他关键字参数,optional) — 将传递给底层模型特定的解码方法。
返回值
str
解码后的句子。
将 id 序列转换为字符串,使用 tokenizer 和词汇表,可选择删除特殊标记并清除标记化空格。
类似于执行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))
。
Transformers 4.37 中文文档(八十一)(2)https://developer.aliyun.com/article/1563270