爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
/ N! U" y# i" X  J; w9 |0 y
6 U* W, \7 u4 G借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
4 }5 M1 X+ E2 u. H" A9 L( r效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
. `2 a* t/ I7 z7 _  U! v* |# W----------------------------------------
0 l. [1 U8 w0 v: q1 Y显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: g( z, ^9 S5 |% b6 R) k! A在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
  Y1 t+ N0 K/ G% @----------------------------------------- R& ~6 r/ V- h# o9 U# m7 u
https://github.com/guillaumekln/faster-whisper6 B6 Q0 [; m+ y% f* x2 k3 i
安装如下:
1 K$ h# D+ T" b  |* b1, Windows 10
4 E; [4 {$ U6 t7 s! ?2, Python 3.10.11
2 h/ Q  H' y/ n( c3, CUDA 12.1
7 @. \6 q' l4 s- }' Y% B4, 在python 3 中安装
( B) C: ^: E/ i; upip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
7 s+ o+ ]6 ~3 l' T3 w! ^" S这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
' H% a3 m3 J7 w2 s3 x. W) ?' R( J& z' _7 d5,pip install -U openai-whisper3 _) M, \# v" K. ^( c7 k$ E
这是向whisper 致敬,可以不装& y1 W5 D0 O4 A; g
6,pip install faster-whisper/ _; V; i: Q7 \. C; U  K3 w; H
----------------------------------------, M  ^, R- e! A, l6 t: o
whisper 我用的命令行,faster-whisper 我用的是python。4 i' Y) ?! C/ D- t/ {
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 z) w: x4 @/ d3 Y7 h
  S9 Y" ~9 h/ t$ B" z( K----------------------------------------1 |  E8 B1 R$ l% H
! \; Y3 ]6 U: }3 R
from faster_whisper import WhisperModel! }/ T+ t( Q/ K0 F9 f3 _/ h& S0 ~
/ I9 `2 J, A% P7 W& ~
model_size = "small"' ~& }) k8 h  d! _  x( R
0 ^  H9 L: U0 o, _4 r7 w
model = WhisperModel(model_size, device="cuda", compute_type="int8")
" G7 ~6 p9 g3 X6 c3 u: i. ~$ u& D
6 A, n, V& R$ {5 r+ |; esegments, info = model.transcribe(
) _. h: v* h' C0 Y7 {1 f    sourceFileName, 1 ]) P4 I1 s; B  O9 r6 e
    beam_size=5, ' ]2 d0 E3 S/ P: w# `, t
    language="en",
7 Z* s& S* X5 @% N8 v1 v6 V    task="transcribe", / C4 t  }8 T3 X: B! a
    word_timestamps=True,
, w% g; J8 M4 B0 C  v( ]# U; `    initial_prompt = "Hello, welcome to my lecture.")
5 X% @1 A% w4 P, m5 R
. f. b( V" b7 a4 e( @" Yfor segment in segments:
* q  Z* Q% z* B1 }. [9 f1 _! X8 \8 F    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
* J3 W. `2 o2 h* u& Z
& Y. F, j: i! j4 z' G  O1 ~        for word in segment.words:; h: k5 }0 N, T2 Q+ H' x; P
                5 u! D0 g0 y! i4 C3 r) l5 j( x
----------------------------------------
3 K1 E! ~( r+ h, x" [
# G7 d$ v& \1 D+ U1 f% b  W1 y' ~代码说明:% `' v8 a& p* t+ I2 B
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ _6 f; h5 q3 x6 z但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。/ U$ {$ J2 [1 _4 i! g5 L% f
2,segment 本身是很粗糙的,做字幕勉强能用。* k; L& B4 e6 P2 d, i
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。8 e! S3 t5 a* s) `; j: K+ S- O
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中" V9 d/ k& \4 h- W$ p$ u/ c
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
3 `8 A2 u7 w0 m& e5,model.transcribe 中参数说明:4 I) @2 G, T" Z# N0 z
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数# l/ |9 Z% u, Y
其中) }& n$ d: P- {4 I( ~
    word_timestamps=True, : N7 G; M/ i- c
保证了你能拿到 word,否则是拿不到的
3 m: Y8 J3 S% y1 @: s1 v$ l# r7 C" C5 M8 g    initial_prompt = "Hello, welcome to my lecture.")
$ Z5 z; f8 W( d4 p% k保证能尽可能准确的断句 punctuation,但是不是决定性的。% s: W4 B) |+ @2 o/ M
其他参数可参考源文件:) B2 \- ^5 o9 {$ ~# ]
https://github.com/guillaumekln/ ... isper/transcribe.py
5 R, y" ^7 k# ?  X3 v152 def transcribe(
9 M$ O( E% j. K) i# f. V  D从源文件你可以看到是支持中文的句号断句的。
; Z( j6 x0 J) n$ a4 s+ K2 ?
8 x1 C# _* ?1 D* d' d6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。" s. Q, x- g8 g9 |/ [
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。  O6 {) p2 u2 A5 S8 G7 R! f" t
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* G- l5 M4 p* c/ w9 B3 {
& s& o' `' N$ G) ^, Y& C& c   w" n. d: W1 O7 |
* n) f& z6 d1 T3 V4 E8 x

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




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