爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 2 f" m) g0 L  g

1 l; `1 x5 Q, |* }( ]& N  I( x借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# P9 ~) ~  A2 L9 j# Q效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. ]5 Z; U; |4 p$ V+ M
----------------------------------------, E: f3 m9 {; K. M' M/ Y
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。3 r1 p8 J: I0 R" m. J% c
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。4 M1 L( O5 I5 O. j+ f
----------------------------------------' G1 I+ t% O" y# O& N) V( {
https://github.com/guillaumekln/faster-whisper
3 W" F3 s+ q+ ]4 n) K安装如下:
$ L3 d4 b8 D: m- t) e1, Windows 100 X1 E3 U4 X$ C4 R, V& A/ c
2, Python 3.10.11
5 U: x/ ?& g% X- }6 q8 X$ h. Y3, CUDA 12.1
2 ]% V, v. D1 \) V4, 在python 3 中安装
9 u/ v8 O- c9 i$ z2 y3 Rpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117, Q; ~1 F' h8 f; ?/ B: @: K
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。. M2 w- ]% Y$ {# u3 P( m/ |" h
5,pip install -U openai-whisper& \9 k! ]  \! G, _4 G- x
这是向whisper 致敬,可以不装+ e' E0 t6 @: x, z: H
6,pip install faster-whisper& d1 o4 [. R; S1 P
----------------------------------------
  W* D; G( f8 \3 f- Awhisper 我用的命令行,faster-whisper 我用的是python。
# B/ O; m/ t2 A( o$ [下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
" b' h+ |: [; Y9 E( @: a' ^3 u2 O
  t. j6 r+ V4 `----------------------------------------, i( O( b$ W+ P- ~7 F9 o

% c4 [  r. y& Afrom faster_whisper import WhisperModel9 ]) O+ V/ T3 R
$ H" Z3 L8 V, E+ r3 x& O3 \
model_size = "small"5 J  q: j0 B! _

. C/ C' t3 G  G. z9 S' Y$ X1 n9 jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
, Z0 P/ ^7 B% E- C
) M9 z- ^: ~7 l1 U# D: [- {segments, info = model.transcribe(9 z7 O: a- Y8 G, p6 \8 X" z
    sourceFileName,
* [4 y! S% |$ l/ @  s2 K7 s4 Y    beam_size=5, % F8 ]$ A; d) t9 V$ A. H4 k
    language="en", + ?5 ]2 P2 p4 W, A8 R: G  ?  l
    task="transcribe", % l6 x+ n: ?% `8 ~7 A
    word_timestamps=True, ' s# L7 X+ M2 x; g1 M" l3 J
    initial_prompt = "Hello, welcome to my lecture.")2 E7 g! k+ [, Q

4 s' l- ]  F0 {+ C( {) qfor segment in segments:
( a$ c& j1 V( X: _7 U* f    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)): l  ^8 v$ P; d+ j4 o
& y5 J# L; W2 W0 Q( @5 l
        for word in segment.words:; o" L1 a% k' F
               
+ X  X0 @6 W- @; ?' L----------------------------------------" Z. X. K0 i" t8 \* n& C9 s

( e/ C' |! U( \' N' s4 k代码说明:3 ^+ A; \6 n- o& L2 [: ~/ L2 o6 c8 W$ K
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 Z7 }6 Q7 s4 A5 B% L3 s+ E但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。1 W0 r& B1 t. s& X/ L8 d/ N; ], o
2,segment 本身是很粗糙的,做字幕勉强能用。$ A5 t2 F8 z0 Y2 n
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; `, k$ I; [4 E# S4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
" w9 ~4 G6 Z' R比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
9 ?' Y$ r0 Y+ O$ S: X5,model.transcribe 中参数说明:
7 C# W' Q& l6 s% s* e) X你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数* U/ ~; c6 |/ ~5 u  a- @( e
其中
9 m& R6 Q5 E  I7 ~8 T    word_timestamps=True, 2 k, u  M% ]6 _
保证了你能拿到 word,否则是拿不到的
$ G" r: @; X4 x* l8 W/ _5 {8 N: N    initial_prompt = "Hello, welcome to my lecture.")
# Z. s# t) O# |' I4 m保证能尽可能准确的断句 punctuation,但是不是决定性的。
& U# {, \  p6 k其他参数可参考源文件:
% I( V+ B) E* f; A2 p3 ghttps://github.com/guillaumekln/ ... isper/transcribe.py
& v9 L% x$ V% ?152 def transcribe(. o8 ]9 j2 v& X( `  n" x7 c
从源文件你可以看到是支持中文的句号断句的。
8 ?3 a! P3 X9 v0 N/ M6 `2 c4 I9 m9 v: v- r) L( _9 f' U
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
2 e5 \! Y8 c, r2 K2 ?7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 \' {4 Y$ z/ k0 r$ D3 {3 ?* Z# E$ H8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( |+ w, B) g1 \
2 y4 B# D& D. K; e" e8 k9 { ! T5 @! P1 J4 M# S8 V( g3 {6 C

9 }% p1 V: Z! z' w8 M( \* b
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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