Whisper 是 OpenAI 提供的一种开源的自动语音辨识( Automatic Speech Recognition,ASR )的神经网路模型,用来执行语音辨识(language identification)与翻译(speech translation)的功能。能够将各种语言的语音转录成文字(multilingual speech recognition),甚至可以处理较差的音频品质或过多的背景杂讯。
模型架构,安装需求和标準,可参考官方文档: https://github.com/openai/whisper
Introducing Whisper - OpenAI: https://openai.com/research/whisper (里面就有"Read paper", "View code", "View model card")
Read paper: https://cdn.openai.com/papers/whisper.pdf
View code: https://github.com/openai/whisper
View model card:https://github.com/openai/whisper/blob/main/model-card.md
上图为 Whisper 的模型训练方法,可以从 paper 看,不过笔者在这边简单解释一下:
数据资料集(data)
左上为 Multitask(多工) training data ,总共 680k hours (其实也透漏资料大小), 为何叫多工呢? 因为它分为四种: (1) 英文转录, (2) 任何语言翻译为英文,(3) 非英语系转录,(4) 不讲话(只有背景音乐)
训练 (training)
它的训练过程在右边,主要为 sequence-to-sequence learning, sequence-to-sequence model 是一类将序列转化为序列技术的统称,最初即是由 Google Translate 研究团队所开发。关于 sequence-to-sequence, 主要是由 Encoder 和 Decoder 两个 RNN 所构成, 可以想像 Encoder 相当于处理 input data, 我们餵资料给它,经由特徵工程(或 attention, 或影像压缩处理, 去噪....等等特殊处理),然后再经由 Decoder 之后输出。关于 sequence-to-sequence,可以参考这篇: http://zake7749.github.io/2017/09/28/Sequence-to-Sequence-tutorial/ ,写的还不错。
好了,所以我们可以看到图片的左下方有个箭头,将 Multitask training data (多工训练资料) 餵进去 Log-Mel Spectrogram (Mel Spectrogram, 梅尔频谱),何谓梅尔频谱? 其实,它就是在语音处理中常常用到的频谱,在语音分类中把信号变成图片,然后用分类图片的算法 (例如: CNN) 来分类语音。更多详细梅尔频谱的资料,请参考: https://blog.csdn.net/bo17244504/article/details/124707265
https://medium.com/analytics-vidhya/understanding-the-mel-spectrogram-fca2afa2ce53
https://zhuanlan.zhihu.com/p/351956040
因此, 这些频谱经由 CNN (2xConv1D + GELU) 的方法 training (训练),再经由正弦波位置编码(Sinusoidal position encoder, 所谓正弦波位置编码,简单讲就是在 transformer 架构中加入一些关于 token 位置的信息,其演算法使用了不同频率的正弦函数来作为位置编码,所以叫作正弦波位置编码),接着,进入 Tranformer Encoder 的过程 (MLP + self-attention),(MLP + self-attention)...(MLP + self-attention),(self-attention 来自相同序列),几层我不知道,或许多层多次,然后再经由 cross attention (cross attention 来自不同序列),经由 transformer decoder 输出。当然,在训练过程中,我们可以得知 Multitask training format 中 token 的信息,与训练好的模型来预测下一个 token。这也意味着可以经由模型来输出讲者的说话模式(内容)。
正弦波位置编码可参考: https://zhuanlan.zhihu.com/p/98641990, https://zhuanlan.zhihu.com/p/338592312
MLP:https://chih-sheng-huang821.medium.com/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-%E5%A4%9A%E5%B1%A4%E6%84%9F%E7%9F%A5%E6%A9%9F-multilayer-perceptron-mlp-%E5%90%AB%E8%A9%B3%E7%B4%B0%E6%8E%A8%E5%B0%8E-ee4f3d5d1b41
https://zh.wikipedia.org/zh-tw/%E5%A4%9A%E5%B1%82%E6%84%9F%E7%9F%A5%E5%99%A8
最下方为 Multitask training format,刚刚有谈到拿来作为训练资料集,主要分为三种类型的 token: special tokens, text tokens, timestamp tokens; 一开始,输入原本的语音内容,先将内容分为两类:有语音,与没有语音(可能没录好,或是正好为讲话间隙,即长时间没有语音出现);没有语音则经由语音活性检测 (Voice activity detection,VAD),再度确认,或是将其处理掉;若有语音则分为英语系,和非英语系两种,都可由下列两种方式录製或翻译:
(1) 需要时间校準(Time-aligned Transcription): 于 text token 之间,插入 begin time 和 end time。所以您可以看到之后我下面 output 录製语音的 .txt 档案,有开始,和结束时间纪录。
(2) 不需时间校準 (Text-only Transcription): 只有 text tokens,但它可以允许 dataset fine tune。
=======
以上模型讲解完毕,接下来是安装的部分。
如果您已有 OpenAI ChatGPT API key,则可以直接进行 OpenAI 语音辨识,不需要额外安装 Whisper:
pip install openai #安装套件
import osimport openaiopenai.organization = "org-iLO9ZtJh7FCEufYHGQNle6ur"openai.api_key = os.getenv("OPENAI_API_KEY")
"OPENAI_API_KEY" 则为您个人所申请的 ChatGPT API key, 需以括号 " " 包住, 例如:您的 ChatGPT API key 为 12345678, 则 "OPENAI_API_KEY" 则为 "12345678"
看 Moedl 详细资讯及权限:
openai.Model.list()
但如果您没有OpenAI ChatGPT API key,或您对于 Whisper 很感兴趣,则可以参考以下步骤,也就是本文的重点:
基础环境要求: Python 3.8-3.10 (官方文件说明此 model 在 Python 3.9.9 and PyTorch 1.10.1 进行运行和测试)
下载ffmpeg并添加环境变数
(a) 于此网站 https://github.com/BtbN/FFmpeg-Builds/releases 找到“ffmpeg-master-latest-win64-gpl.zip”版本下载
(b) 解压缩后,找到bin文件夹下的“ffmpeg.exe”,将它複製到一个文件夹中,添加到系统环境变量
(c) 开启 cmd, 输入 ffmpeg,检查是否安装成功。安装成功画面如下:
(a) 于官方网站: https://git-scm.com/download/win 下载安装套件,安装过程点击 next 到最后(如有选项请选择"预设"(default) 或是"推荐"(Recommend))
(b) 安装完成后,打开 command-line(CMD 窗口),输入 git,安装成功如下所示:
则可进行 PyTorch 的安装。
(c) 若安装不成功,需将git添加到环境变数中:
搜索 git.exe,找到它位于电脑上的路径(譬如为 “C:\Program Files\Git\bin”),则将其加到环境变数中。
如先前步骤将路径加入到环境变数中:
这里我们使用pip安装,到此网站:https://pytorch.org/ 下拉表格点选所需环境。

因为我电脑尚未额外配置GPU,只有标配 Intel(R) UHD Graphics 620,因此,我选择的版本如下: "Windows系统"、"pip安装方式"、"Python语言"、"CPU版本的软件"。
直接以 Command-line (CMD)下指令: pip3 install torch torchvision torchaudio
5.Whisper的安装
以上步骤都完成后,按照官方文档,开启 Command-line (CMD 视窗),下如下指令:
pip install git+https://github.com/openai/whisper.git
然后再运行:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git (注意为一行)
完成whisper的安装。
接下来,测试是否安装成功:
我们準备一段音档(.mp3, .wav 或 .m4a 也可以),可以用 Windows 内建录音机录製,我这边是.mp3 档案,并将其命名为 audio.mp3,使用 Whisper 将其转换为文字。在音档所在文件夹中打开command-line (cmd 窗口),输入 whisper audio.mp3
则会生成四个文档: audio.srt,audio.tsv,audio.txt,audio.vtt。这四个文档就是音档的内容,只是其输出格式不同。
更换转写模型:
whisper audio.mp3 --model medium
参考官方文档 https://github.com/openai/whisper ,还有如下指令:
whisper japanese.wav --language Japanese
whisper japanese.wav --language Japanese --task translate
whisper --help
=> 这个指令可以 show 出相关资讯,包含 model 型态,支援语言种类,以及输出格式(预设是 all,即包含 txt,vtt,srt,tsv,json)...等等。
另外,在 jupyter notebook 上运行:
import whispermodel = whisper.load_model("base")result = model.transcribe("audio.mp3")print(result["text"])
或是
import whispermodel = whisper.load_model("base")#load audio and pad/trim it to fit 30 secondsaudio = whisper.load_audio("录製 (3).m4a")audio = whisper.pad_or_trim(audio)# make log-Mel spectrogram and move to the same device as the modelmel = whisper.log_mel_spectrogram(audio).to(model.device)# detect the spoken language_, probs = model.detect_language(mel)print(f"Detected language: {max(probs, key=probs.get)}")# decode the audio#options = whisper.DecodingOptions() #预设options = whisper.DecodingOptions(fp16 = False) # 如果不支援 fp16,以 fp32 取代, 须改为 Falseresult = whisper.decode(model, mel, options)# print the recognized textprint(result.text)
其实,还有很多很好玩的功能,请参考官网文件: https://github.com/openai/whisper