|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 5 p1 O6 U* T' H- K- y
0 S3 Z2 T) n6 ]9 H- _
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
2 R2 y' X4 w2 \0 l) {* z0 {: ]& y效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
1 P/ [) T2 o6 E5 `! I9 s7 b1 O$ m----------------------------------------6 s3 O6 [6 ^* G2 H1 `
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
8 x ]8 F5 C7 U4 |在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。. V% }! _3 B, j3 G6 J
----------------------------------------
7 b6 [( ~2 k: Thttps://github.com/guillaumekln/faster-whisper6 t+ g/ L& }) V+ j$ k6 m3 e
安装如下:
. J t) [& z* U1, Windows 10
@* w2 Z0 e. _* N0 ^' w* G2, Python 3.10.11. E2 [: e: f0 G" J# u. d( B7 E
3, CUDA 12.1
& j) B0 i. ^; T$ r5 O4, 在python 3 中安装
( r4 q. i2 W9 Spip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
; s0 Q: ~4 X* @+ b( K) `7 n6 a3 A这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
% R; n( f- t* y/ s! o5,pip install -U openai-whisper
" O8 w; F e3 x- l% o: V- T这是向whisper 致敬,可以不装
8 t& t6 e0 ~- _5 S5 o$ A6,pip install faster-whisper0 Z! J9 q8 K8 [5 J) b9 |& X \
----------------------------------------; k5 u& j% V+ j4 k/ m
whisper 我用的命令行,faster-whisper 我用的是python。! H/ x. h2 {- ]2 d D! w
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
6 s: j7 K/ P& _+ t& Q7 @: }' o" S5 g2 H' X/ E5 P
----------------------------------------: H1 }. `* J, d
1 I* s6 t( L# K% B+ {1 ^from faster_whisper import WhisperModel
! l3 S1 J. u( i& I" s) O
& d, |3 @1 [; M( m4 Gmodel_size = "small"
5 q% H) S J4 k! V
6 u6 f- `# u/ l t$ Nmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
: ?; G' ~; h, V, Q
m1 }3 B# n1 u0 dsegments, info = model.transcribe(0 X+ H9 j1 B E9 b5 a( y
sourceFileName, ' n" C! p! S3 e3 R
beam_size=5, ) v5 a" S, [+ z- H7 p
language="en",
& X( x9 I3 H& h# d. ^ I0 _8 O' i task="transcribe",
) z4 n* G4 V7 {: i$ z- y* H( X word_timestamps=True,
5 Z$ z7 D, U' ~ initial_prompt = "Hello, welcome to my lecture.")+ X4 I9 Q* d1 S4 ?3 v+ n$ ?
- |% }' N5 @$ v; Jfor segment in segments: S, Z- b* L$ A3 o4 L
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
4 I3 H9 M0 J. m% {& J
+ q" V. V" S% D" k6 |- e8 v for word in segment.words: q0 s$ n; j8 K0 d
) ?, z3 V' U l$ l) m
----------------------------------------( @$ h/ E' p) F. `3 _2 o, g
: R, t. }! G6 F8 ?
代码说明:+ N) V( B/ i/ i! Y& Z
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# R; h, r* J! O- @- _: L但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。( L8 p6 m0 m& B" Z' o: I, f8 v
2,segment 本身是很粗糙的,做字幕勉强能用。' q% O. W: c/ _
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。# G$ [4 F& ]/ x! X4 l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
) k$ W( {( f! Y9 G7 }% B比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。# j" Y6 Y: @5 V3 ?, e
5,model.transcribe 中参数说明:% w( G% \' C3 ]( X% ~
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
B. \; ]& C/ W. F4 s& I其中
; b& I/ k$ [' J: g word_timestamps=True,
$ P5 ]& }! H7 s( T保证了你能拿到 word,否则是拿不到的
e; H5 L+ ]+ ] \ initial_prompt = "Hello, welcome to my lecture.")$ X c X6 |8 R- @
保证能尽可能准确的断句 punctuation,但是不是决定性的。5 e) \/ A% J" M; u3 X' R" X
其他参数可参考源文件:: Q! h: C L& [: I
https://github.com/guillaumekln/ ... isper/transcribe.py
# w' {" M$ {; j" C152 def transcribe(8 M/ h1 L2 `2 F
从源文件你可以看到是支持中文的句号断句的。4 z4 Y+ m6 L5 G K
3 `3 F! |! D3 ^, m# L6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。8 }2 j2 y3 G/ I
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。0 N2 g" q7 z+ i1 Z! b4 t/ u5 D, N0 @
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
" T6 A) |& h8 H( e0 |
, o. Y& E& I% t. B
8 X1 P. d5 _" X5 A& L7 n
5 n; t% g# y* ^6 m0 b4 M+ ` |
评分
-
查看全部评分
|