Transformers 文档

Wav2Vec2Phoneme

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Wav2Vec2Phoneme

PyTorch TensorFlow Flax

概述

Wav2Vec2Phoneme 模型是由 Qiantong Xu, Alexei Baevski, Michael Auli 在 《简单有效的零样本跨语言音素识别》(Xu et al., 2021) 中提出的。

论文摘要如下:

自训练、自监督预训练和无监督学习的最新进展使得在没有任何标注数据的情况下,也能实现性能良好的语音识别系统。然而,在许多情况下,相关语言存在可用的标注数据,但这些方法并未加以利用。本文通过微调多语言预训练的 wav2vec 2.0 模型来转录未见过的语言,从而扩展了之前关于零样本跨语言迁移学习的工作。这是通过使用发音特征将训练语言的音素映射到目标语言来实现的。实验表明,这种简单的方法显著优于以往引入特定任务架构且仅使用单语预训练模型部分内容的工作。

相关检查点可在 https://huggingface.co/models?other=phoneme-recognition 下找到。

该模型由 patrickvonplaten 贡献

原始代码可以在此处找到。

使用技巧

  • Wav2Vec2Phoneme 使用与 Wav2Vec2 完全相同的架构
  • Wav2Vec2Phoneme 是一种语音模型,它接受一个浮点数组,该数组对应于语音信号的原始波形。
  • Wav2Vec2Phoneme 模型使用连接主义时间分类(CTC)进行训练,因此模型输出必须使用 Wav2Vec2PhonemeCTCTokenizer 进行解码。
  • Wav2Vec2Phoneme 可以同时在多种语言上进行微调,并在一次前向传播中解码未见过的语言为音素序列
  • 默认情况下,模型输出一个音素序列。为了将音素转换为单词序列,应该使用字典和语言模型。

Wav2Vec2Phoneme 的架构基于 Wav2Vec2 模型,有关 API 参考,请查阅 Wav2Vec2 的文档页面,除了分词器。

Wav2Vec2PhonemeCTCTokenizer

class transformers.Wav2Vec2PhonemeCTCTokenizer

< >

( vocab_file bos_token = '<s>' eos_token = '</s>' unk_token = '<unk>' pad_token = '<pad>' phone_delimiter_token = ' ' word_delimiter_token = None do_phonemize = True phonemizer_lang = 'en-us' phonemizer_backend = 'espeak' **kwargs )

参数

  • vocab_file (str) — 包含词汇表的文件。
  • bos_token (str, 可选, 默认为 "<s>") — 句子起始符。
  • eos_token (str, 可选, 默认为 "</s>") — 句子结束符。
  • unk_token (str, 可选, 默认为 "<unk>") — 未知标记。词汇表中不存在的标记无法转换为 ID,将设置为此标记。
  • pad_token (str, 可选, 默认为 "<pad>") — 用于填充的标记,例如在对不同长度的序列进行批处理时。
  • do_phonemize (bool, 可选, 默认为 True) — 分词器是否应对输入进行音素化。仅当将音素序列传递给分词器时,do_phonemize 才应设置为 False
  • phonemizer_lang (str, 可选, 默认为 "en-us") — 分词器应将输入文本音素化为的音素集语言。
  • phonemizer_backend (str, 可选. 默认为 "espeak") — 音素化库将使用的后端音素化库。默认为 espeak-ng。有关更多信息,请参阅 音素化包
  • **kwargs — 额外传递给 PreTrainedTokenizer 的关键字参数。

构造一个 Wav2Vec2PhonemeCTC 分词器。

此分词器继承自 PreTrainedTokenizer,其中包含一些主要方法。用户应参阅超类以获取有关此类方法的更多信息。

__call__

< >

( text: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair: typing.Union[str, list[str], list[list[str]], NoneType] = None text_target: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair_target: typing.Union[str, list[str], list[list[str]], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = 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 ) 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]], 可选) — 要编码为目标文本的序列或序列批次。每个序列可以是一个字符串或一个字符串列表(预分词字符串)。如果序列以字符串列表(预分词)形式提供,则必须设置 is_split_into_words=True(以消除与序列批次的歧义)。
  • add_special_tokens (bool, 可选, 默认为 True) — 编码序列时是否添加特殊标记。这将使用底层 PretrainedTokenizerBase.build_inputs_with_special_tokens 函数,该函数定义了哪些标记会自动添加到输入 ID。如果你想自动添加 boseos 标记,这会很有用。
  • padding (bool, strPaddingStrategy, 可选, 默认为 False) — 激活和控制填充。接受以下值:

    • True'longest': 填充到批次中最长的序列(如果只提供一个序列,则不填充)。
    • 'max_length': 填充到由参数 max_length 指定的最大长度,如果未提供该参数,则填充到模型可接受的最大输入长度。
    • False'do_not_pad'(默认): 不填充(即可以输出具有不同长度序列的批次)。
  • truncation (bool, strTruncationStrategy, 可选, 默认为 False) — 激活和控制截断。接受以下值:

    • True'longest_first': 截断到由参数 max_length 指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供一对序列(或一批序列),这将逐个标记进行截断,从对中最长的序列中移除一个标记。
    • 'only_first': 截断到由参数 max_length 指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供一对序列(或一批序列),这将仅截断一对中的第一个序列。
    • 'only_second': 截断到由参数 max_length 指定的最大长度,如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供一对序列(或一批序列),这将仅截断一对中的第二个序列。
    • False'do_not_truncate'(默认): 不截断(即可以输出序列长度大于模型最大允许输入大小的批次)。
  • max_length (int, 可选) — 控制截断/填充参数之一将使用的最大长度。

    如果未设置或设置为 None,这将使用预定义的模型最大长度(如果截断/填充参数之一需要最大长度)。如果模型没有特定的最大输入长度(如 XLNet),则截断/填充到最大长度将被禁用。

  • stride (int, 可选, 默认为 0) — 如果与 max_length 一起设置为一个数字,则当 return_overflowing_tokens=True 时返回的溢出标记将包含来自截断序列末尾的一些标记,以提供截断序列和溢出序列之间的一些重叠。此参数的值定义重叠标记的数量。
  • is_split_into_words (bool, 可选, 默认为 False) — 输入是否已预分词(例如,按空格分割成单词)。如果设置为 True,分词器假定输入已分词(例如,通过按空格分割),然后进行分词。这对于 NER 或标记分类很有用。
  • pad_to_multiple_of (int, 可选) — 如果设置,将序列填充到所提供值的倍数。需要激活 padding。这对于在 NVIDIA 硬件上启用计算能力 >= 7.5 (Volta) 的 Tensor Core 尤其有用。
  • padding_side (str, 可选) — 模型应应用填充的一侧。应在 [‘right’, ‘left’] 之间选择。默认值取自同名的类属性。
  • return_tensors (strTensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:

    • 'tf': 返回 TensorFlow tf.constant 对象。
    • 'pt': 返回 PyTorch torch.Tensor 对象。
    • 'np': 返回 Numpy np.ndarray 对象。
  • return_token_type_ids (bool, 可选) — 是否返回标记类型 ID。如果保留默认值,将根据特定分词器的默认设置(由 return_outputs 属性定义)返回标记类型 ID。

    什么是标记类型 ID?

  • return_attention_mask (bool, 可选) — 是否返回注意力掩码。如果保留默认值,将根据特定分词器的默认设置(由 return_outputs 属性定义)返回注意力掩码。

    什么是注意力掩码?

  • return_overflowing_tokens (bool, 可选, 默认为 False) — 是否返回溢出标记序列。如果提供一对输入 ID 序列(或一批对),并且 truncation_strategy = longest_firstTrue,则会引发错误,而不是返回溢出标记。
  • return_special_tokens_mask (bool, 可选, 默认为 False) — 是否返回特殊标记掩码信息。
  • return_offsets_mapping (bool, 可选, 默认为 False) — 是否返回每个标记的 (char_start, char_end)

    这仅在继承自 PreTrainedTokenizerFast 的快速分词器上可用,如果使用 Python 的分词器,此方法将引发 NotImplementedError

  • return_length (bool, 可选, 默认为 False) — 是否返回编码输入品的长度。
  • verbose (bool, 可选, 默认为 True) — 是否打印更多信息和警告。
  • **kwargs — 传递给 self.tokenize() 方法。

返回

BatchEncoding

一个 BatchEncoding,包含以下字段:

  • input_ids — 要输入到模型中的标记 ID 列表。

    什么是输入 ID?

  • token_type_ids — 要输入到模型中的标记类型 ID 列表(当 return_token_type_ids=True 或如果 *“token_type_ids”* 在 self.model_input_names 中时)。

    什么是标记类型 ID?

  • attention_mask — 指定模型应关注哪些标记的索引列表(当 return_attention_mask=True 或如果 *“attention_mask”* 在 self.model_input_names 中时)。

    什么是注意力掩码?

  • overflowing_tokens — 溢出标记序列列表(当指定 max_lengthreturn_overflowing_tokens=True 时)。

  • num_truncated_tokens — 截断标记的数量(当指定 max_lengthreturn_overflowing_tokens=True 时)。

  • special_tokens_mask — 0 和 1 的列表,其中 1 表示添加的特殊标记,0 表示常规序列标记(当 add_special_tokens=Truereturn_special_tokens_mask=True 时)。

  • length — 输入的长度(当 return_length=True 时)

将一个或多个序列或一对或多对序列标记化并准备用于模型的主要方法。

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 output_char_offsets: bool = False **kwargs ) list[str]~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

参数

  • 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) — 是否输出字符偏移量。字符偏移量可以与采样率和模型下采样率结合使用,以计算转录字符的时间戳。

    请查看 ~models.wav2vec2.tokenization_wav2vec2.decode 的示例,以便更好地理解如何使用 output_word_offsets~model.wav2vec2_phoneme.tokenization_wav2vec2_phoneme.batch_decode 以类似的方式与音素和批处理输出一起使用。

  • kwargs (附加关键字参数, 可选) — 将传递给底层模型特定的解码方法。

返回

list[str]~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

解码后的句子。当 output_char_offsets == True 时,将是 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

通过调用 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 output_char_offsets: bool = False **kwargs ) str~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

参数

  • 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) — 是否输出字符偏移量。字符偏移量可以与采样率和模型下采样率结合使用,以计算转录字符的时间戳。

    请查看 ~models.wav2vec2.tokenization_wav2vec2.decode 的示例,以便更好地理解如何使用 output_word_offsets~model.wav2vec2_phoneme.tokenization_wav2vec2_phoneme.batch_decode 与音素的使用方式相同。

  • kwargs (附加关键字参数, 可选) — 将传递给底层模型特定的解码方法。

返回

str~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

解码后的句子。当 output_char_offsets == True 时,将是 ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

使用分词器和词汇表将 ID 序列转换为字符串,可以选择移除特殊标记并清理分词空间。

类似于执行 self.convert_tokens_to_string(self.convert_ids_to_tokens(token_ids))

音素化

< >

( text: str phonemizer_lang: typing.Optional[str] = None )

< > 在 GitHub 上更新