爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑   q! P* t! v% P4 k' Y, C9 N) X
  b; s! ~' q* o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。) @. c3 Z2 r$ V2 T& w
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。6 t: d3 Q4 l  f: z
----------------------------------------* S/ y" X5 D" P  U5 D+ C; t* r
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: B% S$ B; q" E% l1 t在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
* e' L! s" c9 R- f, e----------------------------------------
" b1 D. s" M& B& Bhttps://github.com/guillaumekln/faster-whisper% [/ |" z  o; A
安装如下:, o8 S! b5 V) A. h6 c. S9 J5 o* H
1, Windows 10" x7 H, f8 q# t! n; G8 s* P
2, Python 3.10.11
+ D* u/ |% h$ B. ]5 {2 t; t. V. z3, CUDA 12.1
. i2 V: y1 s2 }, @' V$ e) j' Y1 G4, 在python 3 中安装  `4 t: u) ]1 E/ n. I! K( F# {) R
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
5 P$ G6 W% U  N# q2 X这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
' x" c. ?% Q7 \; V7 z5,pip install -U openai-whisper
' w$ a3 C' T/ }0 R这是向whisper 致敬,可以不装
- z, y+ m$ E0 P& ~6,pip install faster-whisper
) b/ X4 ]+ J% L$ |- c----------------------------------------
- {; I( |# ^% M  W$ _- bwhisper 我用的命令行,faster-whisper 我用的是python。
+ X1 w8 v. U3 S& L, [" x( f* R下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
& l/ g, |, L0 x- w$ q" N6 i6 G% y; i
+ F4 E8 c; \: ]% p/ Z2 p% e----------------------------------------
5 S# d3 c+ G  P) Z1 e) g5 r3 ]$ b
1 Q/ w6 j3 [+ efrom faster_whisper import WhisperModel
) g3 |0 }5 B. H, V; V, X! f& N1 f9 D/ ^7 K3 V. M2 k+ B7 @
model_size = "small"
+ U9 k; v- y, y# r) e& f, p
8 P7 D. Y" z; Z6 I5 \+ umodel = WhisperModel(model_size, device="cuda", compute_type="int8")
3 F+ n3 j0 X; \8 h
, p3 X" L5 _! m1 o8 Psegments, info = model.transcribe(
4 B* S! f: a7 c! {. f( @: O    sourceFileName,
* J# x2 }  p* @6 N- L    beam_size=5,
9 S( E7 o/ F5 s9 b) u1 u% q    language="en",
  I9 ]3 X+ }1 h( H    task="transcribe", . c6 T8 Y% Y# h- ]
    word_timestamps=True,
+ v7 t- B: _$ R( i% w, `! h    initial_prompt = "Hello, welcome to my lecture.")
) f4 R; x. \4 U/ ]1 B6 _
, U* W$ u" T, e* F$ e5 {' r8 \- ?for segment in segments:
, I1 s+ J4 D/ W# _( O' f" p- T/ ]    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))* Q6 x- M. C: I  ~) m# u8 V

& ]0 x6 W- p" m: V1 E& F        for word in segment.words:
4 E! V# I1 n. Q1 G' V                5 c/ r$ X2 T: L( U+ S4 @8 _
----------------------------------------9 g3 u/ Q& }. ~

* m2 q4 F8 x; e! F3 b. W代码说明:# R% v9 Y' e5 c3 K2 X; [) n& P: m
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。' W7 k8 t8 d- O5 c
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
& m2 E( }8 x" B. h2,segment 本身是很粗糙的,做字幕勉强能用。
0 q/ q" V" \- \8 v3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。  V2 n: f6 s# u/ g* B
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中9 S, ~/ c. i% w1 A/ I5 B' w
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( k1 N$ P4 f2 b) G3 Q5,model.transcribe 中参数说明:
+ q! W1 Y. b: W3 p! V; \你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; K- C; z# L/ A+ G; y+ X4 s8 S其中
: S4 g( m$ c( ?7 Y$ U1 d    word_timestamps=True,
( Z. d0 C" Q$ w. \- H保证了你能拿到 word,否则是拿不到的
% Z& m# ~' j1 o8 H    initial_prompt = "Hello, welcome to my lecture.")1 y& T) G* c7 r/ o: ^. I* S- S
保证能尽可能准确的断句 punctuation,但是不是决定性的。
2 [" K( e4 K% n% i  s% `其他参数可参考源文件:
/ c/ q% H# p) ^, E4 o6 {" Vhttps://github.com/guillaumekln/ ... isper/transcribe.py5 b1 D* Z' X6 \( g1 ^
152 def transcribe(; T0 h9 h' f4 p' Q/ \) o- c
从源文件你可以看到是支持中文的句号断句的。
/ c% u( L( C# z) a# z' \- m
0 C& K' Y; z% w6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
! F5 b+ J1 ^5 i8 [4 g0 R) r+ K7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。" ^7 X1 L. A/ L+ ]7 ~- x9 |0 c
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
9 m* G( M7 ^3 h; N% R5 ~1 N& A9 d5 R9 ^$ T# B% S; H2 {3 y/ y

/ c! _7 _! B/ r4 G& E; e! c" \: a* T! S: ^

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




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