如何在矩池云上安装语音识别模型 Whisper
Whisper 是 OpenAI 近期开源的一个语音识别的模型,研究人员基于 680,000 小时的标记音频数据进行训练,它同时也是一个多任务模型,可以进行多语言语音识别以及语音翻译任务,可以将语音音频转录为所讲语言的文本,以及翻译成英语文本。
查看论文:https://cdn.openai.com/papers/whisper.pdf
开源代码:https://github.com/openai/whisper
Whisper 的训练数据中65%为英语音频和相匹配的转录文本,大约18%为非英语音频和英语转录文本,17% 为非英语音频和相应语言的转录文本。非英语的数据中包含了98种不同的语言,而某一特定语言中的性能与所采用这一语言的训练的数据量直接相关,如在英语语音的识别中,模型已接近人类水平的鲁棒性和准确性。
矩池云安装 Whisper 过程
环境配置&租用机器
在 Whisper 的 Setup 中,我们可以看到所需要的都是Python 3.9.9
和PyTorch1.10.1
,同时也兼容更新的版本。
打开矩池云-主机市场,在此我们选中 K80 进行尝试,根据 Setup 可以选择Pytorch 1.12
系统镜像,点击下单。
运行后,点击 JupyterLab,进而“点击打开”。
下载代码&模型
进入页面后,点击 Terminal
打开 Terminal 后,输入以下代码
pip install git+https://github.com/openai/whisper.git
如下
安装成功后,页面提示 successfully installed...
如果系统中没有安装过 ffmpeg,还需输入以下内容进行安装
sudo apt update && sudo apt install ffmpeg
安装过程中会提示 是否继续,输入 y ,回车即可
安装完成后,状态如下
使用 Whisper 进行转录
准备文件
方法1: 通过矩池云网盘客户端上传文件
打开网盘客户端,可以点击上传,选择文件,或者直接将文件拖拽到客户端界面。
方法2:通过 JupyterLab 上传文件
在页面上点击,进入到/mnt,可以直接将音频文件在此进行上传。(此处我们自建了一个文件夹,大家可以根据需要来进行操作)
进行转录/翻译
Whisper 在默认条件下,输入音频是进行转录的 我们以转录为例子,在左侧文件夹,复制文件路径,
输入 whisper 路径如下
whisper mnt/int/QA2.wav
在不对其他项目进行设定的情况下,系统会自动检测语言,进而进行转录,
以吴恩达 Andrew Ng 和 AI 科学家Christine Payne 的一次访谈 的音频转录为例,系统将自动生成时间轴和文字内容,如下。
同时,在默认文件夹还会生成 srt txt vtt三种格式的文件,以方便使用者在不同情境下调用,指定文件夹也可以通过指令 --output_dir 进行指定。
针对于多个文件,处理方式为直接将多个文件路径放置于 whisper 之后,即可逐个进行处理。
参数解析
Whisper 指定运行参数方式为:whisper 音频路径 --具体任务。 在 whisper 中,更多可运行参数如下:
参数名 | 描述 | 默认值 |
---|---|---|
[--model {tiny.en,tiny,base.en,base,small.en,small,medium.en,medium,large}] | --model 模型类型 从小到大的不同模型,分别为tiny.en,tiny,base.en,base,small.en,small,medium.en,medium,large | |
[--model_dir MODEL_DIR] | 存储模型文件的路径 | ~/.cache/whisper |
[--device DEVICE] | 使用Pytorch的设备(CPU or GPU) | CUDA |
[--output_dir OUTPUT_DIR] | -- output_dir 保存输出的路径 | None |
[--verbose VERBOSE] | 是否打印过程和debug信息 | True |
[--task {transcribe,translate}] | [--task {transcribe,translate}] --task 任务:是否执行 X->X 语音识别 ('transcribe') 或 X->英文翻译 ('translate') | transcribe |
[--language {af,am,ar,as,az,ba,be,bg,bn,bo,br,bs,ca,cs,cy,da,de,el,en,es,et,eu,fa,fi,fo,fr,gl,gu,ha,ha,hi,hr,ht,hu,hy,id,is,it,iw,ja,jw,ka,kk,km,kn,ko,la,lb,ln,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,nn,no,oc,pa,pl,ps,pt,ro,ru,sa,sd,si,sk,sl,sn,so,sq,sr,su,sv,sw,ta,te,tg,th,tk,tl,tr,tt,uk,ur,uz,vi,yi,yo,zh,Afrikaans,Albanian,Amharic,Arabic,Armenian,Assamese,Azerbaijani,Bashkir,Basque,Belarusian,Bengali,Bosnian,Breton,Bulgarian,Burmese,Castilian,Catalan,Chinese,Croatian,Czech,Danish,Dutch,English,Estonian,Faroese,Finnish,Flemish,French,Galician,Georgian,German,Greek,Gujarati,Haitian,Haitian Creole,Hausa,Hawaiian,Hebrew,Hindi,Hungarian,Icelandic,Indonesian,Italian,Japanese,Javanese,Kannada,Kazakh,Khmer,Korean,Lao,Latin,Latvian,Letzeburgesch,Lingala,Lithuanian,Luxembourgish,Macedonian,Malagasy,Malay,Malayalam,Maltese,Maori,Marathi,Moldavian,Moldovan,Mongolian,Myanmar,Nepali,Norwegian,Nynorsk,Occitan,Panjabi,Pashto,Persian,Polish,Portuguese,Punjabi,Pushto,Romanian,Russian,Sanskrit,Serbian,Shona,Sindhi,Sinhala,Sinhalese,Slovak,Slovenian,Somali,Spanish,Sundanese,Swahili,Swedish,Tagalog,Tajik,Tamil,Tatar,Telugu,Thai,Tibetan,Turkish,Turkmen,Ukrainian,Urdu,Uzbek,Valencian,Vietnamese,Welsh,Yiddish,Yoruba}] | --language 语言:原音频中使用的语言 | |
[--temperature TEMPERATURE] | --temperature 温度参数:文章使用的是基于温度系数的采样,这个参数就是采样的温度系数 | |
[--best_of BEST_OF] | 在温度非0时的抽样使用的候选词数 | 5 |
[--beam_size BEAM_SIZE] | beam搜索中的beam数据的数目,仅在温度为0时可用 | 5 |
[--patience PATIENCE] | beam解码是使用的可选耐性系数 optional patience value to use in beam decoding, as in https://arxiv.org/abs/2204.05424, the default (1.0) is equivalent to conventional beam search (default: None) | None |
[--length_penalty LENGTH_PENALTY] | -- length_penalty 惩罚系数:用于正则化的 optional token length penalty coefficient (alpha) as in https://arxiv.org/abs/1609.08144, uses simple length normalization by default (default: None) 可选的惩罚系数$\alpha$ | None |
[--suppress_tokens SUPPRESS_TOKENS] | 采样期间要抑制的token ID的逗号分隔列表;“-1”时将抑制大多数特殊字符(常用标点符号除外) | -1 |
[--initial_prompt INITIAL_PROMPT] | 可选文本,作为第一个窗口的提示。 | None |
[--condition_on_previous_text CONDITION_ON_PREVIOUS_TEXT] | --condition_on_previous_text 先前文本使用状况:如果为 True,则提供模型的先前输出作为下一个窗口的提示; 禁用可能会使文本跨窗口不一致,但模型变得不太容易陷入故障 | |
[--fp16 FP16] | 在fp16中进行推理 | True |
[--temperature_increment_on_fallback TEMPERATURE_INCREMENT_ON_FALLBACK] | --temperature_increment_on_fallback 回退温度系数:当解码未能满足以下任一阈值时的回退增加的温度 | 0.2 |
[--compression_ratio_threshold COMPRESSION_RATIO_THRESHOLD] | compression_ratio_threshold 压缩率阈值:如果gzip压缩比高于这个值,则认为解码失败 | 2.4 |
[--logprob_threshold LOGPROB_THRESHOLD] | 如果平均对数概率低于此值,则将解码视为失败 | -1.0 |
[--no_speech_threshold NO_SPEECH_THRESHOLD] | --no_speech_threshold 静音阈值:如果 <|nospeech|> 标记的概率高于此值,并且解码由于“logprob_threshold”而失败,则将该段视为静音 | 0.6 |
[--threads THREADS] | 使用Pytorch CPU做推理时,使用的CPU线程数 | 0 |
保存环境,下次直接调用镜像
如果使用比较顺利,希望下次可以直接启动已经安装好的 Whisper 的镜像,可以在此处“保存到个人环境”,如果是团队共享,则可以“保存到团队环境”
如果已经矩池云微信公众号上绑定过账户,则在手机上同时会收到保存环境成功的提醒。
保存环境后,下次使用该环境,可以直接在“我的环境”中迅速打开,无需再重复进行上一次的设置
优势和局限性
我们针对一段在 CVPR 2022 会议上一段技术音频同时使用 Youtube 生成的字幕与 Whisper 生成的字幕进行了比对。
句子完整性更好
Whisper 能按照speaker语气停顿断句,断句后有的甚至影响了精准性 vs 不破坏句子完整性,保持原话轮、原语义群;
精准度更高
Whisper 在精准度上确实比较高,比如如下这个例子。
这种精准度,同时体现在弱语气/低语调的插入语/状语的处理结果更优,如下。
在数字方面,精准度似乎也更胜一筹。
更重要的是,我们发现一些专业术语的转录方面,Whisper 也呈现出更精准的状态。
当然,以上并具有统计学意义,只是我们在做尝试的时候发现的一些 Whisper 优秀之处。
局限性
当然,Whisper 也有其局限性,我们也汇集了一些如下情形。
1、目前 Whisper 模型只能对语音识别后,转换为对应语言的文本,或将其翻译为英语,则意味着在翻译这一层面,最终无法实现由英语转换为其他语言,在这一方面,其他模型在多语言方面可能去的了更多的进展;
2、在实时性方面,Whisper 模型本身不支持即使转录的功能,但是官方认为其速度和规模可以支持实时转译,但仍需在此基础上进行二次开发;
3、如输入的音频中为多语言混合,Whisper 对于这种情景也暂无解决方案;
4、此外,对于环境音比较嘈杂的情况(比如有噪音,或者有背景音乐),如不设定具体的 temperature ,有一定可能转录结果会有所不同,所以如有这种情况可以进行设置,关于 Temperature 的一些信息可以参考https://algowriting.medium.com/gpt-3-temperature-setting-101-41200ff0d0be。