|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 R. w: g# ]8 z0 K' ~& R3 \4 u4 L* E# z+ S2 D, X. Z, |' Z
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
5 c* q4 w1 ]1 i+ Y( r# V) u, d效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
: b+ T* x9 a$ C# G4 V----------------------------------------) |( J8 r1 L( a0 N/ V
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
# X$ b- @8 w" |/ Y5 O8 A2 ^) U4 W- d在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。2 v4 X, ]3 o5 G/ O- ^" j
----------------------------------------! O: v9 U0 X( I9 s! C, S
https://github.com/guillaumekln/faster-whisper
+ g( E: k y' y+ ?安装如下:4 P4 P2 Q0 ^8 n
1, Windows 10
* w; m* V! l( `+ x- u$ @& [+ a. J2, Python 3.10.11/ Y6 k# L4 z3 `; _8 C
3, CUDA 12.1
8 \/ g# R6 ?( s& N+ i4, 在python 3 中安装3 c1 X6 ?! L7 q+ E, y( t% R6 S
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117+ G2 {! i- t# }5 B
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
5 Z5 v, d, d) e4 K4 I5,pip install -U openai-whisper$ M. x3 J. V' r, c5 D
这是向whisper 致敬,可以不装' o& B6 M1 ]9 Z% O4 l- V
6,pip install faster-whisper( D. i9 i/ i5 {+ L% Y" `! o, ^
----------------------------------------
/ D3 f2 F/ P4 Z& Q- \* [6 uwhisper 我用的命令行,faster-whisper 我用的是python。+ a$ l q9 V$ P [- N
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
8 v$ ~/ a$ d$ y6 T+ z t. r; X$ h4 u) y; X& v a
----------------------------------------3 Q5 c9 `: o8 B; h
( ~% I' ~$ r' G4 V& @6 [from faster_whisper import WhisperModel
Q' X3 x [6 R3 ?4 d$ D3 L* o0 i
model_size = "small"0 |/ W7 k& ]- k
: ~0 S2 r- r2 a) S4 K: S5 emodel = WhisperModel(model_size, device="cuda", compute_type="int8")
& ~5 H' O/ S2 j5 L- l( [$ \7 n; L( h4 V5 [
segments, info = model.transcribe(
, k& B) E+ d0 S% ~/ I sourceFileName,
/ w8 S( h: r9 g) T5 ] beam_size=5, 7 A- o4 K" w; z. Q+ K* R9 s
language="en", : M& y% C. p: A" q& K3 Y( @7 C5 C
task="transcribe",
" V c- R+ ?) y% p- N% \6 T word_timestamps=True,
g, m2 A) \; i+ q: K initial_prompt = "Hello, welcome to my lecture.")3 P$ x) A% v* a: }7 K8 n3 {- t- _4 }
1 E9 Q4 Y/ w9 \! X4 r- D
for segment in segments:+ L6 `5 L$ y" g
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) c" K; C4 M0 A9 f( L0 Y
9 z+ _7 R* o W5 n for word in segment.words:
+ z# D r8 E, t; h' |2 O , F+ {2 c( i, E# Z% V# t3 U
----------------------------------------
% A) S, k0 H3 @' ~- t4 }, n4 T" `3 ~# p3 ]' u
代码说明:7 o3 T3 Q1 Z: n' t% t2 `+ Q
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% T! Y0 v; }5 o7 {$ S$ F: Y
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
8 |) h" C& T* i$ b0 V2,segment 本身是很粗糙的,做字幕勉强能用。. H7 J p5 o( a7 P
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 |% T8 V2 X2 ^2 i2 y4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中" }' @& K0 Y' ] ^
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。3 s6 k; z- u; Z' I, N5 e
5,model.transcribe 中参数说明:
1 C" ^4 u* R. n3 ?; j你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数9 j$ f, }# u1 R# F
其中
0 r" Z% ?1 Z! \) R word_timestamps=True,
/ f$ H4 h5 R1 x保证了你能拿到 word,否则是拿不到的
( w% n' R) L4 z% L% A initial_prompt = "Hello, welcome to my lecture.")
) t* t9 D V s6 E; }保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 B/ p$ l M2 g0 e- Y其他参数可参考源文件:( l6 h6 b1 t$ r& u1 ^! Z: j' j
https://github.com/guillaumekln/ ... isper/transcribe.py& [/ H3 n8 c' d# d$ x- A
152 def transcribe(* g8 H) x0 H" U" `$ x
从源文件你可以看到是支持中文的句号断句的。
% p0 }+ ^4 ?& P! ^; v& ^+ c# c9 {- k* Z+ P) [2 e; [1 x! }
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。( M/ \" g, a' `3 g% P# G
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。6 P, G- r* y( w0 t( l6 H
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 W! E- I1 E x9 q& r: |* f3 e7 b' v
) |& }3 C7 ]9 X$ j I 1 Y- ?3 y" W7 ?: X6 p: ]. ^
# d. N* v% p6 {* O
|
评分
-
查看全部评分
|