爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
- z) O1 G$ }8 c
) \' K- R% h9 M* U7 A- N, G: y借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。" S! g( q' n# Y, I& q+ \5 o
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ w( L- A9 ]7 o- F+ B5 g/ Z8 N0 f
----------------------------------------
! `4 t: D* ~  t0 y9 y% G" t显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
- l& @" ?* E! b  O5 x在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
) E6 u, y$ B' E& p" ~----------------------------------------) x' R. O) m5 O- B# A' k5 m
https://github.com/guillaumekln/faster-whisper
5 {# G/ g9 z% C  p! Y安装如下:( f5 z/ F0 o/ {( j( K% _
1, Windows 10$ e1 S7 b9 d5 `
2, Python 3.10.11
4 t9 I; L# R( u3, CUDA 12.1; v$ f' r8 [. N, V9 |
4, 在python 3 中安装
' z3 w# a4 K2 w+ Epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 W: D. d8 M+ e; Y, E$ R
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。0 ?2 k6 t9 B: W2 M
5,pip install -U openai-whisper
0 T% U6 k7 D* s7 t! g0 j+ o这是向whisper 致敬,可以不装- N5 C9 ^5 m) S2 X2 V
6,pip install faster-whisper, t4 }' V8 g9 {+ _# E' G3 z
----------------------------------------
  ]: z( `, H7 K  [4 f" |whisper 我用的命令行,faster-whisper 我用的是python。
7 r  L9 o; o% t9 q+ N. Q下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 K2 I8 v- G6 K- Z; C9 x9 r6 Q9 T2 g) N& A; q  g
----------------------------------------
7 P- N5 d! d4 r" p
' _* _) ]- r/ t  Hfrom faster_whisper import WhisperModel
, {9 x/ }& ?" w. ^7 X0 r& T# j# k" d" M6 X6 P& j( i& ?: c# l
model_size = "small"* F- B; K, n2 n9 ~$ L' m: k1 H
* s2 L" V; W$ W6 @6 N
model = WhisperModel(model_size, device="cuda", compute_type="int8")- N) f1 k! h+ {( i7 m9 q

  F7 a* J& D1 s2 [+ n2 {7 w4 M# msegments, info = model.transcribe(
# A2 {* t) n" h. z    sourceFileName,
8 W4 ?8 j9 H" {0 s7 z9 k. q    beam_size=5,
# o( b6 X% Q) n& r( @) `! v    language="en", ( P6 r9 D7 {4 B8 ~3 s) u* s" P1 l
    task="transcribe",
  A9 {/ G1 i/ h    word_timestamps=True, ! ^6 W( f0 k: T$ R9 W
    initial_prompt = "Hello, welcome to my lecture.")9 g% c. e# _) O5 y8 d9 h- @
; u/ s1 j2 {" m& C4 w; m
for segment in segments:
4 a/ v' }  o  ?6 n% H4 u8 ~  B4 Y    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
3 r1 @+ \$ E& V/ a2 Z0 K
8 \+ w; n5 g& p+ H        for word in segment.words:2 ~/ E5 |7 ]0 n3 @% R. l
               
* [  s2 L6 ^$ ~& I. p8 C----------------------------------------
0 z. F* M8 C# }' E1 R
3 p" x5 s( V8 i1 i" K代码说明:
$ \: z* L  Y4 M0 ~; n1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。3 l0 s; S0 j1 }
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
6 _5 N/ m* `" F: O! [$ r$ s" Y( l$ a2,segment 本身是很粗糙的,做字幕勉强能用。
, @, L6 @/ |( ]; b* j$ i3 Z3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! f$ \# a& o" Z4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, b6 ]) T2 L9 d8 Q5 L% ~比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。2 d3 [- g' x  g2 R# T) t' s
5,model.transcribe 中参数说明:
; x' C7 w2 [) N) K# j! P你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数+ f; j; q, z" {( g$ s
其中6 I. \6 D5 Q" x/ y
    word_timestamps=True, + @* n$ I( d8 G# [; z
保证了你能拿到 word,否则是拿不到的
* b& c  @2 f' n% s. x3 {' V+ S8 g    initial_prompt = "Hello, welcome to my lecture.")
( T) A' U2 T& ~) h; A& _保证能尽可能准确的断句 punctuation,但是不是决定性的。
' I% f& E" W  w% O- K, B其他参数可参考源文件:! Q5 ~$ e$ ]! w% r
https://github.com/guillaumekln/ ... isper/transcribe.py
; Z* F$ W0 D7 e152 def transcribe(
) E% n, E- u: X/ ?: n8 {从源文件你可以看到是支持中文的句号断句的。
$ ~' ^& `+ z1 i. f- _7 Z; q5 e: w
  P$ y& |/ P+ t6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。/ A. i+ H6 Q8 B, G
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。* G) r5 E5 Z- U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
) j8 ?' D) B4 N3 y# x/ ]" ?$ U3 H1 a  I% L1 o$ l& `  x
+ q1 h# L4 T6 m

. z) [" u" D* D6 Q
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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