爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
1 D4 \1 w1 s6 `4 h
' R2 ?! l& |, |9 I: ~0 g. h  N借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。. J# o- f* V& h0 j3 B1 ]) C" j
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ s0 a6 |0 A2 X# \% [; d----------------------------------------: M1 b% c# b# u7 x  t* Q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。2 y" o# ~3 `% n9 L& o5 f8 w
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
4 ?4 x  g3 T7 e1 j, G----------------------------------------
8 O+ ~6 H- @2 l" Rhttps://github.com/guillaumekln/faster-whisper
4 @( F1 l3 [) Z" S! |  X安装如下:
  {/ h/ K# ?" L4 C9 ]1, Windows 10
: {5 n1 |/ X5 w6 d1 c- L2, Python 3.10.117 X0 l2 B6 N0 v: B7 U% F
3, CUDA 12.1  `) h1 r& ]% q
4, 在python 3 中安装
/ {" G8 v& d/ |& ~$ Spip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
3 ?; P5 |: z+ N9 c$ X1 T- D这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
* m9 K: @$ v, M1 O8 C. c5 W5,pip install -U openai-whisper
2 w; [) A3 g" t' r这是向whisper 致敬,可以不装
; |& y: n: C1 n% t7 r9 y. p  A" U1 i6,pip install faster-whisper
$ }$ ]- _, S8 [7 f( k, P----------------------------------------. E) M2 h- M' `  D" `2 F
whisper 我用的命令行,faster-whisper 我用的是python。
; F  V& Q+ ]5 i- L3 b3 z/ C4 b& Y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 K) }9 F3 q0 \( _4 K
: ]4 j  `  m) G$ [; N----------------------------------------
/ v" C$ n$ f4 \; w& x
7 j3 S7 `3 t8 P8 Q8 N& L- Bfrom faster_whisper import WhisperModel) m! A0 E5 l8 S1 \7 V' j4 j0 H5 o
' y1 P/ Y: n0 E/ u
model_size = "small"& N; X4 S* t* H# \' M) ^* {

  q0 @/ K: p" G' B& x6 {model = WhisperModel(model_size, device="cuda", compute_type="int8"). y% F3 f. t2 ?* ]! G. I+ N, O
! K" b2 @% T/ j- D
segments, info = model.transcribe(+ o4 k- g6 f# m
    sourceFileName, ( z: a  r7 s+ `  H5 E1 S/ x
    beam_size=5, 1 ~! P# y( R; L' U: n
    language="en",
) Z7 `" i( w7 r. y, o1 ]  C3 ?7 F" t    task="transcribe",
0 a/ w% y8 `& `& V8 {" `- Q( O    word_timestamps=True, : g. B3 l1 H& B& s) s( k" H4 ^+ `
    initial_prompt = "Hello, welcome to my lecture.")
/ A) f$ I2 `6 l* e& c
3 U' O. m5 p1 ~9 S* \8 Jfor segment in segments:
: g! R# F# V7 @/ S    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
7 E# e% H6 w  B" j& R4 Q- d  }# w& M3 K) W( o) Y
        for word in segment.words:
! X4 f8 ~* ~! a! Q               
3 s, F( t: j  U. z; `3 D----------------------------------------& T. n6 M& y6 R7 P

% F! k# ~8 P. B# j' c/ K代码说明:
' b, q* S3 d' M4 z) Y1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ I6 a1 D+ ^$ ~
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。5 e. Y& R$ W/ i/ [; G5 U
2,segment 本身是很粗糙的,做字幕勉强能用。
3 C  b/ U/ U* l, P2 p. W3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
* l4 p# C* n& @5 f9 X( D4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
  V$ D& F5 e+ E! R5 x0 v3 D  q比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 z9 X4 Y( S( k* K. a
5,model.transcribe 中参数说明:% ]2 l0 S$ U! V  D" I  ]
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
3 w. V8 B  Z2 Y3 k: _" G; w其中" |  k5 g% g7 f  S5 |
    word_timestamps=True,
* L& Y; O6 g" }6 O. \$ ~6 e' G保证了你能拿到 word,否则是拿不到的
2 Y9 ]: M$ a7 k6 D0 ^% o6 Y    initial_prompt = "Hello, welcome to my lecture.")0 T% G% P( k. v2 f( C+ D$ j
保证能尽可能准确的断句 punctuation,但是不是决定性的。# _3 k/ @: l; z% H* s, N4 Y: i+ A
其他参数可参考源文件:
9 P; B" v! r+ F6 Nhttps://github.com/guillaumekln/ ... isper/transcribe.py
# n" x7 S. H/ X+ g! f: e152 def transcribe(, J! T7 z1 C8 r' n
从源文件你可以看到是支持中文的句号断句的。
! s2 Y* b$ L- S6 S/ t4 j0 U6 v+ l: u$ V: }
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。( Q7 u4 H, K+ ?1 @) j
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 v: Q  [) W& [9 H8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
' f; J/ H1 e( x0 b7 L$ Q1 N) }. B% [
* |3 H1 Q+ x4 j: Z! \5 v0 V' c
& P2 m  l/ h* d. c; y* J

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




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