爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 ~) u& M* P9 R) r+ @8 W0 O( [2 R+ W1 F, h/ e
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 s8 h$ d5 f2 ]6 E/ X0 ]( j效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。' [( E; q* |5 j
----------------------------------------
8 |' x- q6 P& D; }; T5 M显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
. ?4 U" c( H0 j% N: R在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
0 u& }- G6 n: K0 O+ }7 G----------------------------------------
$ V9 X$ c) Q8 w4 a# r+ ~  t5 L3 }https://github.com/guillaumekln/faster-whisper2 p$ b* x9 |8 Q5 P/ q+ P" [
安装如下:
1 f$ Z! d% i$ E- g/ r7 ^1, Windows 10% Y% T* w) E' I
2, Python 3.10.116 Y, w3 G! v3 ~. }/ h- y
3, CUDA 12.1
, z% i: U! V; {1 e6 u4 C0 B4, 在python 3 中安装
% m+ ?1 H0 X+ @pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117$ n1 k* U4 Y/ Z( |) _. L- k5 ?' L
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 g% D8 R3 e( G  ~  s5,pip install -U openai-whisper
7 w& r) c8 N* G) o/ v这是向whisper 致敬,可以不装
1 I4 Z, [" w* p8 W5 Q& M  O6,pip install faster-whisper
& o/ |( p( P( u7 S: r0 n* i, o----------------------------------------" m% b$ g( Q' i$ R4 _( z& @2 m. t
whisper 我用的命令行,faster-whisper 我用的是python。: h: f  z6 h  a# a( {7 b
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% s. s4 S+ Q3 s4 _' i7 G7 H# t
----------------------------------------- C. Y9 F: C( y6 K  Y

6 \& j  S5 p& t# N8 Z) C: bfrom faster_whisper import WhisperModel  M( g/ h9 ]; M/ }! \, ?5 _

) ^+ f9 u# ~' f' F$ rmodel_size = "small"" o) B( X% A7 K3 q- B8 O
% P. v) x$ h% S  ~: Y( F; A( V0 U
model = WhisperModel(model_size, device="cuda", compute_type="int8")
9 V/ c5 L1 z" ~: X: ?2 o  i6 z" D  O! R& N% m( V. j1 r
segments, info = model.transcribe(5 ]: B9 T2 v, M( ~2 T
    sourceFileName,
" n1 P3 ~- {/ b3 g. ^/ K    beam_size=5,
3 E' g2 b. o- F4 S: p    language="en", ! E; `% y/ \$ M. M# w! {/ J1 Z. Q
    task="transcribe",
, V: I0 ~5 s! ]( F4 M5 F) |    word_timestamps=True,
# B7 w1 d$ @# V( }: X    initial_prompt = "Hello, welcome to my lecture.")% `8 f! Z1 W( G- g, T

  `0 ?! S4 D& I+ ?8 j% D- r) kfor segment in segments:
& z9 I' a3 F7 G) H    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% U1 @! x  @# W2 q9 ?/ z+ U8 l1 e
4 W0 b# q# A1 v5 I        for word in segment.words:* s4 m" m7 s% M
               
% y; F: G! H& x, z4 d% g----------------------------------------6 D* `- ~: k, m# U. b4 Q* R

# p3 y: R3 d0 M代码说明:
, B( W4 f( h+ i2 z- V7 _, v1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。! b) O( o9 ?0 o' }  `
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。4 ]1 r0 C7 l7 \- o8 O! [! Q* ~1 ]
2,segment 本身是很粗糙的,做字幕勉强能用。, ~! d. I8 R) S4 R' V" ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( w- t. l8 }& B* D" z4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ W. R7 i3 C& y* X6 h: h3 s6 Y比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。# ~4 h6 H1 |: H7 q* n  Q2 E5 j
5,model.transcribe 中参数说明:
8 M* w$ K$ C* f" D6 t: u你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; M# C' x* `% R/ b) R7 B8 z其中; S5 g) k. I+ B% o  q
    word_timestamps=True,
9 |& h. Q& I! ?9 G保证了你能拿到 word,否则是拿不到的
. t& d. ~1 {* d7 D    initial_prompt = "Hello, welcome to my lecture."), C* w5 w6 T" s
保证能尽可能准确的断句 punctuation,但是不是决定性的。* `/ Y) y0 l% G+ e
其他参数可参考源文件:
" E- r8 L. Z! ]. Y: f% ^. Thttps://github.com/guillaumekln/ ... isper/transcribe.py; O& l3 H; z, j4 q4 `  b5 L
152 def transcribe(
8 w1 W- z5 w0 s6 P从源文件你可以看到是支持中文的句号断句的。  R" y! K4 j! r

# m: b2 Q  p$ ^/ I9 U1 }6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" w* ]& j. l$ v! I+ b2 C: B: C, P9 q7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 Y! n  ^6 f' _" }
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。: n# j/ I# d( h. `+ f

4 l) d9 H- x5 Z- g" x' A' N
* \0 W( N, c% z( a( n- c0 m; `% _

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




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