|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 4 W" T0 e5 P R" p& ]
) p g) U. E% e借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 y* _2 [7 A7 F! N
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
D7 ~8 F) j" ^- `* x----------------------------------------& _& C7 }, z% Y! j% j1 W
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
1 Q3 X6 Y, W' d: ^( Q5 ^0 Q) K在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。# D: f* T/ m2 ^9 I7 ~
----------------------------------------$ ?; }6 l& f& L: p
https://github.com/guillaumekln/faster-whisper0 f" {7 |. N% |9 b8 z a8 p) b+ q; B
安装如下:2 d$ \7 u& t4 s' w: y
1, Windows 10% E& N) c* m: X9 u% C7 c! O- B# S
2, Python 3.10.11+ o& }' ]1 O. p1 E. Z1 ?# ~( d6 G
3, CUDA 12.1
/ L' a f0 e- I4 a; O/ P) S4, 在python 3 中安装
3 |7 m6 C, C. E# D- e! tpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 g$ t1 E' X+ E* x& d$ U. h2 h' j
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
0 E4 y5 f. P" {5,pip install -U openai-whisper, W5 y- W5 l' B5 c, z; t7 N1 [, U
这是向whisper 致敬,可以不装& G/ s; F @/ N- u8 R
6,pip install faster-whisper& y* T4 c. G7 r. b0 R+ i+ i
----------------------------------------
+ x+ n7 p7 x) ~whisper 我用的命令行,faster-whisper 我用的是python。
* q* |6 |9 K2 X$ B( U0 z下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 \4 V# I% s2 U1 x. C! s' U- Y- P+ J8 W( s8 N4 D
----------------------------------------
/ Y1 m3 i4 x' F+ _7 K# ~
1 w, I3 i, L1 }& E f# l# Nfrom faster_whisper import WhisperModel
0 q z; r, A* q) _- b( v( t% _8 ?' K) ~
/ Y5 m7 M+ c/ V4 Q) jmodel_size = "small"
2 `: t$ b% [9 F% W: o+ Q0 e5 i' r, O% @
model = WhisperModel(model_size, device="cuda", compute_type="int8")9 ^5 V; v* H; n
- T9 r5 o4 f. Q5 A$ Bsegments, info = model.transcribe(, ]& Q( l# }+ O) P: n
sourceFileName, 4 l! e3 j$ _' X% ?' j$ n7 s
beam_size=5,
! |% u/ s6 a: O language="en", 7 t5 u* _$ X. o- A. i
task="transcribe", 4 ?7 Q3 @ o# e; o! x8 e5 K
word_timestamps=True, + `, {% R" k6 W) b1 b
initial_prompt = "Hello, welcome to my lecture.")# D3 ]* ^0 b3 l$ Z. d, u) U5 T
$ x6 V" X6 a) Ufor segment in segments:$ u; k4 K( w. v3 F* S
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: Q2 I3 j& B( W8 @' \/ K! L& E, U7 t( w2 {" X; [" C% x3 m- G6 P
for word in segment.words:
6 K' I2 M" O8 h8 d7 B 9 Z. @" _0 o6 ~
----------------------------------------
5 E1 G8 m. e& k) u) ^4 d5 q: [+ w0 @
6 J* ~' O. r4 e* @代码说明:+ e. r; h+ L7 d N( ]
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 p- b4 t( r) D" c! m8 r1 p; d
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
6 p2 k" K! q1 C4 ~2 @2,segment 本身是很粗糙的,做字幕勉强能用。
( v2 f* d" G0 k0 t% k9 W# M3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。" y, k2 p: M* K* ?% D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中& l2 J6 o5 e! |4 @: t: k7 N$ R
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
* J n% q! _/ L5,model.transcribe 中参数说明:: v) j5 e. D2 g, p e
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数# P% n& z' e: H3 W( y6 y a5 H! q
其中
- a: w1 n6 X; j$ o/ X5 c- K. o word_timestamps=True, , p3 E& }% s6 E2 O' v3 h D \
保证了你能拿到 word,否则是拿不到的1 e3 Z- Q% Q9 \7 l, J0 q. J
initial_prompt = "Hello, welcome to my lecture.")9 u: h5 D# O6 E; V i6 O1 M
保证能尽可能准确的断句 punctuation,但是不是决定性的。
! r4 K0 ]2 g. ?! d, T$ _$ ^4 a其他参数可参考源文件:
- H: u2 c3 G h( khttps://github.com/guillaumekln/ ... isper/transcribe.py
7 d' s9 a9 o2 q152 def transcribe() e. w, x- A2 m: e k
从源文件你可以看到是支持中文的句号断句的。) o# I) C& F( z t; o3 ~/ q
: \; g9 Y0 i6 a' C) W& }' ~6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。0 p Y8 w( q2 \
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& h5 Z$ Y' M) \9 o8 m" X# l8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
; H# k( m) J2 o& w6 u3 L' R. i' [$ b6 [" c( x5 [* ]' e
! L( a( }$ H. X! L
; m8 ^) O2 | [3 F8 x: F+ K |
评分
-
查看全部评分
|