语音识别是人工智能中的一个领域,它允许计算机理解人类语音并将其转换为文本。该技术用于Alexa和各种聊天机器人应用程序等设备。而我们最常见的就是语音转录,可以将语音转换成文字记录或者字幕。wav2vec2、Conformer和Hubert等最先进模型的最新发展极大地推动了语音识别领域的发展。这些模型采用从没有人工标记数据的原始音频中学习的技术,使它们能够有效地使用大型未标记语音数据集。它们还被扩展到使用多达1,000,000小时的训练数据,远远超过学术监督数据集中使用的传统1,000小时,但发现以监督方式跨多个数据集和领域预训练的模型表现出更好的鲁棒性和泛化能力数据集,因此执行语音识别等任务仍然需要微调,这限制了它们的全部潜力。为了解决这个问题,OpenAI开发了Whisper,这是一种利用弱监督方法的模型。本文将解释用于训练的数据集类型以及模型是如何训练的,以及如何使用WhisperWhisper模型。所用数据集介绍:Whisper模型是在680,000小时带标签音频数据的数据集上训练的,其中包括117,000小时96种不同语言的演讲和125,000小时从“任何语言”到英语的翻译数据。该模型利用互联网生成的文本,这些文本由其他自动语音识别系统(ASR)生成,而不是由人类创建。该数据集还包括一个在VoxLingua107上训练的语言检测器,它是从YouTube视频中提取的短语音片段的集合,并根据视频标题和描述的语言进行标记,还有一个额外的步骤来去除误报。模型:主要采用的结构是encoder-decoder结构。重采样:16000Hz特征提取方法:使用25毫秒的窗口和10毫秒的步幅计算80个通道的logMel频谱图表示。特征归一化:输入在-1和1之间全局缩放,并且在预训练数据集上的平均值接近于零。Encoder/Decoder:Transformers用于该模型的编码器和解码器。编码器过程:编码器首先使用GELU激活函数使用由两个卷积层(过滤器宽度3)组成的词干提取来处理输入表示。第二个卷积层的步幅为2。然后将正弦位置嵌入添加到词干输出中,并应用编码器转换器块。Transformers使用预激活的残差块,编码器的输出使用归一化层进行归一化。模型框图:解码过程:在解码器中,使用学习位置嵌入和绑定输入和输出标记表示。编码器和解码器具有相同的宽度和数量的Transformers块。训练为了提高模型的缩放特性,它在不同的输入大小上进行训练。使用FP16、动态损失缩放和采用数据并行性训练模型。使用AdamW和梯度范数裁剪,线性学习率在前2048次更新预热后衰减为零。使用256的批量大小,并训练模型进行220次更新,这相当于对数据集进行两次或三次前向传递。由于模型只训练了几个时期,过度拟合不是一个重要问题,并且没有使用数据增强或正则化技术。这可以改为依赖大型数据集中的多样性来促进泛化和鲁棒性。Whisper在以前使用的数据集上表现出良好的准确性,并且已经针对其他最先进的模型进行了测试。优点:Whisper已经在真实数据以及其他监督较弱的模型上使用的数据上进行了训练。该模型的准确性针对人类听众进行了测试,并评估了其性能。它检测清音区域并应用NLP技术正确标点转录中的输入。该模型是可扩展的,允许从音频信号中提取转录本,而无需将视频分成块或批次,从而降低了音频泄漏的风险。该模型在各种数据集上实现了更高的准确性。Whisper在不同数据集上的对比结果,相比于wav2vec,已经达到了目前最低的词错误率验证timit数据集,也就是说,使用Whisper搭建我们自己的语音识别应用。使用耳语模型的语音识别TIMIT阅读语音语料库是语音数据的集合,专门用于声学语音研究和自动语音识别系统的开发和评估。它包括来自美国英语八种主要方言的630位演讲者的录音,每人朗读十个语音丰富的句子。语料库包括时间对齐的正字法、语音和单词转录以及每个语音的16位、16kHz语音波形文件。该语料库由麻省理工学院(MIT)、SRIInternational(SRI)和德州仪器(TI)联合开发。TIMIT语料库转录已经过手动验证,并指定测试和训练子集以平衡语音和方言覆盖范围。安装:!pipinstallgit+https://github.com/openai/whisper.git!pipinstalljiwer!pipinstalldatasets==1.18.3第一个命令将安装whisper模型所需的所有依赖项。Jiwer是用来下载文本错误率包数据集的,是hugface提供的数据集包,可以下载timit数据集。importlibraryimportwhisperfrompytubeimportYouTubefromglobimportglobimportosimportpandasaspdfromtqdm.notebookimporttqdmloadtimitdatasetfromdatasetsimportload_dataset,load_metrictimit=load_dataset("timit_asr")计算不同模型尺寸下的Word错误考虑到需要过滤英文数据和非英文数据,我们这里选择使用多语言模型,而不是专门为英文设计的模型。但是TIMIT数据集只有英文,所以我们想应用相同的语言检测和识别过程。另外,TIMIT数据集已经分为训练集和验证集,我们可以直接使用。要使用Whisper,我们需要了解不同模型的参数、大小和速度。加载模型model=whisper.load_model('tiny')tiny可以替换成上面提到的模型名称。定义语言检测器函数deflan_detector(audio_file):print('读取音频文件')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':returnTruereturnFalse函数将语音转换为文本defspeech2text(audio_file):text=model.transcribe(audio_file)returntext["text"]在不同模型大小下运行上述函数,timit训练测试得到的词错误率如下:Transcribingspeechfromu2b与其他语音识别模型相比,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://drive.google.com/file/d/1FejhGseX_S1Ig_Y5nIPn1OcHN8DLFGIO/view有很多操作可以用Whisper完成,你可以根据本文的代码自己尝试。
