OpenAI Whisper 精读【论文精读·45】_哔哩哔哩_bilibili更多论文:https://github.com/mli/paper-reading, 视频播放量 68331、弹幕量 327、点赞数 2332、投硬币枚数 1192、收藏人数 983、转发人数 394, 视频作者 跟李沐学AI, 作者简介 ,相关视频:自动识别讲座、访谈录音 ——Python开源whisper语音识别,ChatGPT原理剖析 李宏毅,(强推)李宏毅2021/2022春机器学习课程,Transformer论文逐段精读【论文精读】,博一研究生 求偶视频,在线求偶|26岁985副教授,本科生如何发表一作Nature子刊,在讲 OpenAI Whisper 前先做了一个剪视频小工具【论文精读·44】,算法领域的“大力出奇迹”:ChatGPT!李宏毅教授重磅解读ChatGPT的底层逻辑!感兴趣的同学赶紧收藏学习了!,46 语义分割和数据集【动手学深度学习v2】https://www.bilibili.com/video/BV1VG4y1t74x/?spm_id_from=333.999.0.0&vd_source=4aed82e35f26bb600bc5b46e65e25c22
语音模型的预训练,自监督的方式,这篇文章还是很有意思的,它实际上是之前nlp上bert那一套在语音识别领域的应用。
在网上爬了70w带标号的语音的数据,然后直接训练了一个transformer的模型。没有标号的语音数据,使用对比学习预训练的模型,这些预训练好的语音的编码器,能够学习到比较高质量的特征表示,但是没有一个很好的编码器,如果想用的话还是得找一个标号数据,微调,其实就是训练一个decoder,但是whisper觉得微调是比较复杂的。这个思路和之前的bert是一样的,bert是双向的,用的transformer中的encoder模块,本质上一个预训练的大语言模型,训练时使用的完形填空或者预测下一个句子这种预训练的任务,这个gpt是有不同的,gpt是生成式的,用的transformer中的deocder模块,它本身就是一个解码器,不需要bert那样后续还需要微调一个解码器。但是为什么不在语音识别上使用gpt这种模式呢?因为语音信号是一个声波,放到gpt后只能预测下一秒钟,但是预测声波本身和预测单词是不同的,中间还需要一个将语音信号转成文本信号,因此这一步还是需要标号数据,也就是说即便是无监督任务,后续还是要一个微调。不过当然也可以一步到位,但是在特定数据上微调总是不够鲁棒的,最好还是zero shot。
作者做了一个弱监督数据集,虽然是监督的,但是数据质量相对是较差的,有68w小时,用了一个大型的transformer,当模型足够大时,对多语言多任务是有益的。这种方式不需要自监督方式,以往自监督数据往往在100w小时以上,然后使用4w有监督来微调,现在whisper直接将4w标号数据扩展成68w弱监督数据,效果非常好。这个目前来看和sam是如何的相似,图像领域也可以这么做。
whisper完全依赖sequence to sequence方式,预测原始文本。不过对网上爬取的数据还是要做一些预处理,首先如果爬取的数据中有asr机器生成的语音文本对,这个要删除掉。将所有的数据切成30s一个区间做训练数据。
whisper使用带有编码器和解码器的transformer,数据输入是对音频采样到16000Hz,然后把它变成一个80通道的log scale mel spectrogram,16000Hz就是每个时间里16000个点,每个时间点会有一个数值,做一个傅里叶变形,将时序变到频谱上,log scale对频谱维度做一下log变成db,mel是因为每个人对不同频率的响应是不一样的,一般对低频响应好一点,对高频响应差一点,mel就是频谱图,但是把高频的分辨率做低一点,低频分辨率做高一点。也就是说一个时序的信号变成了2d的频率图,每个时间点抽一个特征,80维表示每个时间点,抽了一个80维的特征,每一次向前滑动10ms,切出来是30s一段,那么一个30s的语音信号最后变成一个3000个数据点,每一维是80维度。
网络模型结构:
模型参数:
多语言结果:
中文效果一般,左图是单词错误率,横轴是训练数据,zh中文数据多但是错误率还是挺高的,右图是翻译,翻译都是翻英文。