爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ( H, d) m2 o& S4 F% K; Z+ B2 n
0 h4 X1 b, V. k4 |$ ?
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。/ @) Z# ]  o/ P5 A0 j, F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。, |+ R2 P$ z: o6 J2 k- \; g) S
----------------------------------------% O  c( f& x. ^& \, M- A
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
' D6 p! ?( W- G' z3 `在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
+ b1 H* D3 r1 K) {) H( V8 Y----------------------------------------
. [* e! [$ ]4 E7 g/ L: n! shttps://github.com/guillaumekln/faster-whisper. L- T2 [4 u6 p
安装如下:
1 G6 S* I3 f/ `3 {/ X1, Windows 10
0 W6 |# Z% x; Q7 N2, Python 3.10.11, j; D& o) Y5 D& n, {1 w) \
3, CUDA 12.1' C* E; S9 H6 @# C! ?: K# g% U
4, 在python 3 中安装6 i1 b% Y: j. C6 O' a+ E
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117$ A& [4 ~' V! J# t$ [) o4 r, l
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( b' E1 z5 X7 H5,pip install -U openai-whisper
& @5 N: x$ Y0 c" b( v& s这是向whisper 致敬,可以不装; _) y2 [' H0 A! B8 u. V2 O
6,pip install faster-whisper6 D# D# B7 r8 K) i- G! k
----------------------------------------7 Y( I' [7 T- f# S8 V3 \
whisper 我用的命令行,faster-whisper 我用的是python。
0 n' [! g% J  f, t下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ B  v- Q2 z& `

' k/ {& ~' h- o1 Z$ L1 l8 c----------------------------------------
% f0 Q% n  c) U
" ?. W$ a6 A/ ^6 nfrom faster_whisper import WhisperModel
: g& Q; U  i/ d/ }9 o* l$ p4 T! c  p$ f6 n
model_size = "small"
) a  l) {) T' b
4 P, Z' K* E4 d" ^. m, _( @model = WhisperModel(model_size, device="cuda", compute_type="int8")( w' T0 ^( r5 o6 p; d
; g$ |0 T9 m3 I
segments, info = model.transcribe(! ~" `' V* x" k5 _# y( R. c; P
    sourceFileName, ' `  o' u/ w' u& x. s
    beam_size=5,
/ E" @3 A: g$ I$ E' [) h  |% }* K    language="en",
. L; x/ W  t* a6 B4 L% j6 q    task="transcribe",
: ?! G" z7 G+ d4 o2 L3 B    word_timestamps=True,
- D" D6 |+ |2 @* w, q3 A  _    initial_prompt = "Hello, welcome to my lecture.")
8 K# P/ G: y  ]) I0 A2 ~
* C4 |0 C( N( hfor segment in segments:
' a, r4 T! y6 \6 R    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))9 A- g' Q' |3 h$ b: I" B

/ F8 X" u; ]! r  p        for word in segment.words:
, v+ M+ \3 h) \9 V                ) U9 J% Z* P) n2 _, ~9 R0 E
----------------------------------------
0 W  @! o( r! h' e- k& O6 T& X: [8 v& i' H; N
代码说明:- o. e% V! E# A4 `4 I7 w/ E: u
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。3 j" ?: T1 q* ~: `7 R0 k* s# |
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 D% v! A  ?, v8 h6 P2,segment 本身是很粗糙的,做字幕勉强能用。- k2 }5 k' c  ~; x$ M% O* Q4 o
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。: ^/ i& H) }/ \$ w
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
( S$ M: c8 I2 D  ?8 Q/ s5 u5 m: q* G比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% o& _1 Z1 b9 Q( Z5,model.transcribe 中参数说明:
% h) O9 T6 |; o9 V. T; ~! S' Y, @你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数9 M5 X+ y% |& p( y% w. A0 I
其中
8 M& p; \; K  f( J    word_timestamps=True,
7 n% l/ ]" A, x3 n% [5 p保证了你能拿到 word,否则是拿不到的. a/ X3 P; `/ q% W
    initial_prompt = "Hello, welcome to my lecture."), t7 D  K4 D0 u' @; A
保证能尽可能准确的断句 punctuation,但是不是决定性的。  L' Q/ u& x8 r  a- q4 n5 V, r
其他参数可参考源文件:% l: a' D3 m, v- H+ p/ w6 @& }
https://github.com/guillaumekln/ ... isper/transcribe.py4 P, w& U5 Y8 \1 Y: b9 f0 [% B2 J
152 def transcribe(' {) Q- p& T8 l& L
从源文件你可以看到是支持中文的句号断句的。
/ b! s# t8 v. h- l* @* D% g1 @
, G" [# [( r# Q4 D9 L6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。' [3 [$ b! z) i7 U6 R0 @
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。: G5 C$ z1 g7 o* q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
0 ]& @% w* k" X. S+ }! X+ |* N$ O4 T/ ?5 T( r* g
' E4 b$ ^# d, A) x* j

) c' d( Y% E: u# z5 V! S; E/ Y
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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