|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 v& `; t2 K7 d& J, w" L
7 ^. [. O5 X( ~' g; D( _- y. [借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。' P4 f; M; r9 c6 _
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 `; J7 T+ E8 r. w* ]----------------------------------------
N( }0 P/ W) t) a7 K显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。% L' I' T C5 N) p
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。% U z+ P) d) i: ~% c8 G/ N: {# Z) U1 E
----------------------------------------7 Y& f+ r+ \/ E% J, O' ]
https://github.com/guillaumekln/faster-whisper5 U6 s+ }6 x' y* k" [
安装如下:
, R8 Q& b! X6 r6 [' |. a" E5 V1, Windows 105 j& A# z! P N! k! S$ T. ]
2, Python 3.10.11+ C3 ^5 e! U2 W5 w
3, CUDA 12.1
4 P0 ^, E0 L2 I# } l4, 在python 3 中安装1 p8 `9 w) B* R
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
1 ~) L7 [- e$ |8 P7 z这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。. h- M8 S0 i- T& ^' ?5 T0 u
5,pip install -U openai-whisper4 x: Q% g, \0 X) T0 T) s
这是向whisper 致敬,可以不装
: }, |: z" N" y4 {) Q) u3 B6,pip install faster-whisper) |, c1 X2 Y; @# [$ b- i2 Z
----------------------------------------
x" J+ [0 ?% B) ^whisper 我用的命令行,faster-whisper 我用的是python。
) A. s& `$ o, u: `& J1 z下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 l! @8 E. b& ]% l, |: p( w# ^ U9 X; ~
----------------------------------------
/ R; ?6 X! Q8 d6 b
5 {2 a/ F7 I$ t$ mfrom faster_whisper import WhisperModel
: s2 V( P1 r# @5 ~2 ?
8 X- q! N! W2 P! g: Wmodel_size = "small"7 C; T& I" }9 u
j! W+ U3 `4 H! wmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
8 t( [$ U; x& W" T+ E' N0 V: t* Q! s* g9 C- f; d3 r2 L
segments, info = model.transcribe(: R7 O6 q3 o) K9 I4 D5 T
sourceFileName,
! I9 l9 {8 O8 F& ~* M3 C0 z beam_size=5,
2 X; H3 r/ W' o1 F6 M* Q language="en", & C! a" m F+ ~) [ O
task="transcribe",
- z1 r4 b5 W1 W7 x( D word_timestamps=True, % u# z6 T: N) ~% Q0 W, A3 g/ q
initial_prompt = "Hello, welcome to my lecture.")5 K2 Q% h: r, ]3 u
3 ], R% i) e2 `# k) Xfor segment in segments:
2 M- G% t/ v, O- j) b" i& x print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) O7 W u4 D! _9 E- i
: l6 g, g* ]; J! l: J1 w for word in segment.words:
, l e) b9 L& c% H: X+ B
( v1 O2 B$ \; S( q! J- m----------------------------------------3 w* p: ]7 }; \" ?2 M
1 \' M% T) h; o5 c4 D" x) }
代码说明: _. v; X, `4 _' t3 G2 C, }
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
( l1 d& |" q8 b' t( B5 ?但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ H# T" q8 p8 T( Z2 a3 J2,segment 本身是很粗糙的,做字幕勉强能用。; Y: f! N# k& P
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 _( s1 l6 t+ }" |8 P
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 P: @. {( F }/ Q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
; S. Y$ ]' H) j- a6 R5,model.transcribe 中参数说明:
+ M- ^* \7 y) ^6 n1 _你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, D& Y' r' W: E# T其中& F9 D+ t0 q6 ^" c3 p+ U4 E& A! _0 O
word_timestamps=True, * C( u/ o: e' u/ Q& d. h
保证了你能拿到 word,否则是拿不到的
% A$ X, k6 G Z! {5 f initial_prompt = "Hello, welcome to my lecture.")
) f7 A, j0 Q# \: K0 H保证能尽可能准确的断句 punctuation,但是不是决定性的。3 M2 ?& L; b K) d ]9 i( Z
其他参数可参考源文件: E5 K: F" _9 O D m5 ~1 \
https://github.com/guillaumekln/ ... isper/transcribe.py
" G C% ~7 F' M9 ^+ M152 def transcribe(
' Y3 n- i: Z- m/ }+ Y) U. y从源文件你可以看到是支持中文的句号断句的。 r4 K7 A8 A5 R
6 J' V# Q9 c( _: K6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* O2 V. T, v! R& h7 p2 H7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。: z; |: Y0 G- R8 ^2 z' t
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& V4 w" [, L0 ]( n/ ?: b% H; z" [: `* F) }/ i( t* i% K* d
/ V- }8 `, S4 p a% [$ W
2 b) K A2 _/ i9 s3 g+ Y |
评分
-
查看全部评分
|