爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 0 G. ], W2 P- f2 n$ l) P
; L0 J+ [' \5 D' x# p9 F: A. J
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# u3 }3 X" T& `8 p9 t+ c3 j/ Z. S* U效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。" R' {! B2 y* a3 D
----------------------------------------5 i8 i. a! P6 ~0 i
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 @5 E% d, J, |9 z1 R0 _1 `9 I在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 ^1 e" y" z) `" I- C----------------------------------------
! U3 a/ P& @- z# I8 H* P8 ^0 Khttps://github.com/guillaumekln/faster-whisper7 E3 ?* m3 a$ x: V' Y0 u
安装如下:
8 j1 [$ ?# y2 m6 ^5 Y" d1, Windows 10
7 r/ J% W3 o$ L% B! h: H. l2, Python 3.10.11. T8 y2 ~2 n! m$ q8 L
3, CUDA 12.14 y$ J; Q7 F  d
4, 在python 3 中安装( ^8 @' _) j3 ^4 H" y+ P; ]
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
; T2 K' u# L# R( G, x这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。( W/ o! K% S9 k$ Q
5,pip install -U openai-whisper
, {4 h0 t; j- e* w( F$ x1 }这是向whisper 致敬,可以不装
& D3 d6 b8 L! g( r) \2 z4 [6,pip install faster-whisper4 X  g& h8 C0 z/ r( q
----------------------------------------
- ]2 C6 a2 Z* @" c, n/ Iwhisper 我用的命令行,faster-whisper 我用的是python。; M, ?( {2 q% P8 Q6 p
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# c& u; e# z6 k$ J

4 a1 P. t2 K% k# k% F----------------------------------------
0 y' y% ?5 J" S0 x8 r  Q! C
& j. Z: _) }2 u1 o- g- @from faster_whisper import WhisperModel  u3 `# Y; X7 a
2 X; I* U# D  ]* O
model_size = "small"% F! P, W5 k; M! D1 w" b

; I( i% m+ v$ p; e7 T% _) ^model = WhisperModel(model_size, device="cuda", compute_type="int8")
) F7 R! W. N, Z! y& U
0 f4 K' f. r. y" c% r. f, rsegments, info = model.transcribe(
, t3 \. x* z/ f  F1 J    sourceFileName, + }; ~  A! R8 P+ B2 M
    beam_size=5,
, F  j' w* J: q    language="en", 1 Z' D$ M: h/ e# k8 M) U2 [
    task="transcribe", 5 D" \0 U% }/ U7 D; n* m
    word_timestamps=True, : c" Y" W' c6 \8 L' c3 D. O
    initial_prompt = "Hello, welcome to my lecture.")
1 |* ~4 f3 N) S5 J9 a' ]' u" c+ M( s8 B
for segment in segments:' J6 K9 y. r; n# q' F
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)): P& R* u) i7 t8 _/ G& ^3 ~1 e( P( n

1 v/ E" z9 j; O& O9 k" J/ v        for word in segment.words:+ |6 F& |0 F6 k# m9 D1 c- i
               
7 O7 ~' ]; V! I7 ?----------------------------------------" N* X: V4 H$ W. U0 i

6 x2 o2 k& ~+ J0 w代码说明:
) R; q5 e$ \7 v: Q+ q- f9 n: f# M1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
% E- E4 S/ I  ]6 y但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" _2 v0 }& k& y2 q2 V4 H8 h& [2,segment 本身是很粗糙的,做字幕勉强能用。
8 [& {5 n2 o& `+ Y; Z3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 f% T/ Z! H2 r8 x8 i; o7 m
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: w& F! V% T) M! O4 ], H' \3 o比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。$ y5 w# M: V* C
5,model.transcribe 中参数说明:4 h, G1 a6 b- ]! r  V0 b
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
- u/ {6 V. k# {& z, n2 ^* g其中
6 `& R1 F8 o6 C$ Y    word_timestamps=True,
' Q4 R+ `; @3 H2 q1 E保证了你能拿到 word,否则是拿不到的: f9 B* x1 A) d/ f- Y/ ~3 ~
    initial_prompt = "Hello, welcome to my lecture.")
! e( y) P5 @% C- F* o- y) u: b保证能尽可能准确的断句 punctuation,但是不是决定性的。& o6 d: w& q. Q6 R3 E
其他参数可参考源文件:4 Y. T; b3 K9 B5 i7 F
https://github.com/guillaumekln/ ... isper/transcribe.py
, J6 J% X; p; y" Y152 def transcribe(: ], _6 T0 c" n% i9 e
从源文件你可以看到是支持中文的句号断句的。
8 M& _! J" q( F; u2 N
6 D+ |1 @3 _, o9 F* g. ^  r6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 c/ Y# |+ |% v1 }8 L1 i  j7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。8 G3 L5 ~( f2 h; c6 N1 w  A3 f  h
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 W- L$ {( b0 ]  j
: y0 |: f/ K9 P) I
# `0 k! i! H' I4 u4 [% n2 d( m3 ]6 [) X1 w1 S' h

作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://aswetalk.net/bbs/) Powered by Discuz! X3.2