|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * M0 J) G' p1 U8 G5 C1 k) d- N2 k
, x1 f/ A5 \0 t/ z! g& h借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& ?0 k9 h; M5 ?) Z" C* K
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
& z& q$ r# d# r0 R& [0 M6 s' U---------------------------------------- {+ a! \* C1 u6 D% H
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( ~3 _, q2 L: W* l9 T$ l5 L2 h& |在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
7 Y, V6 k. J4 E' \----------------------------------------; h( f( `# t1 U$ h
https://github.com/guillaumekln/faster-whisper
0 ~( w$ B( k1 A; r M安装如下:0 a* n' Q* }+ x M' ]. O1 M: O
1, Windows 10
$ t7 i0 J) b; N0 g( o: H5 K2, Python 3.10.118 ]+ U2 v. _+ _2 I5 S% N2 w
3, CUDA 12.1
* C) E) I( _$ f4 L5 J+ |4, 在python 3 中安装
2 {9 R% Q8 X# P* M; Ypip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
0 r7 u9 ], ]2 V6 Q% B" |( o这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( j" r+ s) z5 h5 U. I/ \ u5,pip install -U openai-whisper
5 P1 k+ q# E5 O: p这是向whisper 致敬,可以不装
- p9 U1 f: y, R0 p# u* s6,pip install faster-whisper
$ n1 ?7 a: o7 s6 Q! S----------------------------------------2 X ~2 L! }& T8 m8 S N" V
whisper 我用的命令行,faster-whisper 我用的是python。. `1 X9 a9 C. ^" `8 D
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:1 L4 [" [1 `) Q
' u8 P( p* k6 ~5 |2 P! F
----------------------------------------
- t: D+ {1 R1 h+ |3 ?2 S
( P1 E' o3 I+ W3 r4 ^from faster_whisper import WhisperModel
! }/ I2 \2 a3 \! \- N8 @. K, \# ^5 \' a& c3 b
model_size = "small"
+ y1 J. t3 ~$ z7 e
* T" `- k$ ], p% j( Zmodel = WhisperModel(model_size, device="cuda", compute_type="int8"), ~! B; g- \7 d+ i% ]! G4 q
+ D0 V# W0 h' h5 j/ I
segments, info = model.transcribe(+ q8 Z9 c( W) l n' \
sourceFileName, , { o3 j/ J, g( x( {" a8 u# W
beam_size=5, 6 q. T1 n4 s$ b. {9 r- s
language="en", ' Y3 n: r9 G& X/ S
task="transcribe", % b# d, F3 h: {" M- Y9 B* |
word_timestamps=True,
+ k, ~( P `% t, Y initial_prompt = "Hello, welcome to my lecture.")
+ r1 b4 b$ Q* Q7 y( g/ ^
; S% D: x; A" I! g1 H4 @3 ^for segment in segments: V1 g/ z: n" i! v
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
# q x4 Y" D+ l! a; o" h) C) V* k. Q. @% F! D5 ]
for word in segment.words:, t, V& G: t+ V1 f. C* Z$ f0 X' B1 g
! C0 W2 w+ }% B----------------------------------------, C& Q5 v0 n2 S( l% E# w, t
) D# H. ]% |8 g+ m6 Z
代码说明:# a0 Z. h; W; k/ R# v$ E
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
/ i7 v$ z8 Q3 s7 ^, r. W6 b. F但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
3 d. D+ {. D: K; c9 p2,segment 本身是很粗糙的,做字幕勉强能用。
+ g i. }6 f& l3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
I1 g. j$ S0 ^9 J8 k" ]4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
7 B* N- Q5 D$ C0 n比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
* a6 T2 F; s3 k6 r5,model.transcribe 中参数说明:# ~ d5 A' b2 B" X
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
9 b6 v. W- X$ I9 w) M3 M! Z1 ~其中2 U! X7 X# v3 c% c. m
word_timestamps=True,
: T) A$ ?/ z* c! ~保证了你能拿到 word,否则是拿不到的
9 T' l% d( o4 w: X4 p. F6 {" ^ initial_prompt = "Hello, welcome to my lecture.")6 @3 C: h6 }/ ]
保证能尽可能准确的断句 punctuation,但是不是决定性的。6 h- |4 s0 D' p6 y7 `. i
其他参数可参考源文件:8 v: y( ^" J7 n' m/ S7 ^
https://github.com/guillaumekln/ ... isper/transcribe.py
6 c: ^$ @" f' W8 `6 }152 def transcribe(
7 t, ]+ H1 l* q& _& }, {从源文件你可以看到是支持中文的句号断句的。
1 k- [5 v9 q r0 }2 H2 Z: j; j* P) \* @$ d ^+ ~8 J
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
, G, |/ b5 P: g. z& ^+ `7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) M" R6 E2 P6 {- I! J9 V8 X
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。" v: }3 J1 c" B" ?
# Z9 h# d) _$ T, Q# ~
" m% e7 L) k% H0 m
6 @2 ~& e: E% {3 n9 v |
评分
-
查看全部评分
|