|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 / u5 M. L( Z3 _9 R$ G; V
7 o) i% f0 J4 @ Q+ x
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。( y1 P) M) _: X( V& H F2 G4 b
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。' R1 i2 h) ?3 p8 C
----------------------------------------0 J) p8 p& e; [0 h( u: D* K% H$ T
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。* e2 W6 p0 l. O8 d( \ ?5 ]
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。2 E3 @. I9 C/ }1 j4 X$ r
----------------------------------------/ ~9 ]! G% M5 w6 a
https://github.com/guillaumekln/faster-whisper* i* I* A7 u% f: Q0 ]3 o
安装如下:/ {# g w" T4 _
1, Windows 10, k: |! X* D6 q; Q, R' ~% w
2, Python 3.10.11
% d: v8 ?7 V9 N- d) s# F/ f3, CUDA 12.1
+ P7 V+ J3 B5 ]/ x" X$ H4, 在python 3 中安装
$ a4 z$ x7 H0 A1 ]. Rpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* l" \5 d M0 H$ f这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。6 H2 k; o( x, x( d& C) @0 t
5,pip install -U openai-whisper
3 o; p; }$ Y3 o* N1 A8 i这是向whisper 致敬,可以不装 s& M3 z( ^. N/ Z7 U% R
6,pip install faster-whisper% c# N9 Y/ P( m. G! X: `8 P
----------------------------------------
& b4 V0 W2 N [0 uwhisper 我用的命令行,faster-whisper 我用的是python。
' J m- i! f# C% f* ?: l9 o+ {下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:3 Z' _* H0 \4 I
( j( Q1 K% {9 l j3 Q4 O! a- Z----------------------------------------
" w p4 F# _8 z \
" ^ H' j( w8 V: ]: @from faster_whisper import WhisperModel& \( C% P- U/ a% h2 P4 ^$ f3 [: w! E
! I% I9 M1 [/ |' d, Y7 P# [
model_size = "small"$ P* c. o1 p$ f- Y3 a9 S
& C; J; q/ ^" ^
model = WhisperModel(model_size, device="cuda", compute_type="int8")" o M$ h/ m8 r [8 I' V& h* o
7 o' P7 ]9 P" Y
segments, info = model.transcribe(" P+ e+ R9 t, S( v3 @% b" B
sourceFileName,
* |2 ] k6 P) A" |7 R beam_size=5, 2 v0 |( ]4 J" _
language="en", ; g* v6 T% F9 U1 a) D/ ]9 M3 ?$ V
task="transcribe", ) d) m$ K/ a& h- n" r1 v
word_timestamps=True,
6 [8 b1 I. Z6 X initial_prompt = "Hello, welcome to my lecture.")
# L+ M% h3 W2 E( I/ H2 g# D3 k8 P8 e3 G, U! l4 I
for segment in segments:- o9 j. w- e/ {3 d3 h' c, e
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& N+ x& M& a+ e7 e! ^! V3 V/ T9 V& A. Y0 s2 r
for word in segment.words:- `! f/ M) J& ]" z2 } H
/ v G7 N2 o- g- x
----------------------------------------& c7 [! k" \/ s- l) _% i+ F
! k! r3 e6 B3 t
代码说明:
# X) j) g2 {! h( M: I9 i1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。; h* Q! q- K7 c1 X6 H+ N4 P: P( j
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* C6 E6 c( R4 S4 x9 @* r9 Y* D2,segment 本身是很粗糙的,做字幕勉强能用。
! C; X L4 k3 U. S- v2 `3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
6 h! d3 Q7 U) W3 r4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
9 J/ o6 ]# \% O; E6 F, t) ]" \比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: V, }3 b) I- ]! e5,model.transcribe 中参数说明:& Z4 y9 s ^& |5 `7 n/ I9 ?8 T
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
% F7 ?& a- \) w" ]- O其中' f, @8 D& V/ e6 t- D: S
word_timestamps=True,
0 z3 z: R V+ c. i保证了你能拿到 word,否则是拿不到的9 j ~8 n. f" z' A) f4 {" Z* W- z
initial_prompt = "Hello, welcome to my lecture.")4 ]4 r+ v3 g- d5 Y8 j
保证能尽可能准确的断句 punctuation,但是不是决定性的。4 Y! U; v; V2 c' D0 f
其他参数可参考源文件:6 ?2 n% M2 O; C0 A9 {7 Q# ?/ g
https://github.com/guillaumekln/ ... isper/transcribe.py
1 b6 n% b$ t* }2 h2 C6 _6 h; O152 def transcribe(- Y$ k. E9 ^ k6 D! c
从源文件你可以看到是支持中文的句号断句的。5 Q) e' c8 S: J8 a
; w5 ~+ y) ^3 L6 J: d1 P6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。' `! K! ? i6 A, l3 U) `/ V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
* U' |. R. r$ n. Y8 v& {, ^8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。7 M& N1 i$ v6 ]9 F8 O- b
! K/ f+ N, Z6 {# j- b E& e( p7 v F1 B. N. j/ N) v9 d3 r8 I
* G, C- |3 q. c' a8 Z2 A |
评分
-
查看全部评分
|