|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 0 m( I: u& b, Q. B5 x
* f h; H$ n* x4 K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
6 l. @" N* F( z% b, l9 I! a效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ }& A7 F T; j# D6 J* n# {! ]/ j----------------------------------------
0 I5 x% x$ o: @1 q, Z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。) O5 e. ]' L* q: X, Z9 D
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; Y$ y* Z1 `) D* m4 F* L& P
----------------------------------------
( H$ ^$ x8 N( v0 h) Zhttps://github.com/guillaumekln/faster-whisper
, s+ U6 d' g# C2 s6 m安装如下:1 d4 r, y, v& L8 i$ f" v- f
1, Windows 10
& L( i0 T, V* R9 v0 X4 o5 f6 X2, Python 3.10.111 `3 G {6 {+ |0 X+ H
3, CUDA 12.1
* X$ P4 o9 K/ u: S* p% F/ z4, 在python 3 中安装8 q6 y3 E" Q# m) T8 `- N
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 j2 ~! s* j6 g" ~" `" T2 e( r
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
' q5 w' f1 `% p) N5,pip install -U openai-whisper: d! h; W s& o5 ]3 j3 q
这是向whisper 致敬,可以不装# [: U' h8 h- h" {
6,pip install faster-whisper
4 g; b: \4 o* W& L----------------------------------------
2 N7 `9 S7 B4 c( Ywhisper 我用的命令行,faster-whisper 我用的是python。 r$ K9 u8 M+ A
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:, U& ?4 K6 o) X/ y: [. m
( J8 Z6 A2 S6 M7 ~( a* U- ]" W0 M
----------------------------------------/ j9 p2 J n6 F( G" z' f
4 L& G) d# {3 W2 Q3 s+ Lfrom faster_whisper import WhisperModel. b8 }. N0 T& t
. z- V# ^1 K9 U1 l) q
model_size = "small"
) [0 `& M" [+ @4 k
2 H3 o0 V" H) X) [# ?! jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")% F/ k% [5 E- v6 K; \, c& B$ C" A
* d; u. ^1 w! A- @ Jsegments, info = model.transcribe(
7 w! W8 l$ j% q% h" z, ]1 v sourceFileName, 8 g, a" \+ U, l
beam_size=5,
. E4 u( x, F, r; Z; u2 ?$ u language="en",
- ^, s1 c5 f0 J4 I- u$ F, G7 e' ^ task="transcribe",
/ {9 W8 p( r( V! j- X word_timestamps=True,
- i* U* z5 ]& J; U! _4 j! M initial_prompt = "Hello, welcome to my lecture.")4 x7 k% Z# w9 p6 V& d8 `
) m% K$ r7 B4 y, e* o: [0 ]
for segment in segments:0 q2 m; j5 e% C5 o
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))2 |0 w: c: b' Y" D6 A2 i6 {# R; k
4 g/ L# t( Z7 B5 |. I1 S: Q
for word in segment.words:* h: h, O0 z3 n
7 Y/ y5 `9 F* r1 d" b0 `' P
----------------------------------------
! B( t4 v5 `5 r3 S" y8 H" c7 C/ _ t4 O2 N; _
代码说明:
& D9 ^4 W% T1 @, ~/ j1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 T2 o1 C. t4 s
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
( T% `5 D: Y$ c7 a! R: W2,segment 本身是很粗糙的,做字幕勉强能用。( i+ @/ R0 ]- Y7 [+ P0 T
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
7 ?, r0 }6 N! C9 M6 ]0 N4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 M7 q( h4 Q5 v5 P6 z; O' T9 W3 J
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 b+ `* |" o, f- e; g/ t" R
5,model.transcribe 中参数说明:
! @ F+ O& ~/ `3 ?0 f你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
) ^; u6 k9 s" v- ?, }其中: `; L9 X. O# s3 ^
word_timestamps=True,
0 F4 W4 A( g# K+ U0 o% N保证了你能拿到 word,否则是拿不到的
0 B+ ~2 n* Q5 v W; s0 _0 I initial_prompt = "Hello, welcome to my lecture.")
* W' l* U6 u1 n z% w: j保证能尽可能准确的断句 punctuation,但是不是决定性的。: c/ C% Y7 p3 ^& Q
其他参数可参考源文件:
+ t: X; V) }2 A/ ?* H3 o! \https://github.com/guillaumekln/ ... isper/transcribe.py
, I* w4 \* b* @152 def transcribe(
/ a2 K( t% o8 S: E- r% Y# j从源文件你可以看到是支持中文的句号断句的。, v' b. g. T. H
& o6 Q# G) [/ q; b7 T4 I5 c" E6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。7 o4 G' w+ G- a9 S7 E3 O) }
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& {- @, u* N) _3 ?% U" b3 p8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
/ T" C+ _6 @& z5 T( `! ]2 D. y# A7 p
( J( ^/ J" D7 d/ |7 f: K! q
; s" N+ N- d( t |
评分
-
查看全部评分
|