爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! f/ D# A# h' i; G
- r( l; o/ v: t& N1 X. ?1 Q借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& Z8 L9 S/ d) S. l' T' C6 P效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, a2 I. c9 l! L6 ?/ x: c----------------------------------------7 |; j: c, S! ]6 G. r4 a. S
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。9 f" Q; M) t7 O, I+ b! v
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& T/ A* G+ ~* n9 u2 y0 z  Y----------------------------------------* p: z4 a1 q" l) l( h2 J; ~" S# Z% n
https://github.com/guillaumekln/faster-whisper
* z, l5 Z  L8 o- ]& V, R6 d安装如下:4 Y" i) O8 S) v+ f8 S
1, Windows 100 ?6 u3 ]/ o/ t: ]. F* f/ u
2, Python 3.10.11
: ?0 r6 o* \/ Z# Z& M1 Q3, CUDA 12.1
* \. b$ N" X' a) X7 s) \7 v1 B4, 在python 3 中安装# A- y- ~/ t6 T; K) g3 u1 a
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
. e4 b: i8 H9 h; [: K- @* A这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。% r" ?7 D' t4 d
5,pip install -U openai-whisper9 m7 o" p, q# }, r$ u- d' H
这是向whisper 致敬,可以不装, _" U, H8 Z% ~
6,pip install faster-whisper
& m  t3 d" n- F/ O----------------------------------------
: X* ]8 C, M# X9 Qwhisper 我用的命令行,faster-whisper 我用的是python。" c, z, p: \5 s( b  C- a8 D( C' \  H
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:5 I- [9 l& \- {% k" D3 Q

9 P2 D! E2 o) v( L4 n2 w----------------------------------------
: a* R3 G, s: ]! s! Q& b9 x  O! f/ b. t9 @# Z# a
from faster_whisper import WhisperModel
; m, T! W3 _2 B$ T. s
+ n; B- p+ B: |! h: O" Jmodel_size = "small"
9 _) d+ v& _" h" v8 Y! `+ R: N6 \( Z4 y# ]# O- O. w. I. x- {
model = WhisperModel(model_size, device="cuda", compute_type="int8")4 _; `7 g% J0 M# B
  {2 |) ~6 F( `4 |8 ?
segments, info = model.transcribe(
0 W) i  S& m; }- f. o! u& x, z    sourceFileName,
4 t, S% ?8 h# j9 r    beam_size=5,
% |% J2 k3 T3 y: D    language="en", 4 |6 [* A) g9 R! J
    task="transcribe", 3 R/ }0 S8 p9 i' B3 R+ q
    word_timestamps=True, 8 D, _2 ?  G+ I. R2 P; O
    initial_prompt = "Hello, welcome to my lecture.")8 U# j) R9 e+ m( j0 {0 p
7 U3 Y; t, T& L( c1 ]
for segment in segments:7 D: B) J+ a7 T0 U8 H
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))5 g/ y+ e9 r+ y( j: n( M# q

; Z( U5 i& E* m        for word in segment.words:/ J7 V' v6 b8 M) c6 t- d+ l
               
5 x5 Z) }4 R" s9 A2 S. J2 ?' l----------------------------------------
: Y' G3 f( ]0 j! I& h# }0 K' `5 I  {# i9 c& h
代码说明:, `( t4 [, O& p% V
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。9 C5 `3 }( k3 Q+ @2 d
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
5 X$ s. @+ A" F4 l. H/ _$ x2,segment 本身是很粗糙的,做字幕勉强能用。
. J$ j8 L% q/ _3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。; W- G/ S$ M8 w2 N6 }
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 h! Z) _9 e" L9 H) y8 {( M$ @8 ]比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。8 z" M2 k: T: L3 c3 M3 ~: e
5,model.transcribe 中参数说明:6 M3 E2 _; E; o6 E* L  Y
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数; _- ^$ j/ W" _: [/ w' M
其中
& d- B; H- y6 O6 Q# [0 {* t/ Q+ }    word_timestamps=True,
6 Q/ \6 F% G- K- G2 f% z保证了你能拿到 word,否则是拿不到的
0 b. }; V% T2 s& ?8 J/ k    initial_prompt = "Hello, welcome to my lecture.")
7 V! E' L# p9 h2 z" d4 z, |/ V; @保证能尽可能准确的断句 punctuation,但是不是决定性的。
) Q/ X- x/ h" l5 C# h, N( N其他参数可参考源文件:
5 t1 ^# K% ]0 `: Q7 c! ~4 khttps://github.com/guillaumekln/ ... isper/transcribe.py- _% D1 Q$ ?3 H4 h# D+ @/ ?: n& j
152 def transcribe(
9 L5 Y8 k, h6 }' P. A6 ], q7 M从源文件你可以看到是支持中文的句号断句的。3 m( l$ ~5 D/ ~7 B5 G% X
9 @" E, k1 s) `9 ]: W1 x* C3 g7 k
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
5 `. L$ ]" \" D# {) _6 A6 l3 I7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。" v/ u  S* i, Y$ c
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。( _% n$ Q! c  i: t! z

. X% n: D9 w: ^6 |3 I1 [ 6 j% G$ H+ C2 x

/ P& j) `3 M3 r% l. a4 p8 r) Q
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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