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
摘要
类:
流媒体元数据,由 |
|
用于Whisper ASR流式处理的单个音频块。 |
|
一个即用型的编码器ASR模型 |
|
一个即用型的编码器-解码器ASR模型 |
|
一个即用型、支持流式传输的ASR模型。 |
|
一个即用型的Whisper ASR模型。 |
参考
- class speechbrain.inference.ASR.EncoderDecoderASR(*args, **kwargs)[source]
基础类:
Pretrained一个即用型的编码器-解码器自动语音识别模型
该类可以仅用于运行编码器(encode())以提取特征,也可以用于运行整个编码器-解码器模型(transcribe())以转录语音。给定的YAML必须包含*_NEEDED[]列表中指定的字段。
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']
- 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。
- class speechbrain.inference.ASR.EncoderASR(*args, **kwargs)[source]
基础类:
Pretrained一个即用型的编码器ASR模型
该类可以仅用于运行编码器(encode())以提取特征,也可以用于运行整个编码器+解码器函数模型(transcribe())以转录语音。给定的YAML必须包含*_NEEDED[]列表中指定的字段。
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实例,并且
根据分词器类型添加了额外的参数。
- 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。
- 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_chunk、decode_chunk等。- chunk
音频块,形状为 [时间, 通道]。
- Type:
torch.Tensor
- chunk: Tensor
- class speechbrain.inference.ASR.WhisperASR(*args, **kwargs)[source]
基础类:
Pretrained一个即用型的Whisper ASR模型。
该类可用于运行整个编码器-解码器 whisper 模型。 支持的任务集包括:
transcribe、translate和lang_id。 给定的 YAML 必须包含 *_NEEDED[] 列表中指定的字段。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]
将给定的音频文件转录为一系列单词。 此方法支持以下任务:
transcribe、translate和lang_id。 它可以通过将输入音频文件分割成 chunk_size 秒的片段来处理超过 30 秒的音频文件。- Parameters:
path (str) – 要转录的音频的URI/路径。当
use_torchaudio_streaming为False时,使用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对象。此方法支持以下任务:
transcribe、translate和lang_id。 它可以通过将输入音频文件分割成 chunk_size 秒的片段来处理超过 30 秒的音频文件。- Parameters:
path (str) – 要转录的音频的URI/路径。当
use_torchaudio_streaming为False时,使用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:
- 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。
- 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
用于初始化流式上下文的动态块训练配置。无法在运行时修改。
- class speechbrain.inference.ASR.StreamingASR(*args, **kwargs)[source]
基础类:
Pretrained一个即用型、支持流式处理的ASR模型。
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_streaming为False时,使用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_streaming为False时,使用SB获取以允许 从HF或本地文件获取。当True时,通过ffmpeg解析URI, 如torchaudio.io.StreamReader中所述。dynchunktrain_config (DynChunkTrainConfig) – 流式配置。合理的值以及时间块实际代表的时间取决于模型。
use_torchaudio_streaming (bool) – 音频文件是否可以以流式方式加载。如果不可以, 转录仍然通过音频块进行,但整个音频文件会一次性获取并加载。 这会跳过通常的获取方法,而是使用torchaudio(通过ffmpeg)解析URI。
- Returns:
由这个ASR系统生成的音频文件转录。
- Return type:
- make_streaming_context(dynchunktrain_config: DynChunkTrainConfig)[source]
创建一个空白的流式上下文,用于传递块编码/转录。
- Parameters:
dynchunktrain_config (DynChunkTrainConfig) – 流式配置。合理的值以及时间块实际代表的时间取决于模型。
- Return type:
- 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_batch或transcribe_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: