自定义 Whisper 模型
MediaPipe4U Speech 通过集成 whisper.cpp 来支持 Whisper 的语言识别。
MediaPipe4U Speech 的 Whisper 功能支持 CPU 和 GPU 推理。
Whisper 的 GPU 推理不依赖于特定显卡供应商,任何支持 Direct3D 11.0 的显卡都支持。
Whisper 简介
Whisper 是 OpenAI 开源的语音识别模型。
Whisper 支持 99 种语言,MediaPipe4USpeech 中的 Whisper 。
你可以将任意的 whisper 模型通过 whisper.cpp 的转换工具转换为 gglm 格式以供 MediaPipe4U Speech 来使用。
Whisper 各种语言的效果可以参考下面的错误率图表:
可以看出,Whisper 比较擅长的语言是:
- 西班牙语
- 意大利语
- 葡萄牙语
- 德语
- 日语
Whisper 提供了多种规格模型,推荐使用 small 或 medium 规格的模型以获得最佳的性能和最好的效果。
模型尺寸越大效果越好,但是推理速度也会越慢。 如果你决意使用 large 模型,可以对其进行量化来提升推理性能。
ASR 语音模型包结构
MediaPipe4U 对 ASR 语音包格式做了约定,是一个 GZip 格式的压缩文件,解压后都包含一个 asr 文件夹,asr 文件夹下包含一个 asr.conf 文件, 通常还包含一个 models 文件夹。
- asr.conf:模型包配置文件
- models:存放模型的文件夹
以 Whisper 模型包为例, ASR 模型包结构如下:
├─asr
│ │─asr.conf
│ │
│ └─models
│ ggml-small.en.bin
asr.conf 文件必须是 utf8 编码的文本文件。
配置参数:
一个典型的 Whisper 模型包 asr.conf 文件内容如下:
# config for whisper
--model_path=./models/ggml-small.en.bin
--provider=whisper-gpu
--language=en
asr.conf 文件每一行是一个模型参数,以 --
开头,非 --
开头的行无效,被认为是注释。
model_path
表示模型文件的路径。
可以是绝对路径,也可以是 asr.conf
的相对路径,相对路径通常以 ./ 开头,表示 asr.conf
所在的目录。
whisper 模型必须是 ggml 格式的模型,也支持 ggml 量化后的模型。
provider
模型推理提供程序,如果不填写表示 FunASR 模型(FunASR 模型数量有限,这里不介绍如何制作 FunASR 模型)。
Whisper 模型有两种 provider 值:
whisper
: 表示 whisper 模型使用 CPU 推理。whisper-gpu
表示 whisper 模型使用 GPU 推理。
whisper 模型的 GPU 推理不依赖 CUDA, 任何 GPU (AMD/Nvidia/Intel)都会获得加速效果。
language
表示使用的语言,whisper 有多语言模型(支持 99 种语言),但是你需要为推理引擎指定一种语言,目前不支持语言自动识别。
语言代码请看本文档后续的章节。
模型转换
你可以在 HuggingFace 上下载已经转换为 gglm 格式的 whisper 模型:
https://huggingface.co/ggerganov/whisper.cpp
你也可以使用 whisper.cpp 来转换原生的 whipser 模型到 gglm 格式,如果你想自己转换模型,请看这里
模型量化
量化后的模型运行速度更快,尺寸更小,但是精度会有所损失,你可以根据实际情况来选择量化或者不量化。
关于 whisper 模型量化的方法,请看这里。
语言定义
在配置模型时 language 参数需要指定语言代码,下面是语言代码和语言的对应关系。
en: english
zh: chinese
de: german
es: spanish
ru: russian
ko: korean
fr: french
ja: japanese
pt: portuguese
tr: turkish
pl: polish
ca: catalan
nl: dutch
ar: arabic
sv: swedish
it: italian
id: indonesian
hi: hindi
fi: finnish
vi: vietnamese
he: hebrew
uk: ukrainian
el: greek
ms: malay
cs: czech
ro: romanian
da: danish
hu: hungarian
ta: tamil
no: norwegian
th: thai
ur: urdu
hr: croatian
bg: bulgarian
lt: lithuanian
la: latin
mi: maori
ml: malayalam
cy: welsh
sk: slovak
te: telugu
fa: persian
lv: latvian
bn: bengali
sr: serbian
az: azerbaijani
sl: slovenian
kn: kannada
et: estonian
mk: macedonian
br: breton
eu: basque
is: icelandic
hy: armenian
ne: nepali
mn: mongolian
bs: bosnian
kk: kazakh
sq: albanian
sw: swahili
gl: galician
mr: marathi
pa: punjabi
si: sinhala
km: khmer
sn: shona
yo: yoruba
so: somali
af: afrikaans
oc: occitan
ka: georgian
be: belarusian
tg: tajik
sd: sindhi
gu: gujarati
am: amharic
yi: yiddish
lo: lao
uz: uzbek
fo: faroese
ht: haitian creole
ps: pashto
tk: turkmen
nn: nynorsk
mt: maltese
sa: sanskrit
lb: luxembourgish
my: myanmar
bo: tibetan
tl: tagalog
mg: malagasy
as: assamese
tt: tatar
haw: hawaiian
ln: lingala
ha: hausa
ba: bashkir
jw: javanese
su: sundanese