speechbrain.inference.ASR 模块

指定自动语音识别(ASR)模块的推理接口。

Authors:
  • 阿库·罗赫 2021

  • 彼得·普兰廷加 2021

  • 洛伦·卢戈斯奇 2020

  • Mirco Ravanelli 2020

  • Titouan Parcollet 2021

  • 阿卜杜勒·赫巴 2021

  • 安德烈亚斯·诺茨 2022, 2023

  • Pooneh Mousavi 2023

  • Sylvain de Langen 2023, 2024

  • 阿德尔·穆门 2023, 2024

  • 普拉迪亚·坎达尔卡 2023

摘要

类:

ASRStreamingContext

流媒体元数据,由make_streaming_context()初始化(有关此处字段初始化的详细信息,请参见该函数)。

ASRWhisperSegment

用于Whisper ASR流式处理的单个音频块。

EncoderASR

一个即用型的编码器ASR模型

EncoderDecoderASR

一个即用型的编码器-解码器ASR模型

StreamingASR

一个即用型、支持流式传输的ASR模型。

WhisperASR

一个即用型的Whisper ASR模型。

参考

class speechbrain.inference.ASR.EncoderDecoderASR(*args, **kwargs)[source]

基础类:Pretrained

一个即用型的编码器-解码器自动语音识别模型

该类可以仅用于运行编码器(encode())以提取特征,也可以用于运行整个编码器-解码器模型(transcribe())以转录语音。给定的YAML必须包含*_NEEDED[]列表中指定的字段。

Parameters:
  • *args (元组)

  • **kwargs (dict) – 参数被转发到 Pretrained 父类。

Example

>>> from speechbrain.inference.ASR import EncoderDecoderASR
>>> tmpdir = getfixture("tmpdir")
>>> asr_model = EncoderDecoderASR.from_hparams(
...     source="speechbrain/asr-crdnn-rnnlm-librispeech",
...     savedir=tmpdir,
... )  
>>> asr_model.transcribe_file("tests/samples/single-mic/example2.flac")  
"MY FATHER HAS REVEALED THE CULPRIT'S NAME"
HPARAMS_NEEDED = ['tokenizer']
MODULES_NEEDED = ['encoder', 'decoder']
transcribe_file(path, **kwargs)[source]

将给定的音频文件转录为一系列单词。

Parameters:
  • path (str) – 要转录的音频文件的路径。

  • **kwargs (dict) – 传递给 load_audio 的参数。

Returns:

由这个ASR系统生成的音频文件转录。

Return type:

str

encode_batch(wavs, wav_lens)[source]

将输入音频编码为一系列隐藏状态

波形应该已经是模型所需的格式。 你可以调用: normalized = EncoderDecoderASR.normalizer(signal, sample_rate) 在大多数情况下获取正确转换的信号。

Parameters:
  • wavs (torch.Tensor) – 波形批次 [batch, time, channels] 或 [batch, time],具体取决于模型。

  • wav_lens (torch.Tensor) – 波形相对于批次中最长波形的长度,形状为 [batch] 的张量。最长的波形应具有相对长度 1.0,其他波形的长度为 len(waveform) / max_length。用于忽略填充部分。

Returns:

编码的批次

Return type:

torch.Tensor

transcribe_batch(wavs, wav_lens)[source]

将输入的音频转录为一系列单词

波形应该已经是模型所需的格式。 你可以调用: normalized = EncoderDecoderASR.normalizer(signal, sample_rate) 在大多数情况下获取正确转换的信号。

Parameters:
  • wavs (torch.Tensor) – 波形批次 [batch, time, channels] 或 [batch, time],具体取决于模型。

  • wav_lens (torch.Tensor) – 波形相对于批次中最长波形的长度,形状为 [batch] 的张量。最长的波形应具有相对长度 1.0,其他波形的长度为 len(waveform) / max_length。用于忽略填充部分。

Returns:

  • list – 批次中每个转录的波形。

  • tensor – 每个预测的令牌ID。

forward(wavs, wav_lens)[source]

运行完整转录 - 注意:解码过程中没有梯度

class speechbrain.inference.ASR.EncoderASR(*args, **kwargs)[source]

基础类:Pretrained

一个即用型的编码器ASR模型

该类可以仅用于运行编码器(encode())以提取特征,也可以用于运行整个编码器+解码器函数模型(transcribe())以转录语音。给定的YAML必须包含*_NEEDED[]列表中指定的字段。

Parameters:
  • *args (元组)

  • **kwargs (dict) – 参数被转发到 Pretrained 父类。

Example

>>> from speechbrain.inference.ASR import EncoderASR
>>> tmpdir = getfixture("tmpdir")
>>> asr_model = EncoderASR.from_hparams(
...     source="speechbrain/asr-wav2vec2-commonvoice-fr",
...     savedir=tmpdir,
... ) 
>>> asr_model.transcribe_file("samples/audio_samples/example_fr.wav") 
HPARAMS_NEEDED = ['tokenizer', 'decoding_function']
MODULES_NEEDED = ['encoder']
set_decoding_function()[source]

根据超参数文件中定义的参数设置解码函数。

解码函数由超参数文件中指定的decoding_function决定。 它可以是表示解码函数的functools.partial对象,也可以是用于束搜索解码的 speechbrain.decoders.ctc.CTCBaseSearcher实例。

Raises:
ValueError: If the decoding function is neither a functools.partial nor an instance of

speechbrain.decoders.ctc.CTCBaseSearcher.

Note:
  • 对于贪婪解码(functools.partial),提供的decoding_function直接分配。

  • 对于CTCBeamSearcher解码,会创建一个指定的decoding_function实例,并且

根据分词器类型添加了额外的参数。

transcribe_file(path, **kwargs)[source]

将给定的音频文件转录为一系列单词。

Parameters:
  • path (str) – 要转录的音频文件的路径。

  • **kwargs (dict) – 传递给 load_audio 的参数。

Returns:

由这个ASR系统生成的音频文件转录。

Return type:

str

encode_batch(wavs, wav_lens)[source]

将输入音频编码为一系列隐藏状态

波形应该已经是模型所需的格式。 你可以调用: normalized = EncoderASR.normalizer(signal, sample_rate) 在大多数情况下获取正确转换的信号。

Parameters:
  • wavs (torch.Tensor) – 波形批次 [batch, time, channels] 或 [batch, time],具体取决于模型。

  • wav_lens (torch.Tensor) – 波形相对于批次中最长波形的长度,形状为 [batch] 的张量。最长的波形应具有相对长度 1.0,其他波形的长度为 len(waveform) / max_length。用于忽略填充部分。

Returns:

编码的批次

Return type:

torch.Tensor

transcribe_batch(wavs, wav_lens)[source]

将输入的音频转录为一系列单词

波形应该已经是模型所需的格式。 你可以调用: normalized = EncoderASR.normalizer(signal, sample_rate) 在大多数情况下获取正确转换的信号。

Parameters:
  • wavs (torch.Tensor) – 波形批次 [batch, time, channels] 或 [batch, time],具体取决于模型。

  • wav_lens (torch.Tensor) – 波形相对于批次中最长波形的长度,形状为 [batch] 的张量。最长的波形应具有相对长度 1.0,其他波形的长度为 len(waveform) / max_length。用于忽略填充部分。

Returns:

  • list – 批次中每个转录的波形。

  • tensor – 每个预测的令牌ID。

forward(wavs, wav_lens)[source]

运行编码器

class speechbrain.inference.ASR.ASRWhisperSegment(start: float, end: float, chunk: Tensor, lang_id: str | None = None, words: str | None = None, tokens: List[str] | None = None, prompt: List[str] | None = None, avg_log_probs: float | None = None, no_speech_prob: float | None = None)[source]

基础类:object

用于Whisper ASR流式传输的单个音频块。

此对象旨在随着流处理的进展进行修改,并传递给较低级别的API,如encode_chunkdecode_chunk等。

start

音频块的开始时间。

Type:

float

end

音频块结束时间。

Type:

float

chunk

音频块,形状为 [时间, 通道]。

Type:

torch.Tensor

lang_id

与音频块相关联的语言标识符。

Type:

str

words

音频块的预测单词。

Type:

str

tokens

音频块的预测标记。

Type:

列表[int]

prompt

与音频块相关的提示。

Type:

列表[str]

avg_log_probs

与预测相关的平均对数概率。

Type:

float

no_speech_prob

音频片段中没有语音的概率。

Type:

float

start: float
end: float
chunk: Tensor
lang_id: str | None = None
words: str | None = None
tokens: List[str] | None = None
prompt: List[str] | None = None
avg_log_probs: float | None = None
no_speech_prob: float | None = None
class speechbrain.inference.ASR.WhisperASR(*args, **kwargs)[source]

基础类:Pretrained

一个即用型的Whisper ASR模型。

该类可用于运行整个编码器-解码器 whisper 模型。 支持的任务集包括:transcribetranslatelang_id。 给定的 YAML 必须包含 *_NEEDED[] 列表中指定的字段。

Parameters:
  • *args (元组)

  • **kwargs (dict) – 参数被转发到 Pretrained 父类。

Example

>>> from speechbrain.inference.ASR import WhisperASR
>>> tmpdir = getfixture("tmpdir")
>>> asr_model = WhisperASR.from_hparams(source="speechbrain/asr-whisper-medium-commonvoice-it", savedir=tmpdir,) 
>>> hyp = asr_model.transcribe_file("speechbrain/asr-whisper-medium-commonvoice-it/example-it.wav")  
>>> hyp  
buongiorno a tutti e benvenuti a bordo
>>> _, probs = asr_model.detect_language_file("speechbrain/asr-whisper-medium-commonvoice-it/example-it.wav")  
>>> print(f"Detected language: {max(probs[0], key=probs[0].get)}")  
Detected language: it
HPARAMS_NEEDED = ['language', 'sample_rate']
MODULES_NEEDED = ['whisper', 'decoder']
TASKS = ['transcribe', 'translate', 'lang_id']
detect_language_file(path: str)[source]

检测给定音频文件的语言。 此方法仅适用于30秒或更短的输入文件。

Parameters:

path (str) – 要转录的音频文件的路径。

Returns:

  • language_tokens (torch.Tensor) – 检测到的语言标记。

  • language_probs (dict) – 检测到的语言标记的概率。

Raises:

ValueError – 如果模型没有语言标记。

detect_language_batch(wav: Tensor)[source]

检测给定wav张量的语言。 此方法仅适用于30秒或更短的wav文件。

Parameters:

wav (torch.tensor) – 波形批次 [批次, 时间, 通道]。

Returns:

  • language_tokens (torch.Tensor of shape (batch_size,)) – 最可能的语言标记的ID,出现在转录开始标记之后。

  • language_probs (List[Dict[str, float]]) – 包含所有语言概率分布的字典列表。

Raises:

ValueError – 如果模型没有语言标记。

Example

>>> from speechbrain.inference.ASR import WhisperASR
>>> import torchaudio
>>> tmpdir = getfixture("tmpdir")
>>> asr_model = WhisperASR.from_hparams(
...     source="speechbrain/asr-whisper-medium-commonvoice-it",
...     savedir=tmpdir,
... ) 
>>> wav, _ = torchaudio.load("your_audio") 
>>> language_tokens, language_probs = asr_model.detect_language(wav) 
transcribe_file_streaming(path: str, task: str | None = None, initial_prompt: str | None = None, logprob_threshold: float | None = -1.0, no_speech_threshold=0.6, condition_on_previous_text: bool = False, verbose: bool = False, use_torchaudio_streaming: bool = False, chunk_size: int | None = 30, **kwargs)[source]

将给定的音频文件转录为一系列单词。 此方法支持以下任务:transcribetranslatelang_id。 它可以通过将输入音频文件分割成 chunk_size 秒的片段来处理超过 30 秒的音频文件。

Parameters:
  • path (str) – 要转录的音频的URI/路径。当 use_torchaudio_streamingFalse 时,使用SB获取以允许 从HF或本地文件获取。当 True 时,通过ffmpeg解析URI, 如 torchaudio.io.StreamReader 中所述。

  • 任务 (可选[str]) – 要执行的任务。如果为None,则默认任务是传递给Whisper模型的任务。

  • initial_prompt (可选[str]) – 用于条件模型的初始提示。

  • logprob_threshold (可选[float]) – 继续解码当前段的对数概率阈值。

  • no_speech_threshold (float) – 如果无语音概率高于此值,则跳过解码段的阈值。

  • condition_on_previous_text (bool) – 如果为True,模型将基于最后224个标记进行条件处理。

  • verbose (bool) – 如果为True,则打印每个片段的转录。

  • use_torchaudio_streaming (bool) – 音频文件是否可以通过流式方式加载。如果不可以, 转录仍然通过音频块进行,但整个音频文件会一次性获取和加载。 这会跳过通常的获取方法,而是使用torchaudio(通过ffmpeg)解析URI。

  • chunk_size (可选[int]) – 将音频分割成块的大小。默认的块大小为30秒,这对应于模型可以一次性处理的最大长度。

  • **kwargs (dict) – 参数转发到 load_audio

Yields:

ASRWhisperSegment – 使用提供的参数初始化的新 ASRWhisperSegment 实例。

transcribe_file(path: str, task: str | None = None, initial_prompt: str | None = None, logprob_threshold: float | None = -1.0, no_speech_threshold=0.6, condition_on_previous_text: bool = False, verbose: bool = False, use_torchaudio_streaming: bool = False, chunk_size: int | None = 30, **kwargs) List[ASRWhisperSegment][source]

在给定的音频文件上使用指定的任务运行Whisper模型,并返回每个片段的ASRWhisperSegment对象。

此方法支持以下任务:transcribetranslatelang_id。 它可以通过将输入音频文件分割成 chunk_size 秒的片段来处理超过 30 秒的音频文件。

Parameters:
  • path (str) – 要转录的音频的URI/路径。当 use_torchaudio_streamingFalse 时,使用SB获取以允许 从HF或本地文件获取。当 True 时,通过ffmpeg解析URI, 如 torchaudio.io.StreamReader 中所述。

  • 任务 (可选[str]) – 要执行的任务。如果为None,则默认任务是传递给Whisper模型的任务。 它可以是以下之一:transcribe, translate, lang_id.

  • initial_prompt (可选[str]) – 用于条件模型的初始提示。

  • logprob_threshold (可选[float]) – 继续解码当前段的对数概率阈值。

  • no_speech_threshold (float) – 如果无语音概率高于此值,则跳过解码段的阈值。

  • condition_on_previous_text (bool) – 如果为True,模型将基于最后224个标记进行条件处理。

  • verbose (bool) – 如果为True,打印每个段的详细信息。

  • use_torchaudio_streaming (bool) – 音频文件是否可以以流式方式加载。如果不可以, 转录仍然通过音频块进行,但整个音频文件会一次性获取并加载。 这会跳过通常的获取方法,而是使用torchaudio(通过ffmpeg)解析URI。

  • chunk_size (可选[int]) – 将音频分割成块的大小。默认的块大小为30秒,这对应于模型可以一次性处理的最大长度。

  • **kwargs (dict) – 参数转发到 load_audio

Returns:

results – 一个包含WhisperASRChunk对象的列表,每个对象包含任务结果。

Return type:

list

encode_batch(wavs, wav_lens)[source]

将输入音频编码为一系列隐藏状态

波形应该已经是模型所需的格式。 你可以调用: normalized = EncoderDecoderASR.normalizer(signal, sample_rate) 在大多数情况下获取正确转换的信号。

Parameters:
  • wavs (torch.tensor) – 波形批次 [batch, time, channels]。

  • wav_lens (torch.tensor) – 波形相对于批次中最长波形的长度,形状为 [batch] 的张量。最长的波形应具有相对长度 1.0,其他波形的长度为 len(waveform) / max_length。用于忽略填充。

Returns:

编码的批次

Return type:

torch.tensor

transcribe_batch(wavs, wav_lens)[source]

将输入的音频转录为一系列单词

波形应该已经是模型所需的格式。 你可以调用: normalized = EncoderDecoderASR.normalizer(signal, sample_rate) 在大多数情况下获取正确转换的信号。

Parameters:
  • wavs (torch.tensor) – 波形批次 [batch, time, channels]。

  • wav_lens (torch.tensor) – 波形相对于批次中最长波形的长度,形状为 [batch] 的张量。最长的波形应具有相对长度 1.0,其他波形的长度为 len(waveform) / max_length。用于忽略填充。

Returns:

  • list – 批次中每个转录的波形。

  • tensor – 每个预测的令牌ID。

forward(wavs, wav_lens)[source]

运行完整转录 - 注意:解码过程中没有梯度

class speechbrain.inference.ASR.ASRStreamingContext(config: DynChunkTrainConfig, fea_extractor_context: Any, encoder_context: Any, decoder_context: Any, tokenizer_context: List[Any] | None)[source]

基础类:object

流式元数据,由 make_streaming_context() 初始化(有关此处字段初始化的详细信息,请参见该处)。

此对象旨在被修改:随着流处理的进行(即在使用较低级别的encode_chunk()等API时),应在调用之间传递相同的对象。

保存一些对不透明流上下文的引用,因此上下文在某种程度上是与模型无关的。

config: DynChunkTrainConfig

用于初始化流式上下文的动态块训练配置。无法在运行时修改。

fea_extractor_context: Any

不透明的特征提取器流上下文。

encoder_context: Any

不透明编码器流上下文。

decoder_context: Any

不透明解码器流上下文。

tokenizer_context: List[Any] | None

分词器的不透明流上下文。最初为None。一旦可以确定批量大小,就会初始化为分词器上下文的列表。

class speechbrain.inference.ASR.StreamingASR(*args, **kwargs)[source]

基础类:Pretrained

一个即用型、支持流式处理的ASR模型。

Parameters:
  • *args (元组)

  • **kwargs (dict) – 参数被转发到 Pretrained 父类。

Example

>>> from speechbrain.inference.ASR import StreamingASR
>>> from speechbrain.utils.dynamic_chunk_training import DynChunkTrainConfig
>>> tmpdir = getfixture("tmpdir")
>>> asr_model = StreamingASR.from_hparams(source="speechbrain/asr-conformer-streaming-librispeech", savedir=tmpdir,) 
>>> asr_model.transcribe_file("speechbrain/asr-conformer-streaming-librispeech/test-en.wav", DynChunkTrainConfig(24, 8)) 
HPARAMS_NEEDED = ['fea_streaming_extractor', 'make_decoder_streaming_context', 'decoding_function', 'make_tokenizer_streaming_context', 'tokenizer_decode_streaming']
MODULES_NEEDED = ['enc', 'proj_enc']
transcribe_file_streaming(path, dynchunktrain_config: DynChunkTrainConfig, use_torchaudio_streaming: bool = True, **kwargs)[source]

将给定的音频文件转录为一系列单词,以流式方式进行,这意味着文本正在从这个生成器中产生,以字符串的形式进行连接。

Parameters:
  • path (str) – 要转录的音频的URI/路径。当 use_torchaudio_streamingFalse 时,使用SB获取以允许 从HF或本地文件获取。当 True 时,通过ffmpeg解析URI, 如 torchaudio.io.StreamReader 中所述。

  • dynchunktrain_config (DynChunkTrainConfig) – 流式配置。合理的值以及时间块实际代表的时间取决于模型。

  • use_torchaudio_streaming (bool) – 音频文件是否可以以流式方式加载。如果不可以, 转录仍然通过音频块进行,但整个音频文件会一次性获取并加载。 这会跳过通常的获取方法,而是使用torchaudio(通过ffmpeg)解析URI。

  • **kwargs (dict) – 参数转发到 load_audio

Yields:

字符串生成器 – 一个生成转录块(字符串)的迭代器。每个块都会有一个 yield,即使该块的转录字符串为空字符串。

transcribe_file(path, dynchunktrain_config: DynChunkTrainConfig, use_torchaudio_streaming: bool = True)[source]

将给定的音频文件转录为一系列单词。

Parameters:
  • path (str) – 要转录的音频的URI/路径。当 use_torchaudio_streamingFalse 时,使用SB获取以允许 从HF或本地文件获取。当 True 时,通过ffmpeg解析URI, 如 torchaudio.io.StreamReader 中所述。

  • dynchunktrain_config (DynChunkTrainConfig) – 流式配置。合理的值以及时间块实际代表的时间取决于模型。

  • use_torchaudio_streaming (bool) – 音频文件是否可以以流式方式加载。如果不可以, 转录仍然通过音频块进行,但整个音频文件会一次性获取并加载。 这会跳过通常的获取方法,而是使用torchaudio(通过ffmpeg)解析URI。

Returns:

由这个ASR系统生成的音频文件转录。

Return type:

str

make_streaming_context(dynchunktrain_config: DynChunkTrainConfig)[source]

创建一个空白的流式上下文,用于传递块编码/转录。

Parameters:

dynchunktrain_config (DynChunkTrainConfig) – 流式配置。合理的值以及时间块实际代表的时间取决于模型。

Return type:

ASRStreamingContext

get_chunk_size_frames(dynchunktrain_config: DynChunkTrainConfig) int[source]

返回实际音频样本中的块大小,即输入块张量沿时间维度的确切预期长度(如传递给encode_chunk()和类似的低级流处理函数)。

Parameters:

dynchunktrain_config (DynChunkTrainConfig) – 用于确定块帧数的流配置。

Return type:

块大小

encode_chunk(context: ASRStreamingContext, chunk: Tensor, chunk_len: Tensor | None = None)[source]

将一批音频片段编码为一批编码序列。 对于完整的语音到文本离线转录,请使用transcribe_batchtranscribe_file。 必须在给定的上下文中按时间顺序正确调用。

Parameters:
  • 上下文 (ASRStreamingContext) – 可变的流式上下文对象,在流式处理时必须指定并在调用之间重复使用。 您可以通过调用 asr.make_streaming_context(config)来获取初始上下文。

  • chunk (torch.Tensor) – 音频块的张量,形状为 [batch size, time]。 时间维度必须严格匹配 asr.get_chunk_size_frames(config)。 波形应处于模型预期的格式(即采样率必须正确)。

  • chunk_len (torch.Tensor, optional) – 形状为 [batch size] 的相对块长度张量。当批次中的某个块的音频在此块内结束时使用。 如果未指定,则等同于 torch.ones((batch_size,))

Returns:

编码输出,具有模型依赖的形状。

Return type:

torch.Tensor

decode_chunk(context: ASRStreamingContext, x: Tensor) Tuple[List[str], List[List[int]]][source]

将编码器的输出解码为标记和相关的转录。 必须在给定的上下文中按时间顺序正确调用块。

Parameters:
  • 上下文 (ASRStreamingContext) – 可变的流式上下文对象,应该是传递给 encode_chunk 的相同对象。

  • x (torch.Tensor) – 给定块的encode_chunk的输出。

Returns:

  • 字符串列表 – 长度为 batch_size 的解码标记。解码后的字符串可以是长度为0的。

  • 输出标记假设的列表的列表 – 长度为 batch_size 的列表,每个列表包含任意长度 >=0 的标记。

transcribe_chunk(context: ASRStreamingContext, chunk: Tensor, chunk_len: Tensor | None = None)[source]

将一批音频片段转录为文本。 必须在给定的上下文中按时间顺序正确调用。

Parameters:
  • 上下文 (ASRStreamingContext) – 可变的流式上下文对象,在流式处理时必须指定并在调用之间重复使用。 您可以通过调用 asr.make_streaming_context(config)来获取初始上下文。

  • chunk (torch.Tensor) – 音频块的张量,形状为 [batch size, time]。 时间维度必须严格匹配 asr.get_chunk_size_frames(config)。 波形应处于模型预期的格式(即 采样率必须正确)。

  • chunk_len (torch.Tensor, optional) – 形状为 [batch size] 的相对块长度张量。当批次中的某个块的音频在此块内结束时使用。 如果未指定,则等同于 torch.ones((batch_size,))

Returns:

此块的转录字符串,长度可能为零。

Return type:

str