目录

torchaudio.pipelines

pipelines 子包包含用于访问预训练权重模型的 API,以及与这些预训练权重相关的信息和辅助函数。

RNN-T 流式/非流式 ASR

RNNTBundle

class torchaudio.pipelines.RNNTBundle[source]

用于捆绑组件以执行基于 RNN-T 模型的自动语音识别(ASR,即语音转文本)推理的数据类。

更具体地说,该类提供的方法用于生成特征化流水线、封装指定 RNN-T 模型的解码器以及输出令牌后处理器,三者共同构成一个完整的端到端 ASR 推理流水线,能够根据原始波形生成文本序列。

它既支持非流式(全上下文)推理,也支持流式推理。

用户不应直接实例化此类对象;相反,用户应使用模块中存在的实例(代表预训练模型),例如 EMFORMER_RNNT_BASE_LIBRISPEECH

Example
>>> import torchaudio
>>> from torchaudio.pipelines import EMFORMER_RNNT_BASE_LIBRISPEECH
>>> import torch
>>>
>>> # Non-streaming inference.
>>> # Build feature extractor, decoder with RNN-T model, and token processor.
>>> feature_extractor = EMFORMER_RNNT_BASE_LIBRISPEECH.get_feature_extractor()
100%|███████████████████████████████| 3.81k/3.81k [00:00<00:00, 4.22MB/s]
>>> decoder = EMFORMER_RNNT_BASE_LIBRISPEECH.get_decoder()
Downloading: "https://download.pytorch.org/torchaudio/models/emformer_rnnt_base_librispeech.pt"
100%|███████████████████████████████| 293M/293M [00:07<00:00, 42.1MB/s]
>>> token_processor = EMFORMER_RNNT_BASE_LIBRISPEECH.get_token_processor()
100%|███████████████████████████████| 295k/295k [00:00<00:00, 25.4MB/s]
>>>
>>> # Instantiate LibriSpeech dataset; retrieve waveform for first sample.
>>> dataset = torchaudio.datasets.LIBRISPEECH("/home/librispeech", url="test-clean")
>>> waveform = next(iter(dataset))[0].squeeze()
>>>
>>> with torch.no_grad():
>>>     # Produce mel-scale spectrogram features.
>>>     features, length = feature_extractor(waveform)
>>>
>>>     # Generate top-10 hypotheses.
>>>     hypotheses = decoder(features, length, 10)
>>>
>>> # For top hypothesis, convert predicted tokens to text.
>>> text = token_processor(hypotheses[0][0])
>>> print(text)
he hoped there would be stew for dinner turnips and carrots and bruised potatoes and fat mutton pieces to [...]
>>>
>>>
>>> # Streaming inference.
>>> hop_length = EMFORMER_RNNT_BASE_LIBRISPEECH.hop_length
>>> num_samples_segment = EMFORMER_RNNT_BASE_LIBRISPEECH.segment_length * hop_length
>>> num_samples_segment_right_context = (
>>>     num_samples_segment + EMFORMER_RNNT_BASE_LIBRISPEECH.right_context_length * hop_length
>>> )
>>>
>>> # Build streaming inference feature extractor.
>>> streaming_feature_extractor = EMFORMER_RNNT_BASE_LIBRISPEECH.get_streaming_feature_extractor()
>>>
>>> # Process same waveform as before, this time sequentially across overlapping segments
>>> # to simulate streaming inference. Note the usage of ``streaming_feature_extractor`` and ``decoder.infer``.
>>> state, hypothesis = None, None
>>> for idx in range(0, len(waveform), num_samples_segment):
>>>     segment = waveform[idx: idx + num_samples_segment_right_context]
>>>     segment = torch.nn.functional.pad(segment, (0, num_samples_segment_right_context - len(segment)))
>>>     with torch.no_grad():
>>>         features, length = streaming_feature_extractor(segment)
>>>         hypotheses, state = decoder.infer(features, length, 10, state=state, hypothesis=hypothesis)
>>>     hypothesis = hypotheses[0]
>>>     transcript = token_processor(hypothesis[0])
>>>     if transcript:
>>>         print(transcript, end=" ", flush=True)
he hoped there would be stew for dinner turn ips and car rots and bru 'd oes and fat mut ton pieces to [...]
Tutorials using RNNTBundle:
get_decoder()torchaudio.models.RNNTBeamSearch[source]

构建 RNN-T 解码器。

Returns

RNNTBeamSearch

get_feature_extractor()RNNTBundle.FeatureExtractor[source]

构建用于非流式(全上下文)自动语音识别的特征提取器。

Returns

FeatureExtractor

get_streaming_feature_extractor()RNNTBundle.FeatureExtractor[source]

构建用于流式(同时)自动语音识别的特征提取器。

Returns

FeatureExtractor

get_token_processor()RNNTBundle.TokenProcessor[source]

构建令牌处理器。

Returns

TokenProcessor

property sample_rate

输入波形的采样率(以每秒周期数计)。

Type

整数

property n_fft

要使用的 FFT 窗口大小。

Type

整数

property n_mels

从输入波形中提取的梅尔频谱特征数量。

Type

整数

property hop_length

模型期望的输入中连续帧之间的样本数量。

Type

整数

property segment_length

模型期望的输入片段中的帧数。

Type

整数

property right_context_length

模型期望的输入中右侧上下文块内的帧数。

Type

整数

RNNTBundle - FeatureExtractor

class RNNTBundle.FeatureExtractor[source]
abstract __call__(input: torch.Tensor)Tuple[torch.Tensor, torch.Tensor]

根据给定的输入张量生成特征和长度输出。

Parameters

input (torch.Tensor) – 输入张量。

Returns

torch.Tensor:

特征,形状为 (length, *)

torch.Tensor:

长度,形状为 (1,)

Return type

(torch.Tensor, torch.Tensor)

RNNTBundle - TokenProcessor

class RNNTBundle.TokenProcessor[source]
abstract __call__(tokens: List[int], **kwargs)str

将给定的令牌列表解码为文本序列。

Parameters

tokens (List[int]) – 要解码的 token 列表。

Returns

解码后的文本序列。

Return type

字符串

EMFORMER_RNNT_BASE_LIBRISPEECH

torchaudio.pipelines.EMFORMER_RNNT_BASE_LIBRISPEECH

基于预训练 Emformer-RNNT 的自动语音识别(ASR)流程,支持流式与非流式推理。

基础模型由 torchaudio.models.emformer_rnnt_base() 构建,并使用训练脚本 train.py 此处 在 LibriSpeech 上训练的权重(采用默认参数)。

请参阅 RNNTBundle 以获取使用说明。

wav2vec 2.0 / HuBERT - 表示学习

class torchaudio.pipelines.Wav2Vec2Bundle[source]

用于捆绑关联信息以使用预训练 Wav2Vec2Model 的数据类。

此类提供用于实例化预训练模型的接口,以及检索预训练权重和与该模型配合使用的附加数据所需的信息。

Torchaudio 库会实例化此类对象,每个对象代表一个不同的预训练模型。客户端代码应通过这些实例访问预训练模型。

请参阅下方了解用法和可用值。

Example - Feature Extraction
>>> import torchaudio
>>>
>>> bundle = torchaudio.pipelines.HUBERT_BASE
>>>
>>> # Build the model and load pretrained weight.
>>> model = bundle.get_model()
Downloading:
100%|███████████████████████████████| 360M/360M [00:06<00:00, 60.6MB/s]
>>>
>>> # Resample audio to the expected sampling rate
>>> waveform = torchaudio.functional.resample(waveform, sample_rate, bundle.sample_rate)
>>>
>>> # Extract acoustic features
>>> features, _ = model.extract_features(waveform)
get_model(self, *, dl_kwargs=None)torchaudio.models.Wav2Vec2Model[source]

构建模型并加载预训练权重。

权重文件已从互联网下载并缓存,与 torch.hub.load_state_dict_from_url()

Parameters

dl_kwargs (关键字参数字典) – 传递给 torch.hub.load_state_dict_from_url()

property sample_rate

模型训练所用音频的采样率。

Type

浮点型

WAV2VEC2_BASE

torchaudio.pipelines.WAV2VEC2_BASE

采用“Base”配置的 wav2vec 2.0 模型。

在来自 LibriSpeech 数据集 [1] 的 960 小时无标签音频上进行预训练(“train-clean-100”、“train-clean-360”和“train-other-500”的组合)。未进行微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2Bundle()

WAV2VEC2_LARGE

torchaudio.pipelines.WAV2VEC2_LARGE

构建“大型”wav2vec2 模型。

在来自 LibriSpeech 数据集 [1] 的 960 小时无标签音频上进行预训练(“train-clean-100”、“train-clean-360”和“train-other-500”的组合)。未进行微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2Bundle()

WAV2VEC2_LARGE_LV60K

torchaudio.pipelines.WAV2VEC2_LARGE_LV60K

构建“large-lv60k”wav2vec2 模型。

在来自Libri-Light数据集的60,000小时未标注音频上进行预训练 [3]。 未经过微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2Bundle()

WAV2VEC2_XLSR53

torchaudio.pipelines.WAV2VEC2_XLSR53

采用“Base”配置的 wav2vec 2.0 模型。

在来自多个数据集的 56,000 小时无标签音频上进行训练( Multilingual LibriSpeech [4]、 CommonVoice [5] 和 BABEL [6])。 未进行微调。

最初由《用于语音识别的无监督跨语言表示学习》一文的作者发布 [7],采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源代码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2Bundle()

HUBERT_BASE

torchaudio.pipelines.HUBERT_BASE

采用“Base”配置的 HuBERT 模型。

在来自 LibriSpeech 数据集 [1] 的 960 小时无标签音频上进行预训练(“train-clean-100”、“train-clean-360”和“train-other-500”的组合)。未进行微调。

最初由 HuBERT [8] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2Bundle()

HUBERT_LARGE

torchaudio.pipelines.HUBERT_LARGE

采用“大型”配置的 HuBERT 模型。

在来自Libri-Light数据集的60,000小时未标注音频上进行预训练 [3]。 未经过微调。

最初由 HuBERT [8] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2Bundle()

HUBERT_XLARGE

torchaudio.pipelines.HUBERT_XLARGE

采用“超大”配置的 HuBERT 模型。

在来自Libri-Light数据集的60,000小时未标注音频上进行预训练 [3]。 未经过微调。

最初由 HuBERT [8] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2Bundle()

wav2vec 2.0 / HuBERT - 微调后的自动语音识别

Wav2Vec2ASRBundle

class torchaudio.pipelines.Wav2Vec2ASRBundle[source]

用于捆绑关联信息以使用预训练 Wav2Vec2Model 的数据类。

此类提供用于实例化预训练模型的接口,以及检索预训练权重和与该模型配合使用的附加数据所需的信息。

Torchaudio 库会实例化此类对象,每个对象代表一个不同的预训练模型。客户端代码应通过这些实例访问预训练模型。

请参阅下方了解用法和可用值。

Example - ASR
>>> import torchaudio
>>>
>>> bundle = torchaudio.pipelines.HUBERT_ASR_LARGE
>>>
>>> # Build the model and load pretrained weight.
>>> model = bundle.get_model()
Downloading:
100%|███████████████████████████████| 1.18G/1.18G [00:17<00:00, 73.8MB/s]
>>>
>>> # Check the corresponding labels of the output.
>>> labels = bundle.get_labels()
>>> print(labels)
('-', '|', 'E', 'T', 'A', 'O', 'N', 'I', 'H', 'S', 'R', 'D', 'L', 'U', 'M', 'W', 'C', 'F', 'G', 'Y', 'P', 'B', 'V', 'K', "'", 'X', 'J', 'Q', 'Z')
>>>
>>> # Resample audio to the expected sampling rate
>>> waveform = torchaudio.functional.resample(waveform, sample_rate, bundle.sample_rate)
>>>
>>> # Infer the label probability distribution
>>> emissions, _ = model(waveform)
>>>
>>> # Pass emission to decoder
>>> # `ctc_decode` is for illustration purpose only
>>> transcripts = ctc_decode(emissions, labels)
Tutorials using Wav2Vec2ASRBundle:
get_model(self, *, dl_kwargs=None)torchaudio.models.Wav2Vec2Model

构建模型并加载预训练权重。

权重文件已从互联网下载并缓存,与 torch.hub.load_state_dict_from_url()

Parameters

dl_kwargs (关键字参数字典) – 传递给 torch.hub.load_state_dict_from_url()

get_labels(*, blank: str = '-')Tuple[str][source]

输出类别标签(仅适用于微调后的模型包)

第一个是空白标记,且可自定义。

Parameters

blank (str, optional) – 空白标记。(默认值:'-'

Returns

对于在 ASR 上微调的模型,返回表示输出类别标签的字符串元组。

Return type

Tuple[str]

Example
>>> import torchaudio
>>> torchaudio.models.HUBERT_ASR_LARGE.get_labels()
('-', '|', 'E', 'T', 'A', 'O', 'N', 'I', 'H', 'S', 'R', 'D', 'L', 'U', 'M', 'W', 'C', 'F', 'G', 'Y', 'P', 'B', 'V', 'K', "'", 'X', 'J', 'Q', 'Z')
property sample_rate

模型训练所用音频的采样率。

Type

浮点型

WAV2VEC2_ASR_BASE_10M

torchaudio.pipelines.WAV2VEC2_ASR_BASE_10M

构建带有额外线性模块的“基础”wav2vec2 模型

使用来自 LibriSpeech 数据集的 960 小时未标注音频进行预训练 [1] (包括“train-clean-100”、“train-clean-360”和“train-other-500”),并 在来自 Libri-Light 数据集的 10 分钟已转录音频上针对 ASR 进行了微调 [3] (“train-10min”子集)。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_BASE_100H

torchaudio.pipelines.WAV2VEC2_ASR_BASE_100H

构建带有额外线性模块的“基础”wav2vec2 模型

在来自 LibriSpeech 数据集 [1] 的 960 小时无标签音频上进行预训练(“train-clean-100”、“train-clean-360”和“train-other-500”的组合),并在来自“train-clean-100”子集的 100 小时转录音频上针对 ASR 进行微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_BASE_960H

torchaudio.pipelines.WAV2VEC2_ASR_BASE_960H

构建带有额外线性模块的“基础”wav2vec2 模型

在来自 LibriSpeech 数据集 [1] 的 960 小时无标签音频上进行预训练(“train-clean-100”、“train-clean-360”和“train-other-500”的组合),并在带有相应转录文本的相同音频上针对 ASR 进行微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_LARGE_10M

torchaudio.pipelines.WAV2VEC2_ASR_LARGE_10M

构建带有额外线性模块的“大型”wav2vec2 模型

使用来自 LibriSpeech 数据集的 960 小时未标注音频进行预训练 [1] (包括“train-clean-100”、“train-clean-360”和“train-other-500”),并 在来自 Libri-Light 数据集的 10 分钟已转录音频上针对 ASR 进行了微调 [3] (“train-10min”子集)。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_LARGE_100H

torchaudio.pipelines.WAV2VEC2_ASR_LARGE_100H

构建带有额外线性模块的“大型”wav2vec2 模型

在来自 LibriSpeech 数据集 [1] 的 960 小时无标签音频上进行预训练(“train-clean-100”、“train-clean-360”和“train-other-500”的组合),并在来自同一数据集(“train-clean-100”子集)的 100 小时转录音频上针对 ASR 进行微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_LARGE_960H

torchaudio.pipelines.WAV2VEC2_ASR_LARGE_960H

构建带有额外线性模块的“大型”wav2vec2 模型

在来自 LibriSpeech 数据集 [1] 的 960 小时无标签音频上进行预训练(“train-clean-100”、“train-clean-360”和“train-other-500”的组合),并在带有相应转录文本的相同音频上针对 ASR 进行微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_LARGE_LV60K_10M

torchaudio.pipelines.WAV2VEC2_ASR_LARGE_LV60K_10M

使用额外的线性模块构建“large-lv60k”wav2vec2 模型

在来自Libri-Light数据集的60,000小时未标注音频上进行预训练 [3],并在来自同一数据集(“train-10min”子集)的10分钟已转录音频上针对ASR进行了微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_LARGE_LV60K_100H

torchaudio.pipelines.WAV2VEC2_ASR_LARGE_LV60K_100H

使用额外的线性模块构建“large-lv60k”wav2vec2 模型

在来自Libri-Light数据集 [3] 的 60,000 小时无标签音频上进行预训练,并在来自LibriSpeech数据集 [1](“train-clean-100”子集)的 100 小时转录音频上针对 ASR 进行微调。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

WAV2VEC2_ASR_LARGE_LV60K_960H

torchaudio.pipelines.WAV2VEC2_ASR_LARGE_LV60K_960H

使用额外的线性模块构建“large-lv60k”wav2vec2 模型

在来自 Libri-Light [3] 数据集的 60,000 小时无标签音频上进行预训练,并在来自 LibriSpeech 数据集 [1] 的 960 小时转录音频上针对 ASR 进行微调(“train-clean-100”、“train-clean-360”和“train-other-500”的组合)。

最初由 wav2vec 2.0 [2] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

VOXPOPULI_ASR_BASE_10K_DE

torchaudio.pipelines.VOXPOPULI_ASR_BASE_10K_DE

采用“Base”配置的 wav2vec 2.0 模型。

在来自 VoxPopuli 数据集 [9] 的 10k 小时无标签音频上进行预训练("10k"子集,包含 23 种语言)。 在来自 "de" 子集的 282 小时转录音频上针对 ASR 进行微调。

最初由 VoxPopuli 的作者发布 [9],采用 CC BY-NC 4.0 许可,并以相同许可重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

VOXPOPULI_ASR_BASE_10K_EN

torchaudio.pipelines.VOXPOPULI_ASR_BASE_10K_EN

采用“Base”配置的 wav2vec 2.0 模型。

在来自 VoxPopuli 数据集 [9] 的 10k 小时无标签音频上进行预训练("10k"子集,包含 23 种语言)。

针对“en”子集中 543 小时转录音频的 ASR 任务进行了微调。 最初由 VoxPopuli [9] 的作者发布,采用 CC BY-NC 4.0 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

VOXPOPULI_ASR_BASE_10K_ES

torchaudio.pipelines.VOXPOPULI_ASR_BASE_10K_ES

采用“Base”配置的 wav2vec 2.0 模型。

在来自 VoxPopuli 数据集 [9] 的 10k 小时无标签音频上进行预训练(“10k”子集,包含 23 种语言)。 在来自“es”子集的 166 小时转录音频上针对 ASR 进行微调。

最初由 VoxPopuli 的作者发布 [9],采用 CC BY-NC 4.0 许可,并以相同许可重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

VOXPOPULI_ASR_BASE_10K_FR

torchaudio.pipelines.VOXPOPULI_ASR_BASE_10K_FR

采用“Base”配置的 wav2vec 2.0 模型。

在来自 VoxPopuli 数据集 [9] 的 10k 小时无标签音频上进行预训练("10k"子集,包含 23 种语言)。 在来自 "fr" 子集的 211 小时转录音频上针对 ASR 进行微调。

最初由 VoxPopuli 的作者发布 [9],采用 CC BY-NC 4.0 许可,并以相同许可重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

VOXPOPULI_ASR_BASE_10K_IT

torchaudio.pipelines.VOXPOPULI_ASR_BASE_10K_IT

采用“Base”配置的 wav2vec 2.0 模型。

使用来自 VoxPopuli 数据集的 10k 小时未标注音频进行预训练 [9] (“10k”子集,包含 23 种语言)。 在来自“it”子集的 91 小时已转录音频上针对 ASR 进行了微调。

最初由 VoxPopuli 的作者发布 [9],采用 CC BY-NC 4.0 许可,并以相同许可重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

HUBERT_ASR_LARGE

torchaudio.pipelines.HUBERT_ASR_LARGE

采用“大型”配置的 HuBERT 模型。

在来自Libri-Light数据集的 60,000 小时未标注音频上进行预训练 [3],并在来自LibriSpeech数据集的 960 小时已转录音频上针对 ASR 进行了微调 [1] (包括“train-clean-100”、“train-clean-360”和“train-other-500”的组合)。

最初由 HuBERT [8] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

HUBERT_ASR_XLARGE

torchaudio.pipelines.HUBERT_ASR_XLARGE

采用“超大”配置的 HuBERT 模型。

在来自Libri-Light数据集的 60,000 小时未标注音频上进行预训练 [3],并在来自LibriSpeech数据集的 960 小时已转录音频上针对 ASR 进行了微调 [1] (包括“train-clean-100”、“train-clean-360”和“train-other-500”的组合)。

最初由 HuBERT [8] 的作者发布,采用 MIT 许可证,并以相同许可证重新分发。 [许可证, 源码]

有关用法,请参阅 torchaudio.pipelines.Wav2Vec2ASRBundle()

Tacotron2 文本转语音

Tacotron2TTSBundle

class torchaudio.pipelines.Tacotron2TTSBundle[source]

用于捆绑关联信息以使用预训练 Tacotron2 和声码器的数据类。

此类提供用于实例化预训练模型的接口,以及检索预训练权重和与该模型配合使用的附加数据所需的信息。

Torchaudio 库会实例化此类对象,每个对象代表一个不同的预训练模型。客户端代码应通过这些实例访问预训练模型。

请参阅下方了解用法和可用值。

Example - Character-based TTS pipeline with Tacotron2 and WaveRNN
>>> import torchaudio
>>>
>>> text = "Hello, T T S !"
>>> bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_CHAR_LJSPEECH
>>>
>>> # Build processor, Tacotron2 and WaveRNN model
>>> processor = bundle.get_text_processor()
>>> tacotron2 = bundle.get_tacotron2()
Downloading:
100%|███████████████████████████████| 107M/107M [00:01<00:00, 87.9MB/s]
>>> vocoder = bundle.get_vocoder()
Downloading:
100%|███████████████████████████████| 16.7M/16.7M [00:00<00:00, 78.1MB/s]
>>>
>>> # Encode text
>>> input, lengths = processor(text)
>>>
>>> # Generate (mel-scale) spectrogram
>>> specgram, lengths, _ = tacotron2.infer(input, lengths)
>>>
>>> # Convert spectrogram to waveform
>>> waveforms, lengths = vocoder(specgram, lengths)
>>>
>>> torchaudio.save('hello-tts.wav', waveforms, vocoder.sample_rate)
Example - Phoneme-based TTS pipeline with Tacotron2 and WaveRNN
>>>
>>> # Note:
>>> #     This bundle uses pre-trained DeepPhonemizer as
>>> #     the text pre-processor.
>>> #     Please install deep-phonemizer.
>>> #     See https://github.com/as-ideas/DeepPhonemizer
>>> #     The pretrained weight is automatically downloaded.
>>>
>>> import torchaudio
>>>
>>> text = "Hello, TTS!"
>>> bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_PHONE_LJSPEECH
>>>
>>> # Build processor, Tacotron2 and WaveRNN model
>>> processor = bundle.get_text_processor()
Downloading:
100%|███████████████████████████████| 63.6M/63.6M [00:04<00:00, 15.3MB/s]
>>> tacotron2 = bundle.get_tacotron2()
Downloading:
100%|███████████████████████████████| 107M/107M [00:01<00:00, 87.9MB/s]
>>> vocoder = bundle.get_vocoder()
Downloading:
100%|███████████████████████████████| 16.7M/16.7M [00:00<00:00, 78.1MB/s]
>>>
>>> # Encode text
>>> input, lengths = processor(text)
>>>
>>> # Generate (mel-scale) spectrogram
>>> specgram, lengths, _ = tacotron2.infer(input, lengths)
>>>
>>> # Convert spectrogram to waveform
>>> waveforms, lengths = vocoder(specgram, lengths)
>>>
>>> torchaudio.save('hello-tts.wav', waveforms, vocoder.sample_rate)
Tutorials using Tacotron2TTSBundle:
abstract get_text_processor(self, *, dl_kwargs=None)torchaudio.pipelines.Tacotron2TTSBundle.TextProcessor[source]

创建文本处理器

对于基于字符的流水线,该处理器将输入文本按字符拆分。 对于基于音素的流水线,该处理器将输入文本(字素)转换为音素。

如果需要预训练权重文件, torch.hub.download_url_to_file() 将用于下载它。

Parameters

dl_kwargs (关键字参数字典,) – 传递给 torch.hub.download_url_to_file()

Returns

一个可调用对象,它接受字符串或字符串列表作为输入,并返回编码文本的张量(Tensor)和有效长度的张量。 该对象还具有 tokens 属性,可用于还原分词形式。

Return type

TTSTextProcessor

Example - Character-based
>>> text = [
>>>     "Hello World!",
>>>     "Text-to-speech!",
>>> ]
>>> bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_CHAR_LJSPEECH
>>> processor = bundle.get_text_processor()
>>> input, lengths = processor(text)
>>>
>>> print(input)
tensor([[19, 16, 23, 23, 26, 11, 34, 26, 29, 23, 15,  2,  0,  0,  0],
        [31, 16, 35, 31,  1, 31, 26,  1, 30, 27, 16, 16, 14, 19,  2]],
       dtype=torch.int32)
>>>
>>> print(lengths)
tensor([12, 15], dtype=torch.int32)
>>>
>>> print([processor.tokens[i] for i in input[0, :lengths[0]]])
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!']
>>> print([processor.tokens[i] for i in input[1, :lengths[1]]])
['t', 'e', 'x', 't', '-', 't', 'o', '-', 's', 'p', 'e', 'e', 'c', 'h', '!']
Example - Phoneme-based
>>> text = [
>>>     "Hello, T T S !",
>>>     "Text-to-speech!",
>>> ]
>>> bundle = torchaudio.pipelines.TACOTRON2_WAVERNN_PHONE_LJSPEECH
>>> processor = bundle.get_text_processor()
Downloading:
100%|███████████████████████████████| 63.6M/63.6M [00:04<00:00, 15.3MB/s]
>>> input, lengths = processor(text)
>>>
>>> print(input)
tensor([[54, 20, 65, 69, 11, 92, 44, 65, 38,  2,  0,  0,  0,  0],
        [81, 40, 64, 79, 81,  1, 81, 20,  1, 79, 77, 59, 37,  2]],
       dtype=torch.int32)
>>>
>>> print(lengths)
tensor([10, 14], dtype=torch.int32)
>>>
>>> print([processor.tokens[i] for i in input[0]])
['HH', 'AH', 'L', 'OW', ' ', 'W', 'ER', 'L', 'D', '!', '_', '_', '_', '_']
>>> print([processor.tokens[i] for i in input[1]])
['T', 'EH', 'K', 'S', 'T', '-', 'T', 'AH', '-', 'S', 'P', 'IY', 'CH', '!']
abstract get_tacotron2(self, *, dl_kwargs=None)torchaudio.models.Tacotron2[source]

创建带有预训练权重的 Tacotron2 模型。

Parameters

dl_kwargs (关键字参数字典) – 传递给 torch.hub.load_state_dict_from_url()

Returns

生成的模型。

Return type

Tacotron2

abstract get_vocoder(self, *, dl_kwargs=None)torchaudio.pipelines.Tacotron2TTSBundle.Vocoder[source]

创建一个基于 WaveRNN 或 GriffinLim 的声码器模块。

如果需要预训练权重文件, torch.hub.load_state_dict_from_url() 将用于下载它。

Parameters

dl_kwargs (关键字参数字典) – 传递给 torch.hub.load_state_dict_from_url()

Returns

一个声码器模块,它接收频谱张量和一个可选的长度张量,然后返回生成的波形张量和一个可选的长度张量。

Return type

Callable[[Tensor, Optional[Tensor]], Tuple[Tensor, Optional[Tensor]]]

Tacotron2TTSBundle - 文本处理器

class Tacotron2TTSBundle.TextProcessor[source]

Tacotron2TTS 流程中文本处理部分的接口

查看 torchaudio.pipelines.Tacotron2TTSBundle.get_text_processor() 了解用法。

abstract property tokens

处理后的张量中每个值所代表的标记。

查看 torchaudio.pipelines.Tacotron2TTSBundle.get_text_processor() 了解用法。

Type

列表[字符串]

abstract __call__(texts: Union[str, List[str]])Tuple[torch.Tensor, torch.Tensor]

将给定的(一批)文本编码为数值张量

查看 torchaudio.pipelines.Tacotron2TTSBundle.get_text_processor() 了解用法。

Parameters

text (strstr 列表) – 输入文本。

Returns

Tensor:

编码后的文本。形状:(batch, max length)

Tensor:

批次中每个样本的有效长度。形状:(batch, )

Return type

(张量,张量)

Tacotron2TTSBundle - 声码器

class Tacotron2TTSBundle.Vocoder[source]

Tacotron2TTS 流程中声码器部分的接口

查看 torchaudio.pipelines.Tacotron2TTSBundle.get_vocoder() 了解用法。

abstract property sample_rate

生成波形的采样率

查看 torchaudio.pipelines.Tacotron2TTSBundle.get_vocoder() 了解用法。

Type

浮点型

abstract __call__(specgrams: torch.Tensor, lengths: Optional[torch.Tensor] = None)Tuple[torch.Tensor, Optional[torch.Tensor]]

根据给定的输入(例如频谱图)生成波形。

查看 torchaudio.pipelines.Tacotron2TTSBundle.get_vocoder() 了解用法。

Parameters
  • specgrams (Tensor) – 输入频谱图。形状:(batch, frequency bins, time)。 预期形状取决于具体实现。

  • lengths (TensorNone可选) – 批次中每个样本的有效长度。形状:(batch, )。 (默认值:None

Returns

Tensor:

生成的波形。形状:(batch, max length)

Tensor or None:

批次中每个样本的有效长度。形状:(batch, )

Return type

(张量,可选[张量])

TACOTRON2_WAVERNN_PHONE_LJSPEECH

torchaudio.pipelines.TACOTRON2_WAVERNN_PHONE_LJSPEECH

基于音素的TTS流程,包含 torchaudio.models.Tacotron2torchaudio.models.WaveRNN

文本处理器基于音素对输入文本进行编码。 它使用 DeepPhonemizer 将字母转换为音素。 该模型(en_us_cmudict_forward)是在 CMUDict 上训练的。

Tacotron2 在 LJSpeech [10] 上训练了 1,500 个 epoch。 您可以在 此处 找到训练脚本。 使用了以下参数;win_length=1100, hop_length=275, n_fft=2048, mel_fmin=40, 和 mel_fmax=11025

该 vocder 基于 torchaudio.models.WaveRNN。 它在 LJSpeech [10] 的 8 位深度波形上进行了训练,共 10,000 个 epoch。 您可以在 此处 找到训练脚本。

有关用法,请参阅 torchaudio.pipelines.Tacotron2TTSBundle()

示例 - “你好,世界!T T S 代表文本转语音!”

Spectrogram generated by Tacotron2

示例——“专家们的审查和证词使委员会得出结论,可能开火了五枪。”

Spectrogram generated by Tacotron2

TACOTRON2_WAVERNN_CHAR_LJSPEECH

torchaudio.pipelines.TACOTRON2_WAVERNN_CHAR_LJSPEECH

基于字符的TTS流程,包含 torchaudio.models.Tacotron2torchaudio.models.WaveRNN

文本处理器逐字符地对输入文本进行编码。

Tacotron2 在 LJSpeech [10] 上训练了 1,500 个 epoch。 您可以在 此处 找到训练脚本。 使用了以下参数;win_length=1100, hop_length=275, n_fft=2048, mel_fmin=40, 和 mel_fmax=11025

该 vocder 基于 torchaudio.models.WaveRNN。 它在 LJSpeech [10] 的 8 位深度波形上进行了训练,共 10,000 个 epoch。 您可以在 此处 找到训练脚本。

有关用法,请参阅 torchaudio.pipelines.Tacotron2TTSBundle()

示例 - “你好,世界!T T S 代表文本转语音!”

Spectrogram generated by Tacotron2

示例——“专家们的审查和证词使委员会得出结论,可能开火了五枪。”

Spectrogram generated by Tacotron2

TACOTRON2_GRIFFINLIM_PHONE_LJSPEECH

torchaudio.pipelines.TACOTRON2_GRIFFINLIM_PHONE_LJSPEECH

基于音素的TTS流程,包含 torchaudio.models.Tacotron2torchaudio.transforms.GriffinLim

文本处理器基于音素对输入文本进行编码。 它使用 DeepPhonemizer 将字母转换为音素。 该模型(en_us_cmudict_forward)是在 CMUDict 上训练的。

Tacotron2 在 LJSpeech [10] 数据集上训练了 1,500 个 epoch。 您可以在 此处 找到训练脚本。 文本处理器已设置为 “english_phonemes”

该声码器基于 torchaudio.transforms.GriffinLim

有关用法,请参阅 torchaudio.pipelines.Tacotron2TTSBundle()

示例 - “你好,世界!T T S 代表文本转语音!”

Spectrogram generated by Tacotron2

示例——“专家们的审查和证词使委员会得出结论,可能开火了五枪。”

Spectrogram generated by Tacotron2

TACOTRON2_GRIFFINLIM_CHAR_LJSPEECH

torchaudio.pipelines.TACOTRON2_GRIFFINLIM_CHAR_LJSPEECH

基于字符的TTS流程,包含 torchaudio.models.Tacotron2torchaudio.transforms.GriffinLim

文本处理器逐字符地对输入文本进行编码。

Tacotron2 在 LJSpeech [10] 数据集上训练了 1,500 个 epoch。 您可以在 此处 找到训练脚本。 使用了默认参数。

该声码器基于 torchaudio.transforms.GriffinLim

有关用法,请参阅 torchaudio.pipelines.Tacotron2TTSBundle()

示例 - “你好,世界!T T S 代表文本转语音!”

Spectrogram generated by Tacotron2

示例——“专家们的审查和证词使委员会得出结论,可能开火了五枪。”

Spectrogram generated by Tacotron2

参考文献

1(1,2,3,4,5,6,7,8,9,10,11,12,13)

Vassil Panayotov, Guoguo Chen, Daniel Povey, 和 Sanjeev Khudanpur。Librispeech:一个基于公共领域有声书的语音识别语料库。在 2015 IEEE 国际声学、语音与信号处理会议(ICASSP),卷,5206–5210。2015。 doi:10.1109/ICASSP.2015.7178964.

2(1,2,3,4,5,6,7,8,9,10,11,12)

Alexei Baevski, Henry Zhou, Abdelrahman Mohamed, 和 Michael Auli. Wav2vec 2.0: 一个用于语音表示自监督学习的框架。2020. arXiv:2006.11477.

3(1,2,3,4,5,6,7,8,9,10)

J. Kahn, M. Rivière, W. Zheng, E. Kharitonov, Q. Xu, P. E. Mazaré, J. Karadayi, V. Liptchinsky, R. Collobert, C. Fuegen, T. Likhomanenko, G. Synnaeve, A. Joulin, A. Mohamed, and E. Dupoux. Libri-light: 一个用于有限或无监督的语音识别的基准。In ICASSP 2020 - 2020 IEEE 国际声学、语音和信号处理会议(ICASSP), 7669–7673. 2020. https://github.com/facebookresearch/libri-light.

4

Vineel Pratap, Qiantong Xu, Anuroop Sriram, Gabriel Synnaeve, 和 Ronan Collobert。Mls:一个用于语音研究的大规模多语言数据集。Interspeech 2020,2020年10月。URL:http://dx.doi.org/10.21437/Interspeech.2020-2826doi:10.21437/interspeech.2020-2826

5

Rosana Ardila, Megan Branson, Kelly Davis, Michael Henretty, Michael Kohler, Josh Meyer, Reuben Morais, Lindsay Saunders, Francis M. Tyers, 和 Gregor Weber。Common voice: 一个大规模多语言语音语料库。2020。 arXiv:1912.06670.

6

Mark John Francis Gales, Kate Knill, Anton Ragni, 和 Shakti Prasad Rath。面向低资源语言的语音识别与关键词检测:CUEd 的 Babel 项目研究。发表于 SLTU。2014 年。

7

Alexis Conneau, Alexei Baevski, Ronan Collobert, Abdelrahman Mohamed, 和 Michael Auli. 用于语音识别的无监督跨语言表征学习. 2020. arXiv:2006.13979.

8(1,2,3,4,5)

魏宁 胡, 本杰明·博尔特, 姚宏·赫伯特·蔡, 库沙尔·拉克霍蒂亚, 鲁斯兰·萨拉胡丁诺夫, 和阿卜杜勒拉赫曼·穆罕默德。Hubert:通过隐藏单元的掩码预测进行自监督语音表征学习。2021。arXiv:2106.07447.

9(1,2,3,4,5,6,7,8,9,10)

王畅汉,Morgane Rivière,Ann Lee,Anne Wu,Chaitanya Talnikar,Daniel Haziza,Mary Williamson,Juan Miguel Pino,和Emmanuel Dupoux。Voxpopuli:一个大规模多语言语音语料库,用于表示学习、半监督学习和解释。CoRR,2021。URL:https://arxiv.org/abs/2101.00390arXiv:2101.00390

10(1,2,3,4,5,6)

Keith Ito 和 Linda Johnson。The lj speech dataset。https://keithito.com/LJ-Speech-Dataset/,2017。

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源