爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ' S8 \9 g# |0 D+ K* i3 l
5 W+ c% e) j: E" U# S* F( J6 k
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, A/ {# J/ I/ w效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
6 P5 D" {. `+ G* A& j0 K1 O----------------------------------------6 \7 o% Y; `  K8 w8 D6 \" x+ n' ~
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
! F1 u& F! k5 k, l8 I在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 D. |" W* R" l6 g7 V
----------------------------------------; J" K/ H2 x5 \, E
https://github.com/guillaumekln/faster-whisper
2 r/ m% g* v! k; P3 t安装如下:
5 U# ~8 q5 g, r& M$ ?1, Windows 10* [2 }& ~, b2 n. Y3 d
2, Python 3.10.11' Z4 u9 o2 M! r; Q" Z
3, CUDA 12.1
$ k8 i3 l  P1 w8 F/ s  Y0 R4, 在python 3 中安装; w, a5 k% g. i) n& C
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 [6 ~# o, F0 e4 x  H
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
, B# `3 F0 f: O6 a/ K5 m5,pip install -U openai-whisper9 d& Z. s/ ?* b2 ~
这是向whisper 致敬,可以不装' y1 v. `" l0 w
6,pip install faster-whisper, j4 L6 O" P; C' Q6 [( W0 g; Q1 `
----------------------------------------
5 V! x- }/ p* c( @% K( I  O/ Hwhisper 我用的命令行,faster-whisper 我用的是python。
1 B' y. d. R. e; Q/ Q下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 R. g7 t. T+ Z, W6 u
9 G% n* `' C1 p: @8 [- v----------------------------------------+ s( v" u8 W5 d' i0 h- {

& X/ I2 t7 g7 efrom faster_whisper import WhisperModel
) Q1 R2 u8 C) t
3 u  x8 T% C# }4 |model_size = "small"* y' _% `+ z+ T* h& O5 a

# {4 V+ ^# o6 J. {3 qmodel = WhisperModel(model_size, device="cuda", compute_type="int8")9 Z+ e/ C0 f+ B* f5 L
. K; y' x- V; P8 h8 h, R: \, M# C  R4 {
segments, info = model.transcribe(
- {! h3 x+ r& {* k- s6 a    sourceFileName, " V  \4 M! W9 F6 V. v
    beam_size=5,   z* z! z; X' G4 C, q% g+ r' D
    language="en",
# P, M2 H( |5 ?    task="transcribe",
6 g: b1 f9 @6 `/ H/ r2 Q7 u    word_timestamps=True, 7 }# U7 {5 N0 f
    initial_prompt = "Hello, welcome to my lecture.")1 R0 W8 r$ N8 L0 _& w0 x
& F( c6 t5 c/ a3 c; O
for segment in segments:
) |* _3 I2 L" T5 n2 N    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' H  D4 C. `2 y! g0 x! @0 d; `
; ^% a% |/ x* H0 ^$ s! b        for word in segment.words:
/ w' m5 [! p1 }9 `8 M, X. W9 B                " C  O. o7 _/ K0 j6 ^$ A
----------------------------------------9 d! f2 Q0 q/ e2 ~& i

+ E. S+ y7 N+ e* t3 V代码说明:
& }, N5 S- o! |# H* Q0 q! `  S& v- C1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
0 V% x/ M* H9 k8 Z0 p* {( V但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。9 s, F- Y5 R8 f" d
2,segment 本身是很粗糙的,做字幕勉强能用。, x! U* m; i: V/ V7 B$ J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。+ t8 b9 ~  |9 j6 k
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中* {  v2 Q. n- U6 S
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
. V$ }6 g% ~% ^  ^5,model.transcribe 中参数说明:2 Y- b5 ]0 [) A& \4 q6 t
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& s$ c, G5 l8 ?; }9 O. n) d其中! N5 H1 l2 `+ x1 v6 X$ y4 R
    word_timestamps=True,   O' A+ z6 b8 G4 {5 O
保证了你能拿到 word,否则是拿不到的# C1 {% f6 d5 d) i+ L2 a
    initial_prompt = "Hello, welcome to my lecture.")
2 a" F4 w* }; v. n; B8 E保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 k+ Q4 \# y3 g) l' ^; P其他参数可参考源文件:! l) j3 o. k& k6 {+ [. M4 }
https://github.com/guillaumekln/ ... isper/transcribe.py
. e) M* I8 U9 b' x152 def transcribe(
. D# w. b$ Z- M$ j从源文件你可以看到是支持中文的句号断句的。
/ }: D6 u5 v/ P  T- [: Z; ^, l" Y& L9 }3 H0 C6 v4 S" B
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。9 S* i7 |6 x) x9 U- H! |
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。- ?5 A. ]# U: O3 b8 O! Q+ Z
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
% K& i$ Q! ~  z8 Q/ c$ e8 r; D) y6 x. C7 p) K1 v8 M$ I; @: Q, W
) u  r" m9 R8 b/ E0 L' |7 z- T6 x$ U

2 r3 K0 C6 P. ]) j
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://129.226.69.186/bbs/) Powered by Discuz! X3.2