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
摘要
类
流式元数据,由 |
|
用于 Whisper ASR 流式的单个音频块。 |
|
一个即用型 Encoder ASR 模型 |
|
一个即用型 Encoder-Decoder ASR 模型 |
|
一个即用型、具备流式能力的 ASR 模型。 |
|
一个即用型 Whisper ASR 模型。 |
参考
- class speechbrain.inference.ASR.EncoderDecoderASR(*args, **kwargs)[source]
基类:
Pretrained
一个即用型 Encoder-Decoder ASR 模型
此类可用于仅运行编码器(encode())提取特征,或运行整个编码器-解码器模型(transcribe())转录语音。给定的 YAML 必须包含 *_NEEDED[] 列表中指定的字段。
示例
>>> 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)
来获得正确转换的信号。- 参数:
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。
- class speechbrain.inference.ASR.EncoderASR(*args, **kwargs)[source]
基类:
Pretrained
一个即用型 Encoder ASR 模型
此类可用于仅运行编码器(encode())提取特征,或运行整个编码器 + 解码函数模型(transcribe())转录语音。给定的 YAML 必须包含 *_NEEDED[] 列表中指定的字段。
示例
>>> 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
的实例,并且
根据分词器类型添加额外参数。
- 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。
- 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
音频块,形状 [time, channels]。
- 类型:
torch.Tensor
- chunk: Tensor
- class speechbrain.inference.ASR.WhisperASR(*args, **kwargs)[source]
基类:
Pretrained
一个即用型 Whisper ASR 模型。
此类可用于运行整个编码器-解码器 whisper 模型。支持的任务集包括:
transcribe
、translate
和lang_id
。给定的 YAML 必须包含 *_NEEDED[] 列表中指定的字段。示例
>>> 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_streaming
为False
时,使用 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_streaming
为False
时,使用 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
对象列表,每个对象包含任务结果。- 返回类型:
- 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。
- 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 模型。
示例
>>> 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_streaming
为False
时,使用 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_streaming
为False
时,使用 SB 获取机制从 HF 或本地文件获取。当为True
时,通过 ffmpeg 解析 URI,如torchaudio.io.StreamReader
中所述。dynchunktrain_config (DynChunkTrainConfig) – 流式配置。合理的值以及块实际代表的时间量取决于模型。
use_torchaudio_streaming (bool) – 音频文件是否可以流式加载。如果不能,转录仍然通过音频块进行,但整个音频文件会被一次性获取和加载。这会跳过通常的获取方法,而是使用 torchaudio(通过 ffmpeg)解析 URI。
- 返回值:
此 ASR 系统生成的音频文件转录。
- 返回类型:
- make_streaming_context(dynchunktrain_config: DynChunkTrainConfig)[source]
创建一个空白流式上下文,用于在块编码/转录中传递。
- 参数:
dynchunktrain_config (DynChunkTrainConfig) – 流式配置。合理的值以及块实际代表的时间量取决于模型。
- 返回类型:
- 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_batch
或transcribe_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,))
。
- 返回值:
此块的转录字符串,长度可能为零。
- 返回类型: