语音辨认是人工智能中的一个畛域,它容许计算机了解人类语音并将其转换为文本。该技术用于 Alexa 和各种聊天机器人应用程序等设施。而咱们最常见的就是语音转录,语音转录能够语音转换为文字记录或字幕。
wav2vec2、Conformer 和 Hubert 等最先进模型的最新倒退极大地推动了语音辨认畛域的倒退。这些模型采纳无需人工标记数据即可从原始音频中学习的技术,从而使它们可能无效地应用未标记语音的大型数据集。它们还被扩大为应用多达 1,000,000 小时的训练数据,远远超过学术监督数据集中应用的传统 1,000 小时,然而以监督形式跨多个数据集和畛域预训练的模型已被发现体现出更好的鲁棒性和对持有数据集的泛化,所以执行语音辨认等工作依然须要微调,这限度了它们的全副后劲。为了解决这个问题 OpenAI 开发了 Whisper,一种利用弱监督办法的模型。
本文将解释用于训练的数据集的品种以及模型的训练方法,以及如何应用 Whisper
Whisper 模型介绍
应用数据集:
Whisper 模型是在 68 万小时标记音频数据的数据集上训练的,其中包含 11.7 万小时 96 种不同语言的演讲和 12.5 万小时从”任意语言“到英语的翻译数据。该模型利用了互联网生成的文本,这些文本是由其余主动语音识别系统 (ASR) 生成而不是人类创立的。该数据集还包含一个在 VoxLingua107 上训练的语言检测器,这是从 YouTube 视频中提取的短语音片段的汇合,并依据视频题目和形容的语言进行标记,并带有额定的步骤来去除误报。
模型:
次要采纳的构造是编码器 - 解码器构造。
重采样:16000 Hz
特征提取办法: 应用 25 毫秒的窗口和 10 毫秒的步幅计算 80 通道的 log Mel 谱图示意。
特色归一化: 输出在全局内缩放到 - 1 到 1 之间,并且在预训练数据集上具备近似为零的平均值。
编码器 / 解码器: 该模型的编码器和解码器采纳 Transformers。
编码器的过程:
编码器首先应用一个蕴含两个卷积层 (滤波器宽度为 3) 的词干解决输出示意,应用 GELU 激活函数。
第二个卷积层的步幅为 2。
而后将正弦地位嵌入增加到词干的输入中,而后利用编码器 Transformer 块。
Transformers 应用预激活残差块,编码器的输入应用归一化层进行归一化。
模型框图:
解码的过程:
在解码器中,应用了学习地位嵌入和绑定输入输出标记示意。
编码器和解码器具备雷同的宽度和数量的 Transformers 块。
训练
为了改良模型的缩放属性,它在不同的输出大小上进行了训练。
通过 FP16、动静损失缩放,并采纳数据并行来训练模型。
应用 AdamW 和梯度范数裁剪,在对前 2048 次更新进行预热后,线性学习率衰减为零。
应用 256 个批大小,并训练模型进行 220 次更新,这相当于对数据集进行两到三次前向传递。
因为模型只训练了几个轮次,过拟合不是一个重要问题,并且没有应用数据加强或正则化技术。这反而能够依附大型数据集内的多样性来促成泛化和鲁棒性。
Whisper 在之前应用过的数据集上展现了良好的准确性,并且曾经针对其余最先进的模型进行了测试。
长处:
- Whisper 曾经在实在数据以及其余模型上应用的数据以及弱监督下进行了训练。
- 模型的准确性针对人类听众进行了测试并评估其性能。
- 它可能检测浊音区域并利用 NLP 技术在转录本中正确进行标点符号的输出。
- 模型是可扩大的,容许从音频信号中提取转录本,而无需将视频分成块或批次,从而升高了漏音的危险。
- 模型在各种数据集上获得了更高的准确率。
Whisper 在不同数据集上的比照后果,相比 wav2vec 获得了目前最低的词错误率
模型没有在 timit 数据集上进行测试,所以为了查看它的单词错误率,咱们将在这里演示如何应用 Whisper 来自行验证 timit 数据集,也就是说应用 Whisper 来搭建咱们本人的语音辨认利用。
应用 Whisper 模型进行语音辨认
TIMIT 浏览语音语料库是语音数据的汇合,它专门用于声学语音钻研以及主动语音识别系统的开发和评估。它包含来自美国英语八种次要方言的 630 位演讲者的录音,每人朗诵十个语音丰盛的句子。语料库包含工夫对齐的拼字、语音和单词转录以及每个语音的 16 位、16kHz 语音波形文件。该语料库由麻省理工学院 (MIT)、SRI International (SRI) 和德州仪器 (TI) 共同开发。TIMIT 语料库转录曾经过手工验证,并指定了测试和训练子集,以均衡语音和方言覆盖范围。
装置:
!pip install git+https://github.com/openai/whisper.git
!pip install jiwer
!pip install datasets==1.18.3
第一条命令将装置 whisper 模型所需的所有依赖项。jiwer 是用来下载文字错误率包的 datasets 是 hugface 提供的数据集包,能够下载 timit 数据集。
导入库
importwhisper
frompytubeimportYouTube
fromglobimportglob
importos
importpandasaspd
fromtqdm.notebookimporttqdm
加载 timit 数据集
fromdatasetsimportload_dataset, load_metric
timit=load_dataset("timit_asr")
计算不同模型尺寸下的 Word 错误率
思考到过滤英语数据和非英语数据的需要,咱们这里抉择应用多语言模型,而不是专门为英语设计的模型。
然而 TIMIT 数据集是纯英文的,所以咱们要利用雷同的语言检测和辨认过程。另外就是 TIMIT 数据集曾经宰割好训练和验证集,咱们能够间接应用。
要应用 Whisper,咱们就要先理解不同模型的的参数,大小和速度。
加载模型
model=whisper.load_model('tiny')
tiny 能够替换为下面提到的模型名称。
定义语言检测器的函数
deflan_detector(audio_file):
print('reading the audio file')
audio=whisper.load_audio(audio_file)
audio=whisper.pad_or_trim(audio)
mel=whisper.log_mel_spectrogram(audio).to(model.device)
_, probs=model.detect_language(mel)
ifmax(probs, key=probs.get) =='en':
returnTrue
returnFalse
转换语音到文本的函数
defspeech2text(audio_file):
text=model.transcribe(audio_file)
returntext["text"]
在不同模型大小下运行下面的函数,timit 训练和测试失去的单词错误率如下:
从 u2b 上转录语音
与其余语音辨认模型相比,Whisper 不仅能辨认语音,还能解读一个人语音中的标点语调,并插入适当的标点符号,咱们上面应用 u2b 的视频进行测试。
这里就须要一个包 pytube,它能够轻松的帮忙咱们下载和提取音频
defyoutube_audio(link):
youtube_1=YouTube(link)
videos=youtube_1.streams.filter(only_audio=True)
name=str(link.split('=')[-1])
out_file=videos[0].download(name)
link=name.split('=')[-1]
new_filename=link+".wav"
print(new_filename)
os.rename(out_file, new_filename)
print(name)
returnnew_filename,link
取得 wav 文件后,咱们就能够利用下面的函数从中提取文本。
总结
本文的代码在这里
https://avoid.overfit.cn/post/acab33d88ef54228ad50b8a66324659f
还有许多操作能够用 Whisper 实现,你能够依据本文的代码自行尝试。
作者:Shradrobo