爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& U+ b7 f# o" h* O  G. Z1 `+ x1 F, P6 b; {9 G7 H+ z0 J) F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。9 R! O9 E5 T7 C! ^
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 ]- T, c4 S% R" T$ b----------------------------------------  b+ y! `" U* @( [7 t0 E
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。6 z9 g5 f7 Q! B3 Q; V
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& M- v2 {* U3 B' w----------------------------------------/ H% _8 A3 J+ a& ^2 `6 S( z
https://github.com/guillaumekln/faster-whisper" I! Q) e' k+ |. f, j9 s4 R1 h7 g  z
安装如下:
. g) o5 X0 \  Q4 n' Q8 f2 y! }1, Windows 10$ Q# Y8 N0 L1 L/ I8 I2 Y" }$ l- S+ y8 ]
2, Python 3.10.11
- L9 L6 @4 R. `! e7 P3, CUDA 12.1
, E" a$ X0 w$ A% B7 ?) w3 Q4, 在python 3 中安装/ A- T9 S) q7 b0 N
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1170 |7 ~% q" S3 T. a) z( l
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( N- n# b/ X# n4 b7 c& W5,pip install -U openai-whisper" g# O7 @& e( C+ i: s  [
这是向whisper 致敬,可以不装
& b2 s+ }9 A; J6,pip install faster-whisper
% }. g. ?) }. N----------------------------------------
* U3 m) S3 }4 @5 [9 iwhisper 我用的命令行,faster-whisper 我用的是python。/ P; \. h0 p6 V. X0 x8 Q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 t' i5 O+ B+ e) @
, K% t7 p/ l1 @& c) a
----------------------------------------
2 i) C- \( H; G  J: ^0 d
0 s- g0 O# T  W# ~from faster_whisper import WhisperModel: v( ?4 C; t* ?# u$ `! L  B: H

4 M/ f4 D; Z9 t  i) }+ vmodel_size = "small"6 m+ \' i. ~! d3 V3 u% ~6 }  a0 L

) v7 x& R6 Q" Umodel = WhisperModel(model_size, device="cuda", compute_type="int8")
; ]. e% I. C1 f6 }& w- I" S
) `6 g; W. g: U: F6 q. ^- Csegments, info = model.transcribe(
# P/ w& I& B1 d: y    sourceFileName,
2 X% Z. @9 [" |/ q) M    beam_size=5,
7 U. ~5 n" g+ X8 L4 {    language="en", 3 Q, F! N/ o( T
    task="transcribe",
; Z" `, Y1 {2 B3 h, s) ]    word_timestamps=True,   U8 T3 l5 }& ]  e/ N
    initial_prompt = "Hello, welcome to my lecture.")2 c$ m. A/ [7 D& F! C0 l0 K" K

6 L# L7 e4 f9 E2 l; Qfor segment in segments:6 D' F# L8 \+ z  B$ J0 n
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: J  ~. D% m9 T$ w9 Z3 r) M) R8 T/ J8 Z8 P6 F
        for word in segment.words:
% H1 K. a- g0 |3 l                1 B4 T! Z& L( R" L! k/ @5 r& D
----------------------------------------8 l* Q. s5 N9 z) \  P

. X; ?( F. {3 b( h( ]4 ]代码说明:
% k6 W3 L8 j- W3 s. A1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。- o. G5 u# T9 u
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
2 K  j3 X3 J0 R6 t% ?' s! I. k' g6 L) f2,segment 本身是很粗糙的,做字幕勉强能用。
8 F* X; n  k+ ~- {- X1 L6 B; {+ V3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' l2 Y' ]6 ]3 F" C) \4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
0 m; T, o; W+ i2 V! `; p- L比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。* W  y: L4 G( ^) o0 u7 }
5,model.transcribe 中参数说明:
4 L2 m$ v3 {  q& U5 b你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
) E) A* `  r9 F2 \- ]  l0 D& R其中
% {+ Y' J* {) X, D' X" J    word_timestamps=True, 1 }& F5 u9 g# z, `; i
保证了你能拿到 word,否则是拿不到的
" u' P# ^. S( b9 G  |3 u    initial_prompt = "Hello, welcome to my lecture.")
" g2 R0 T. \" h2 R! i保证能尽可能准确的断句 punctuation,但是不是决定性的。& P+ S; Y: O' g$ _# B! ?
其他参数可参考源文件:
! D; R  X8 X7 Xhttps://github.com/guillaumekln/ ... isper/transcribe.py% g# {" c1 R4 B: {
152 def transcribe(
6 c+ Z  A6 b, c( i* N* k7 D从源文件你可以看到是支持中文的句号断句的。
7 ~4 V% |) A1 k' N1 W+ d+ @7 G; `& i+ Q2 s) q6 Q
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。8 [! y9 K, n4 b+ e- w. I
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
: M5 ?. l) B* g, h8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 q5 E1 \0 _2 N/ ]- p

7 z# i2 d; b8 u ( @# T: B- @9 Q/ r' x) k; U  z

4 K! T) L1 y! w
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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