爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
: d: i) V; R/ M$ b  T$ B# P/ {  P: d  R* g8 z  @1 l
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ L9 d3 Z( e, f5 i* H0 {效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ V1 H; B3 ?* I# r4 y----------------------------------------
  [; b" k2 h+ l3 z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。$ p0 v, i4 t) e+ S% i) D, D! ?) a
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。1 d2 M, ~" c: f7 A2 S( C; ^/ ]
----------------------------------------
, V. j- Z) [& w3 Lhttps://github.com/guillaumekln/faster-whisper
9 q7 Q' e" |9 ^- b: `- Z# l7 B! |! }安装如下:
2 ~7 S  x  d9 J7 B/ l' L, Q- k2 s5 W; c1, Windows 10
$ ]4 [" u) g8 y) G2, Python 3.10.11
1 X2 U/ u# Q+ E3 V# y, _3, CUDA 12.1! o9 |+ n' A: N* ?: D2 c1 U3 c
4, 在python 3 中安装
- C, q: P/ N" k* K5 C2 N& G+ opip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" g5 i4 ]; ^: S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
& D8 F2 Y5 ^% |8 }- s; g5,pip install -U openai-whisper$ K/ e4 b# c6 i+ T: A( ^8 U2 k; [
这是向whisper 致敬,可以不装( I  h; [: [' P7 N, O, ], y& ]
6,pip install faster-whisper
* o  x, d$ ~, p. x9 u# c----------------------------------------
2 F+ d9 W8 U2 X; Z8 v6 p1 `whisper 我用的命令行,faster-whisper 我用的是python。$ K1 m- R+ x+ [1 u/ H/ z, o$ e
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 h8 ?# k$ C: u  f5 l; P! `  S+ H0 t& @( b  _4 _2 V1 M! J
----------------------------------------
. p4 E. ]) A1 K6 A( ]
3 Y( A0 G3 A; L: rfrom faster_whisper import WhisperModel6 R; @* L1 f! L" a8 S$ m- g7 b

1 p3 O" D3 y7 |* F& ?' ]% zmodel_size = "small"* V( |' ?$ k- b- o

4 \! v  L3 b$ g$ j& J. s: bmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
/ B4 R$ a: U6 A# F& [* @$ _1 x  T2 k7 ^$ U
segments, info = model.transcribe(
+ a1 p0 b3 w. U: e    sourceFileName,
* l: u, I1 i) n" E- P5 {    beam_size=5, ( Q6 b1 O9 `( J/ `; j9 }
    language="en", 2 B6 O$ X5 h7 y8 O. j% K% ^
    task="transcribe", ; I$ ^& @, H8 u
    word_timestamps=True,
2 u, b; n+ b) {6 ~$ [; Z4 T7 v    initial_prompt = "Hello, welcome to my lecture.")
: g' T+ p" @/ K- C+ j
! P; i/ z* A- ffor segment in segments:
0 E& Q5 B( o& \" G7 G6 H  _    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))* y/ a! T9 H. j/ L" P# a; j8 t

2 Z9 g. D7 D# R        for word in segment.words:4 P$ c6 r! G" m! x* S& u
                * _1 A- R0 W8 P
----------------------------------------
# k$ j6 @4 u/ a$ H$ z
# m+ C7 y( f8 z代码说明:
  V- t  P. G+ }1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
8 V3 @- t% A+ O( `4 N但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。& d0 I( \  l4 _
2,segment 本身是很粗糙的,做字幕勉强能用。
) b. o( F; G5 z- y9 B3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& {5 `, ~) W  f  V' M# v4 S+ s; C
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
0 t. b/ w3 n0 q- w8 O比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
/ V/ u/ p2 U( H/ _5,model.transcribe 中参数说明:; _; k* I1 ~. ]1 B- e) q' J$ c
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
+ F: x+ T% k: c8 `0 Q7 n其中
) {$ z2 s% h8 b9 }  ^( P8 G3 l    word_timestamps=True, ' b9 E; l/ ~& n1 @1 E
保证了你能拿到 word,否则是拿不到的
2 r0 O+ S2 w& Y6 p2 W    initial_prompt = "Hello, welcome to my lecture.")
* G) |% o& L2 @保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 ?' ]) b  g, A* w  O其他参数可参考源文件:
, Z3 C2 W9 I& @* E4 s9 ], D0 jhttps://github.com/guillaumekln/ ... isper/transcribe.py/ z9 e& S2 U, M) P  _7 L
152 def transcribe(! N5 P6 X% ?# ?! v) R
从源文件你可以看到是支持中文的句号断句的。$ X3 U/ }4 R# s# {

+ |  u$ _% |2 z+ v( H* n6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。- i  N" K7 r2 m" V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 z/ O. Q& x+ D. t8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。9 K0 w4 M1 L' }2 q' W# v% E: L

" D* C! E  B2 a
5 A% j* \" f' s' D+ [* i& E% Y- s
& u. C  r5 I1 F7 e
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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