speechbrain.inference.ASR 模块

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

作者
  • Aku Rouhe 2021

  • Peter Plantinga 2021

  • Loren Lugosch 2020

  • Mirco Ravanelli 2020

  • Titouan Parcollet 2021

  • Abdel Heba 2021

  • Andreas Nautsch 2022, 2023

  • Pooneh Mousavi 2023

  • Sylvain de Langen 2023, 2024

  • Adel Moumen 2023, 2024

  • Pradnya Kandarkar 2023

摘要

ASRStreamingContext

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

ASRWhisperSegment

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

EncoderASR

一个即用型 Encoder ASR 模型

EncoderDecoderASR

一个即用型 Encoder-Decoder ASR 模型

StreamingASR

一个即用型、具备流式能力的 ASR 模型。

WhisperASR

一个即用型 Whisper ASR 模型。

参考

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

基类:Pretrained

一个即用型 Encoder-Decoder ASR 模型

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

参数:
  • *args (tuple)

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

示例

>>> 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]

将给定的音频文件转录成词序列。

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

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

返回值:

此 ASR 系统生成的音频文件转录。

返回类型:

str

encode_batch(wavs, wav_lens)[source]

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

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

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

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

返回值:

编码后的批次

返回类型:

torch.Tensor

transcribe_batch(wavs, wav_lens)[source]

将输入音频转录成词序列

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

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

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

返回值:

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

  • tensor – 每个预测的 token id。

forward(wavs, wav_lens)[source]

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

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

基类:Pretrained

一个即用型 Encoder ASR 模型

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

参数:
  • *args (tuple)

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

示例

>>> 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 实例。

抛出异常
ValueError: 如果解码函数既不是 functools.partial 也不是

speechbrain.decoders.ctc.CTCBaseSearcher 的实例。

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

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

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

transcribe_file(path, **kwargs)[source]

将给定的音频文件转录成词序列。

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

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

返回值:

此 ASR 系统生成的音频文件转录。

返回类型:

str

encode_batch(wavs, wav_lens)[source]

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

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

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

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

返回值:

编码后的批次

返回类型:

torch.Tensor

transcribe_batch(wavs, wav_lens)[source]

将输入音频转录成词序列

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

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

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

返回值:

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

  • tensor – 每个预测的 token 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

音频块的开始时间。

类型:

float

end

音频块的结束时间。

类型:

float

chunk

音频块,形状 [time, channels]。

类型:

torch.Tensor

lang_id

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

类型:

str

words

音频块的预测词。

类型:

str

tokens

音频块的预测 token。

类型:

List[int]

prompt

与音频块关联的提示。

类型:

List[str]

avg_log_probs

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

类型:

float

no_speech_prob

音频块中没有语音的概率。

类型:

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[] 列表中指定的字段。

参数:
  • *args (tuple)

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

示例

>>> 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 秒的输入文件。

参数:

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

返回值:

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

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

抛出异常:

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

detect_language_batch(wav: Tensor)[source]

检测给定波形 Tensor 的语言。此方法仅适用于时长不超过 30 秒的波形文件。

参数:

wav (torch.tensor) – 波形批量 [batch, time, channels]。

返回值:

  • language_tokens (形状为 (batch_size,) 的 torch.Tensor) – 最可能的语言标记的 ID,出现在 startoftranscript 标记之后。

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

抛出异常:

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

示例

>>> 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 = 30, **kwargs)[source]

将给定音频文件转录为词序列。此方法支持以下任务:transcribe(转录)、translate(翻译)和 lang_id(语言识别)。它可以通过将输入音频文件分割成 chunk_size 秒的段来处理时长超过 30 秒的文件。

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

  • task (Optional[str]) – 要执行的任务。如果为 None,则使用 Whisper 模型中传递的默认任务。

  • initial_prompt (Optional[str]) – 用于对模型进行条件设置的初始提示。

  • logprob_threshold (Optional[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 的参数。

生成:

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 对象。

此方法支持以下任务:transcribe(转录)、translate(翻译)和 lang_id(语言识别)。它可以通过将输入音频文件分割成 chunk_size 秒的段来处理时长超过 30 秒的文件。

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

  • task (Optional[str]) – 要执行的任务。如果为 None,则使用 Whisper 模型中传递的默认任务。可以是以下之一:transcribe(转录)、translate(翻译)、lang_id(语言识别)。

  • initial_prompt (Optional[str]) – 用于对模型进行条件设置的初始提示。

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

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

  • condition_on_previous_text (bool) – 如果为 True,模型将基于最近的 224 个标记进行条件设置。

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

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

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

  • **kwargs (dict) – 转发给 load_audio 的参数。

返回值:

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

返回类型:

list

encode_batch(wavs, wav_lens)[source]

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

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

参数:
  • wavs (torch.tensor) – 波形批量 [batch, time, channels]。

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

返回值:

编码后的批次

返回类型:

torch.tensor

transcribe_batch(wavs, wav_lens)[source]

将输入音频转录成词序列

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

参数:
  • wavs (torch.tensor) – 波形批量 [batch, time, channels]。

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

返回值:

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

  • tensor – 每个预测的 token 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 模型。

参数:
  • *args (tuple)

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

示例

>>> 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]

以流式方式将给定音频文件转录为词序列,意味着文本以待拼接字符串的形式从此生成器中生成。

参数:
  • 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 的参数。

生成:

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

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

将给定音频文件转录为词序列。

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

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

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

返回值:

此 ASR 系统生成的音频文件转录。

返回类型:

str

make_streaming_context(dynchunktrain_config: DynChunkTrainConfig)[source]

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

参数:

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

返回类型:

ASRStreamingContext

get_chunk_size_frames(dynchunktrain_config: DynChunkTrainConfig) int[source]

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

参数:

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

返回类型:

块大小

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

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

参数:
  • context (ASRStreamingContext) – 可变流式上下文对象,在流式处理时必须指定并在不同调用之间重用。可以通过调用 asr.make_streaming_context(config) 获取初始上下文。

  • chunk (torch.Tensor) – 音频块的 Tensor,形状为 [批量大小, 时间]。时间维度必须严格匹配 asr.get_chunk_size_frames(config)。波形应采用模型期望的格式(即采样率必须正确)。

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

返回值:

编码输出,形状取决于模型。

返回类型:

torch.Tensor

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

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

参数:
  • context (ASRStreamingContext) – 可变流式上下文对象,应与传递给 encode_chunk 的对象相同。

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

返回值:

  • list of str – 长度为 batch_size 的解码标记。解码后的字符串长度可以为 0。

  • list of list of output token hypotheses – 长度为 batch_size 的列表,每个元素包含一个长度 >=0 的标记列表。

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

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

参数:
  • context (ASRStreamingContext) – 可变流式上下文对象,在流式处理时必须指定并在不同调用之间重用。可以通过调用 asr.make_streaming_context(config) 获取初始上下文。

  • chunk (torch.Tensor) – 音频块的 Tensor,形状为 [批量大小, 时间]。时间维度必须严格匹配 asr.get_chunk_size_frames(config)。波形应采用模型期望的格式(即采样率必须正确)。

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

返回值:

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

返回类型:

str