爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 5 v+ d1 P1 Y2 Q% r: p  {6 N

" ?" m: L! y1 Z' D借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。; ^2 q' O+ [  C$ ?5 a
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。; _  U3 D" P8 `3 }# n
----------------------------------------
9 s/ M5 T% i% M/ z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
/ E$ v: g3 u$ s" a. p9 o' a. w在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。# c1 w$ O8 h' d( B6 ?
----------------------------------------& a- d* \7 j& M& l
https://github.com/guillaumekln/faster-whisper- B. A! q# w2 S( ^' b
安装如下:
3 w- F5 n' f  a7 {7 p! z' T  [1, Windows 10
7 F0 O& `" z1 V6 `& ]2, Python 3.10.115 A: Q$ y8 p3 `6 H# F
3, CUDA 12.1
' D) K) ~' x  I9 Y" C4, 在python 3 中安装
7 R9 j' u8 x8 e* l4 npip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117' z8 e: x$ D( H1 z# s5 }
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
, L& k% o: [% B1 i3 b& x7 k# s5,pip install -U openai-whisper1 U. ^; H1 l, ]0 p2 X! s: e+ ]
这是向whisper 致敬,可以不装
& d7 m6 J5 ?' D6,pip install faster-whisper
1 i! q& V% T$ f5 g6 J" R----------------------------------------
4 F2 l9 X3 h+ ~3 s) Mwhisper 我用的命令行,faster-whisper 我用的是python。
/ w) Z. A7 P7 B( z7 k% X: X下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 f+ l% G0 I! t: @6 \3 b& U+ b' w2 B) s4 d; }4 @; y9 c+ Q
----------------------------------------1 u. w% [8 P; b! q4 h  K

8 E/ d- U- T) Y3 k3 ^3 Cfrom faster_whisper import WhisperModel- M7 l' z' _6 @" O% O

1 ]+ @; K2 i3 {& o* |; {$ ]; ?" }6 omodel_size = "small"2 c1 k5 t, u- [* y$ U2 o

, N, {+ u/ j! z2 x; o$ p/ `model = WhisperModel(model_size, device="cuda", compute_type="int8")1 ]6 r0 N3 }1 E( S+ G

& H7 y2 E! m& ?# U# U, Zsegments, info = model.transcribe(
1 ~2 t3 x7 X% g    sourceFileName, , c" [* T, Z4 x( K: n& a% a, g
    beam_size=5,
; x: j  B2 Q0 O0 M$ y& F& \; A3 ^    language="en",
: `( s5 V' E) `' w* _    task="transcribe",
/ n5 {6 [; C9 g. |) m* w  B    word_timestamps=True, " [9 \! |1 T6 j1 M. y9 O" |( \! b
    initial_prompt = "Hello, welcome to my lecture.")- h, t) v. F( R. p
* ~4 H/ n6 X8 Z9 g7 u& v7 h$ D# D
for segment in segments:
: |" Y- i0 w9 W; i; }    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))9 J2 C! D- z& p
5 E- T0 p# B- s- z$ C  ~
        for word in segment.words:1 w, e) v: T, G% A, i' A
                & U7 k& N: X! b  M: s
----------------------------------------
0 y% \) i7 d( r9 ^0 |4 C
. a6 E" K9 c- H$ ~8 s5 A4 ]代码说明:' j/ d& N2 h7 \# _, Y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。- H2 P# i& m5 c, x0 M5 E+ }6 C1 L
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
6 @$ ^! C% e% N! ^2,segment 本身是很粗糙的,做字幕勉强能用。9 @5 T' u" `3 R" i! l4 x
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。3 T- l6 A) b( q% u1 }2 h1 _" f
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
" m8 G* B  `! a' S1 e% g比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% p$ _6 I7 f% h, O; a5,model.transcribe 中参数说明:
( U( i7 P# F$ A* ]8 e你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
4 h# a9 O3 T. g$ ^1 Y2 `其中7 {% G; s+ L( J- m1 j  Q0 S
    word_timestamps=True, ! q* ^0 F2 ?+ D7 Q
保证了你能拿到 word,否则是拿不到的
  F$ e9 K" L" u1 a# k    initial_prompt = "Hello, welcome to my lecture.")/ w3 s: m# A# L) J7 A2 x4 x0 T
保证能尽可能准确的断句 punctuation,但是不是决定性的。2 B" c2 P* o5 c+ r# o$ A( o: U* w
其他参数可参考源文件:1 w* }# I: l( G: i! }* ]% A
https://github.com/guillaumekln/ ... isper/transcribe.py$ f8 G, V" }; V, n5 E
152 def transcribe(" q4 ]- l- ~% _. m
从源文件你可以看到是支持中文的句号断句的。
0 M9 ?9 M! l1 Z7 q2 Z* `2 O
' M1 X0 d: n6 S: K, b- a" J6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
' d5 f% Q& n; o7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
( J$ v8 ]  x! h# {; a) J% N* F8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( V& j. i' F9 s  T; f; r/ F% c" U) p7 I+ |- j1 ?$ N

; J# _" P* x# |) B1 Z
5 K; J* t% O5 s- p+ V6 v1 U
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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