爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ L" k, p9 [' E. X% _4 T; z5 e3 m& v7 Q
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。3 ~; d# ?: a& E& Z, I  y
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ G5 x  w: {' f# O4 M----------------------------------------
/ ]* d7 P& q8 a6 Z! R* x显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。! E7 _5 U' P  p' ^0 @& r/ L# E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
0 C1 T- Q$ m. T' F& ?3 _( V----------------------------------------% s1 }1 r7 h) D5 l* b; T' `3 R  ?
https://github.com/guillaumekln/faster-whisper) A1 u* x& {. b/ K, i5 X( j% h
安装如下:
# b- |4 T& [9 M6 s$ f& X1, Windows 10$ |6 C* q. W. W6 H
2, Python 3.10.11
. S  n( A9 m2 |. {. l5 n6 f3, CUDA 12.1# B. Q8 t& k0 W* \: M1 ], n, B3 a
4, 在python 3 中安装( {0 o. T0 P* O5 F& p
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1174 f6 v1 G' Q4 S, ~8 J2 @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。$ k% X4 H7 `8 `! q8 M7 c; Q# g; o
5,pip install -U openai-whisper
6 O2 D9 a' b& x6 K# s, h5 B/ T7 p7 @! y  R这是向whisper 致敬,可以不装
: q% u0 |2 K' M6 f( W6,pip install faster-whisper
2 k  A) a( [" T6 A0 Y----------------------------------------
- A% f) |1 l8 v3 h) C; gwhisper 我用的命令行,faster-whisper 我用的是python。
" B1 E7 |! B2 f, E下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:& v# c3 r, E$ H  m$ W# z1 G

# h  j, \9 [! G& T& y- k5 U2 y----------------------------------------3 p. t2 }2 m' n" `

, e2 ~- z0 N8 N+ l- d9 s' Mfrom faster_whisper import WhisperModel
# h/ Z# t; {- x0 V7 f) s& }* @
0 U" w8 ]7 d' z  _: T6 b0 @model_size = "small"
$ u: Z* j1 J' E% G: F) }- C
( O( ?/ s4 l$ Q/ D- S- N$ |model = WhisperModel(model_size, device="cuda", compute_type="int8")
7 U9 N. ]/ i- B: M) Y  r5 H6 f! }- }
segments, info = model.transcribe(1 g( r" V4 e, D. y& A) `4 ?. C
    sourceFileName,
8 i% V& A+ w$ I" r& z8 V. |: U    beam_size=5, : ]8 ]$ M" D: a6 \, N
    language="en", * v( G* F; U" C. K3 z! {- B
    task="transcribe", ' B. f- |0 o& v, v
    word_timestamps=True, " K4 V* C9 S$ D) n% t
    initial_prompt = "Hello, welcome to my lecture.")
+ a/ i5 S0 y$ Y! z" r/ S( \3 t
8 g( M" c+ O1 R% F/ K  S9 k: o$ _for segment in segments:2 z2 c0 f+ X( [% ~( e# H( Z0 T
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) G" m/ N3 r8 J* W5 G% D+ |
; V+ i- |9 P6 M! l9 U        for word in segment.words:" S; D/ q& R* {/ y+ R! ^5 Q' D# w$ K
               
4 W( C! `# y* G7 q----------------------------------------
# ?5 ]8 y. h1 [2 ~/ Y' U! }. J( k7 o% y
代码说明:- g5 E9 M7 N! G4 T6 P( f+ q& _6 ?( R
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。* v& [. t6 {% R7 S& i8 W! z
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. _! u' R; B" ^+ U1 k" m6 P
2,segment 本身是很粗糙的,做字幕勉强能用。
3 q1 t, Z9 K& L* R/ c$ C+ C3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。+ M9 d0 K; e) f
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中8 H, p1 T: Q: j$ N' Q. V6 Y1 W2 r+ S
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。7 y5 w1 i% o8 n2 C4 n2 L
5,model.transcribe 中参数说明:
' P# W4 X: U: j: O4 K你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数( v& f" ]$ C4 X& n6 D1 g
其中
# r" r* Z- Y, y+ s. d    word_timestamps=True,
7 v2 t! m7 G% o- N, i' ?保证了你能拿到 word,否则是拿不到的7 B6 B* Z6 X) c3 M/ a
    initial_prompt = "Hello, welcome to my lecture.")
4 D8 V4 Q$ h$ h保证能尽可能准确的断句 punctuation,但是不是决定性的。
1 Q# |3 |  H4 T/ X( d: a其他参数可参考源文件:: [2 `7 Q9 h6 v' G& Q8 G; z  I
https://github.com/guillaumekln/ ... isper/transcribe.py
" `- s" O3 L: z9 a152 def transcribe(
* {- I3 S$ S' [, N/ N从源文件你可以看到是支持中文的句号断句的。' c* Z7 v" k) t2 Q6 l' g# T
! n6 e# g) ^- Z/ q4 z. y
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ _/ G5 Q  s# x9 p7 ^7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。: H0 X& F1 v* r. o* \6 n3 x2 `* \+ g
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( ]3 _* Q1 j; A+ w  X5 m1 ^. F: q7 r1 {! q- d

/ p. m& `" m; t
+ p9 k/ H% S- \3 }& \( R8 K
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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