Transformers documentation

Wav2Vec2Phoneme

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2021-09-23 在 HF papers 上发布,并于 2021-12-17 贡献至 Hugging Face Transformers。

Wav2Vec2Phoneme

概述

Wav2Vec2Phoneme 模型由 Qiantong Xu、Alexei Baevski 和 Michael Auli 在 Simple and Effective Zero-shot Cross-lingual Phoneme Recognition (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_filebos_token = '<s>'eos_token = '</s>'unk_token = '<unk>'pad_token = '<pad>'phone_delimiter_token = ' 'word_delimiter_token = Nonedo_phonemize = Truephonemizer_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) — 是否应对输入进行音素化。仅当向 tokenizer 传入音素序列时,才应将 do_phonemize 设置为 False。
  • phonemizer_lang (str,可选,默认为 "en-us") — 分词器应将输入文本音素化到的音素集的语言。
  • phonemizer_backend (str,可选,默认为 "espeak") — phonemizer 库所使用的后端音素化库。默认为 espeak-ng。 有关更多信息,请参阅 phonemizer 包。
  • **kwargs — 传递给 PreTrainedTokenizer 的额外关键字参数

构建一个 Wav2Vec2PhonemeCTC 分词器。

该分词器继承自 PreTrainedTokenizer,其中包含一些主要方法。有关这些方法的更多信息,请参阅其父类。

__call__

< >

( text: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_pair: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Nonetext_pair_target: TextInput | PreTokenizedInput | list[TextInput] | list[PreTokenizedInput] | None = Noneadd_special_tokens: bool = Truepadding: bool | str | PaddingStrategy = Falsetruncation: bool | str | TruncationStrategy | None = Nonemax_length: int | None = Nonestride: int = 0is_split_into_words: bool = Falsepad_to_multiple_of: int | None = Nonepadding_side: str | None = Nonereturn_tensors: str | TensorType | None = Nonereturn_token_type_ids: bool | None = Nonereturn_attention_mask: bool | None = Nonereturn_overflowing_tokens: bool = Falsereturn_special_tokens_mask: bool = Falsereturn_offsets_mapping: bool = Falsereturn_length: bool = Falseverbose: bool = Truetokenizer_kwargs: dict[str, Any] | None = None**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(以消除与序列批次的歧义)。
  • tokenizer_kwargs (dict[str, Any], 可选) — 传递给 tokenizer 的额外 kwargs。这些 kwargs 将与显式参数及其他 kwargs 合并,其中显式参数具有更高的优先级。
  • add_special_tokens (bool,可选,默认为 True) — 在编码序列时是否添加特殊标记。此操作将使用底层的 PretrainedTokenizerBase.build_inputs_with_special_tokens 函数,该函数定义了哪些标记会自动添加到输入 ID 中。如果您希望自动添加 bos 或 eos 标记,此功能非常有用。
  • padding (bool, str 或 PaddingStrategy, ,可选, ,默认为 False) — 启用并控制填充。接受以下值:
    • True 或 'longest':填充至批次中最长的序列(如果仅提供单个序列,则不进行填充)。
    • 'max_length':填充至由参数 max_length 指定的最大长度;若未提供该参数,则填充至模型可接受的最大输入长度。
    • False 或 'do_not_pad'(默认值):不进行填充(即可以输出包含不同长度序列的批次)。
  • truncation (bool, str 或 TruncationStrategy, ,可选, ,默认为 False) — 启用并控制截断。接受以下值:
    • True 或 'longest_first':截断至由参数 max_length 指定的最大长度,或者如果未提供该参数,则截断至模型可接受的最大输入长度。这将逐个 token 进行截断,如果提供了一对序列(或一批序列对),则会从该对中最长的序列中移除一个 token。
    • 'only_first':截断至由参数 max_length 指定的最大长度,或者在未提供该参数时,截断至模型可接受的最大输入长度。如果提供了一对序列(或一批序列对),则仅截断其中的第一个序列。
    • 'only_second':截断至由参数 max_length 指定的最大长度,或者如果未提供该参数,则截断至模型可接受的最大输入长度。仅当提供了一对序列(或一批序列对)时,才会截断其中的第二个序列。
    • False 或 'do_not_truncate'(默认值):不进行截断(即,可以输出序列长度大于模型最大可接受输入大小的批次)。
  • max_length (int, 可选) — 控制截断/填充参数之一所使用的最大长度。如果未设置或设置为 None,则当截断/填充参数需要最大长度时,将使用预定义的最大模型长度。如果模型没有特定的最大输入长度(如 XLNet),则禁用截断/填充到最大长度的功能。

    如果未设置或设置为 None,当截断/填充参数需要最大长度时,将使用预定义的最大模型长度。如果模型没有特定的最大输入长度(例如 XLNet),则禁用截断/填充至最大长度的功能。

  • stride (int,可选,默认为 0) — 如果与 max_length 一起设置为某个数值,则当 return_overflowing_tokens=True 时,返回的溢出 token 将包含截断序列末尾的若干 token,以在截断序列和溢出序列之间提供一定的重叠。此参数的值定义了重叠 token 的数量。
  • is_split_into_words (bool,可选,默认为 False) — 输入是否已经预先分词(例如,已拆分为单词)。如果设置为 True,分词器将假设输入已经拆分为单词(例如,通过按空白字符拆分),然后对其进行分词。这对于命名实体识别(NER)或 token 分类非常有用。
  • pad_to_multiple_of (int, 可选) — 如果设置,则将序列填充为所提供值的倍数。需要启用 padding。 这对于在计算能力为 >= 7.5(Volta)的 NVIDIA 硬件上启用 Tensor Cores 的使用特别有用。
  • padding_side (str, 可选) — 模型应应用填充的一侧。应在 [‘right’, ‘left’] 之间进行选择。 默认值取自同名的类属性。
  • return_tensors (str 或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:
    • 'pt':返回 PyTorch torch.Tensor 对象。
    • 'np':返回 Numpy np.ndarray 对象。
  • return_token_type_ids (bool, 可选) — 是否返回 token type ID。如果保持默认值,将根据特定分词器的默认设置返回 token type ID,该设置由 return_outputs 属性定义。

    什么是 token type ID?

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

    什么是注意力掩码?

  • return_overflowing_tokens (bool,可选,默认为 False) — 是否返回溢出的 token 序列。如果提供了输入 id 的序列对(或序列对批次),且 truncation_strategy = longest_first 或 True,则会抛出错误,而不是返回溢出的 token。
  • return_special_tokens_mask (bool,可选,默认为 False) — 是否返回特殊 token 掩码信息。
  • return_offsets_mapping (bool, 可选, 默认为 False) — 是否返回 (char_start, char_end) 每个 token 的。

    此功能仅在继承自 PreTrainedTokenizerFast 的快速分词器上可用。如果使用 Python 分词器,此方法将抛出 NotImplementedError。

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

返回值

BatchEncoding

一个包含以下字段的 BatchEncoding:

  • input_ids — 要输入模型的 token id 列表。

    什么是输入 ID?

  • token_type_ids — 要输入模型的 token 类型 ID 列表(当 return_token_type_ids=True 或 self.model_input_names 中包含 “token_type_ids” 时)。

    什么是 token type ID?

  • attention_mask — 索引列表,指定模型应关注哪些 token(当 return_attention_mask=True 或 “attention_mask” 位于 self.model_input_names 中时)。

    什么是注意力掩码?

  • 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 表示添加的特殊标记,0 表示常规序列标记(当 add_special_tokens=True 且 return_special_tokens_mask=True 时)。

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

用于对一条或多条序列,或一对或多对序列进行分词并准备输入模型的主要方法。

batch_decode

< >

( sequences: typing.Union[list[int], list[list[int]], numpy.ndarray, ForwardRef('torch.Tensor')]skip_special_tokens: bool = Falseclean_up_tokenization_spaces: bool | None = Noneoutput_char_offsets: bool = False**kwargs ) → list[str] or ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

参数

  • sequences (Union[list[int], list[list[int]], np.ndarray, torch.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,将 token id 的列表的列表转换为字符串列表。

decode

< >

( token_ids: typing.Union[int, list[int], numpy.ndarray, ForwardRef('torch.Tensor')]skip_special_tokens: bool = Falseclean_up_tokenization_spaces: bool | None = Noneoutput_char_offsets: bool = False**kwargs ) → str or ~models.wav2vec2.tokenization_wav2vec2_phoneme.Wav2Vec2PhonemeCTCTokenizerOutput

参数

  • token_ids (Union[int, list[int], np.ndarray, torch.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))。

phonemize

< >

( text: strphonemizer_lang: str | None = None )

Update on GitHub