爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ j/ o0 @, U) h9 {6 P4 {3 ?
1 K* f( P( O" s借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
0 d" Q/ @, f& j7 _  m9 m7 N3 \效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。" T7 U0 ]( v+ C1 }% N) q) P
----------------------------------------. ]. d( N% Y, L4 h' B
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 Z9 E: h- b* s# K& p5 S在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。) y. |) T5 r+ R8 y* D% U" p
----------------------------------------
3 A, N4 L; B# N9 R$ q" thttps://github.com/guillaumekln/faster-whisper2 [5 y  ]5 }, I  y
安装如下:
9 A( V9 l2 E2 X0 N  T# Z' J1, Windows 10
9 O4 n6 D7 |; m  P2, Python 3.10.11
% h+ r! x8 G" U" B4 a9 Z3, CUDA 12.1
/ E9 P% g3 ?' ]* n# C* d4, 在python 3 中安装
0 z0 _' x" d. G8 T$ J1 Upip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117  i) V  s% a- ^" L6 i! ]
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& E4 {1 E( K' T  h1 `/ d( B" l) L5 i
5,pip install -U openai-whisper
: U0 ?6 O0 a5 A* A3 f9 F这是向whisper 致敬,可以不装4 X! V( A3 }3 T0 b  I9 P
6,pip install faster-whisper! N/ Z" c2 _. j& s8 v
----------------------------------------
; ]" g; ^  i: [2 m9 ^" }whisper 我用的命令行,faster-whisper 我用的是python。
, l4 q9 K( u+ y# o下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
. Q2 N; O' G, z: D  |1 {& r) _# J, t* L5 {' i7 Y6 ]
----------------------------------------( e0 m: R2 W3 o* H! M5 \' {$ ?
# m, C. q( Y% |" J& u
from faster_whisper import WhisperModel
% J% k5 U1 D7 N6 G1 _; }- ~& U6 S0 p* F; D
model_size = "small"
! ?+ Q2 d% s1 ~
; \3 q% e. v. e' l  E2 S+ zmodel = WhisperModel(model_size, device="cuda", compute_type="int8")1 H5 e& ]* \6 U# w  H$ C

9 b0 N& Q" }1 asegments, info = model.transcribe(
  M8 _! }- Y$ F7 f, J1 T, `9 E6 U. N    sourceFileName, 1 ?' t6 ~7 K0 q0 @
    beam_size=5, : C4 C4 G% k; \8 X
    language="en", 9 B& R) \3 l$ C: A$ t! a' O& A' q
    task="transcribe", / Y. x1 Z. ?2 Y7 C6 K" ?1 v- s
    word_timestamps=True,
6 K" L8 U* g5 q6 m0 k    initial_prompt = "Hello, welcome to my lecture.")3 a) X3 R  X# y
: ^* V6 H, i$ B' i9 p) u
for segment in segments:
. F/ T1 j+ M$ V. [+ I5 e( _2 T    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
, {: i- k' J4 H. w" s7 z4 _7 E0 u
4 e8 Q* p3 r, S9 R' X- L        for word in segment.words:
: o3 G: Z' ]) W! U; l" N               
2 n1 r9 }, m: g1 M- j! x----------------------------------------3 L3 @$ P. v4 g9 O5 f  T0 V

- M% y1 @7 L% ]% j9 u9 i代码说明:! X% {* h- f: q9 r+ I
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。6 q9 k* |; e4 R% e& A' U3 d
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。; R5 e$ b& J! r
2,segment 本身是很粗糙的,做字幕勉强能用。
; k8 x1 p7 P4 P4 R" B3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 y5 Q# r: N6 l2 B4 h" @# ~3 v4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中. R% r% d! f3 r- [7 n2 O6 m
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
. Y3 q5 {6 w% s5,model.transcribe 中参数说明:5 }7 s- L5 m: n$ A
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" T; i  A5 `' }- E
其中! U, w% e) j( l( l: f3 ?
    word_timestamps=True,
4 ]/ z# K  F: D9 g# h" j" V& ^保证了你能拿到 word,否则是拿不到的/ y- U( y2 B& g0 K0 f
    initial_prompt = "Hello, welcome to my lecture."). I# N7 n+ `7 p- O( A( S. ]
保证能尽可能准确的断句 punctuation,但是不是决定性的。
# h7 ?/ J! W2 a$ K0 D. c2 y其他参数可参考源文件:' O; b( Q- O1 f
https://github.com/guillaumekln/ ... isper/transcribe.py( I- h% ~0 q! _/ x4 Z$ U7 l
152 def transcribe(
$ r4 N7 W: v5 S/ ~8 N从源文件你可以看到是支持中文的句号断句的。
4 [" e3 e, k. z6 D- }) q. }
! n9 [% r0 r7 B& M. }; n0 j6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。! }8 G1 ~- s  ?, ^# J
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( o$ [4 `7 Y& M& A1 s
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& K5 V; ?  a9 Q4 x& ~" l* l( E& y, w9 Y5 h& Y1 A
% t3 z' _( G: I6 L+ l

" Z9 m9 R2 H3 E/ k
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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