Wav2Vec2Phoneme
概述
Wav2Vec2Phoneme 模型由 Qiantong Xu、Alexei Baevski 和 Michael Auli 在 简单有效的零样本跨语言音素识别 (Xu 等人,2021) 中提出。
论文摘要如下:
自我训练、自监督预训练和无监督学习的最新进展使语音识别系统在没有任何标记数据的情况下也能获得良好的性能。然而,在许多情况下,可以使用相关语言的标记数据,但这些方法并未利用这些数据。本文扩展了之前关于零样本跨语言迁移学习的工作,通过微调一个多语言预训练的 wav2vec 2.0 模型来转录未见过的语言。这是通过使用发音特征将训练语言的音素映射到目标语言来实现的。实验表明,这种简单的方法显著优于之前的工作,之前的工作引入了特定于任务的架构,并且仅使用单语言预训练模型的一部分。
相关的检查点可以在 https://huggingface.co/models?other=phoneme-recognition 中找到。
此模型由 patrickvonplaten 贡献。
原始代码可以在这里找到 here。
使用技巧
- 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"
) — phonemizer 库将使用的后端音素化库。默认为espeak-ng
。有关更多信息,请参阅 phonemizer 包。**kwargs — 传递给 PreTrainedTokenizer 的其他关键字参数
构建 Wav2Vec2PhonemeCTC 分词器。
此分词器继承自 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 padding_side: 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 ) → 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 中。如果您想自动添加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
指定的最大长度,或者如果未提供该参数,则截断到模型可接受的最大输入长度。如果提供了一对序列(或一对序列的批次),则此操作将逐个标记进行截断,从该对中最长的序列中删除一个标记。'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
。这对于在具有计算能力>= 7.5
(Volta)的 NVIDIA 硬件上启用 Tensor Core 特别有用。 - padding_side (
str
, 可选) — 模型应在其上应用填充的一侧。应在 [‘right’, ‘left’] 中选择。默认值从同名的类属性中获取。 - return_tensors (
str
或 TensorType, 可选) — 如果设置,将返回张量而不是 Python 整数列表。可接受的值为:'tf'
:返回 TensorFlowtf.constant
对象。'pt'
:返回 PyTorchtorch.Tensor
对象。'np'
:返回 NumPynp.ndarray
对象。
- return_token_type_ids (
bool
,可选) — 是否返回 token 类型 ID。如果保留默认值,则将根据特定分词器的默认值返回 token 类型 ID,由return_outputs
属性定义。 - return_attention_mask (
bool
,可选) — 是否返回注意力掩码。如果保留默认值,则将根据特定分词器的默认值返回注意力掩码,由return_outputs
属性定义。 - return_overflowing_tokens (
bool
,可选,默认为False
) — 是否返回溢出的 token 序列。如果使用truncation_strategy = longest_first
或True
提供了一对输入 ID 序列(或一对序列的批次),则会引发错误而不是返回溢出的 token。 - 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,包含以下字段
-
input_ids — 要馈送到模型的 token ID 列表。
-
token_type_ids — 要馈送到模型的 token 类型 ID 列表(当
return_token_type_ids=True
或 “token_type_ids” 位于self.model_input_names
中时)。 -
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 表示添加的特殊 token,0 表示常规序列 token(当
add_special_tokens=True
且return_special_tokens_mask=True
时)。 -
length — 输入的长度(当
return_length=True
时)
用于分词并为模型准备一个或多个序列或一个或多个序列对的主要方法。
batch_decode
< source >( sequences: Union skip_special_tokens: bool = False clean_up_tokenization_spaces: 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
。
通过调用解码将令牌 ID 的列表列表转换为字符串列表。
解码
< 源代码 >( token_ids: Union skip_special_tokens: bool = False clean_up_tokenization_spaces: 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
, 可选) — 是否清理标记化空格。
返回
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))
。