如何停用 OpenAI Whisper 对超过 30 秒的音频输入的标准化? (转录填充词)

问题描述 投票:0回答:1

OpenAI 的 Whisper 提供漂亮、干净的成绩单。现在我希望它能生成更多原始记录,其中还包含填充词(ah、mh、mhm、uh、oh 等)。这里的帖子告诉我,可以通过将标准化设置为 false:https://huggingface.co/spaces/openai/whisper/discussions/30

我设法使用了这段代码,但我只得到了耳语转录 30 秒。如何让它处理更长的音频文件?

请注意,我是一个耳语和Python的初学者。

到目前为止我所做的:我主要使用来自 https://huggingface.co/spaces/openai/whisper/discussions/30 的代码由于我不想使用虚拟数据集,所以我加载本地数据集带有库的 mp3。我想还有其他方法可以做到这一点,我对此持开放态度。

据我了解,指示耳语处理器对于停用标准化是必要的。因此,这里使用的不是耳语 (

import whisper
),而是通过
transformers
耳语。相关开关是
normalize = False

我的代码(myscript.py):

from transformers import WhisperProcessor, WhisperForConditionalGeneration
import librosa

speech, _ = librosa.load("myaudio.mp3", sr=16000, mono=True)

processor = WhisperProcessor.from_pretrained("openai/whisper-large")
model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-large")

model.config.forced_decoder_ids = processor.get_decoder_prompt_ids(language = "de", task = "transcribe")
input_features = processor(speech, return_tensors="pt", sampling_rate=16000).input_features 
predicted_ids = model.generate(input_features)
transcription = processor.batch_decode(predicted_ids, skip_special_tokens = True, normalize = False)

print(transcription)

到目前为止效果很好。然而,只转录了前 30 秒。

可以使用

pipeline
转录较长的音频文件,如此处所述:

Whisper 模型本质上是为处理持续时间长达 30 秒的音频样本而设计的。然而,通过使用分块算法,它可以用于转录任意长度的音频样本。这可以通过 Transformers 管道方法实现。

根据这个网页,代码是

import torch
from transformers import pipeline
from datasets import load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
pipe = pipeline(
  "automatic-speech-recognition",
  model="openai/whisper-base",
  chunk_length_s=30,
  device=device,
)
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
sample = ds[0]["audio"]

prediction = pipe(sample.copy())["text"]

# we can also return timestamps for the predictions
prediction = pipe(sample, return_timestamps=True)["chunks"]

现在我在将我的代码与此代码组合时遇到问题。如何加载本地 mp3 而不是数据集? (librosa 在这里似乎不起作用。)在哪里可以将标准化设置为 false?

python python-3.x speech-recognition openai-whisper
1个回答
0
投票

要使用本地文件运行 OpenAI Whisper 管道,只需使用

prediction = pipe("myaudio.mp3")
(假设
audio.mp3
位于您的工作目录中。

浏览

pipeline()
文档,似乎没有一种直接的方法将
normalize = False
传递给底层处理器。

您可以更深入地研究

pipeline()
类,进行一些自定义黑客攻击,从而获得访问权限,或者您可以使用
WhisperProcessor
WhisperForConditionalGeneration
类进行转录,恢复到最初的方法。

但是,使用这种方法,您需要自己将音频分成 30 秒的块(因为此函数与您没有使用的

pipeline
类捆绑在一起,因为它不允许您设置
normalize = False
) .

有关于分割音频文件的信息这里这里

© www.soinside.com 2019 - 2024. All rights reserved.