爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 / D5 u8 D: ?1 }
% `! a' Z% \$ y/ s& Y$ g
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
  G( Q" ^6 D! x0 J5 N) b3 t# ^3 m效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; S8 Y6 ^, \* Z- A----------------------------------------! v% Y9 N3 [! w7 P; e6 D+ f
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。) a$ \4 Q7 y0 o+ L2 }
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
/ M$ c/ z# s4 X  z+ b! j----------------------------------------
: N' d7 |0 r. y" Qhttps://github.com/guillaumekln/faster-whisper4 Q* |; \+ v7 m, ~) I8 S$ k
安装如下:
, L9 [0 l( u. \1, Windows 10
% p( c+ o/ I3 f: Q8 C, r0 d2, Python 3.10.11
5 E; o" y' C6 j8 K3, CUDA 12.1
& z/ t$ O9 |* I4, 在python 3 中安装
' u; y. ?! Q/ S& ?, t+ N/ ipip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* R6 K' e4 h0 f+ v3 s0 O: `1 ]6 K这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( r9 J0 {" Z4 I$ @5,pip install -U openai-whisper
; X% {1 H. M6 E3 U+ G5 ]. O这是向whisper 致敬,可以不装
( n) a6 a- s+ Y' K5 J6,pip install faster-whisper" Q0 X8 F, }  J; D
----------------------------------------
& w& c7 y9 n+ [whisper 我用的命令行,faster-whisper 我用的是python。2 h  q' i6 e1 ~, L9 [. T; f$ N. t1 L6 M: f
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:1 a+ }1 [' z+ h. d) k

+ m( h5 I+ `8 S: `  K----------------------------------------
0 L6 G7 v) ]" s; r. N% y% S5 ?) n5 O' G' Z9 d) i3 s  N  ]; [7 g
from faster_whisper import WhisperModel  E, Y9 R/ t; G3 d1 x; h& g' Y
& \' s9 |! h8 w# E4 {
model_size = "small"$ {& A# x4 \, Q2 a# c4 b, O# }
% X8 F  D4 L* ~% ?% h2 f2 j5 Y+ V
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- }) b1 L$ ?; M- ]( C. S8 [! M7 ?- r+ V5 m4 X
segments, info = model.transcribe(
. @1 ?; X) {0 U& h7 b* [: G    sourceFileName,
6 g/ l& B- P# ~) z$ r    beam_size=5,
0 }3 }: A4 h  D6 X" Q    language="en",
7 @2 a, K; B8 \# y8 M- [    task="transcribe", ! Z) z8 _3 O, }9 ?$ ?" \$ m+ X
    word_timestamps=True, # q# M' j& h) r& r6 {- ]* ?
    initial_prompt = "Hello, welcome to my lecture.")
* d6 y2 z- o, v- E. g
2 Q' v' I- K* W0 a( lfor segment in segments:
3 d: t( G0 W5 p    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 W  B0 ]" h1 a; s1 e

+ \' P. Y: X4 v$ Z4 k8 n4 w0 M9 X        for word in segment.words:6 @5 L5 Y3 _3 Z% O% e0 \
                7 \+ L# `, b4 I' ~
----------------------------------------/ S. c7 j- [5 a6 F6 |6 n  R# j; f

! E& Y" h0 P1 M! z% y7 Z3 v$ W代码说明:
# l# G1 g# C  x( f4 F' |' g1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。4 k! Y/ g" Q$ @" t
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
/ m2 W4 m8 A! ^& ?1 ^# w% R3 X. p  G2,segment 本身是很粗糙的,做字幕勉强能用。2 q! u+ V+ S, v8 K  R* d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
3 h) [/ x$ S/ E& S0 C7 g0 ?- m4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
' a( j( Y( |" p: q比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
/ ~6 o- n" }  Q- Z/ U9 ^" }5,model.transcribe 中参数说明:' Z) E. v7 r/ I  R( x9 i
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数+ A' b# {. d2 D$ y: U7 z6 ~
其中* }9 F: D* X% Z$ [% T0 N5 s# ]- D- R/ C
    word_timestamps=True, ' {+ H; V: f6 V4 Z
保证了你能拿到 word,否则是拿不到的
6 |8 \  G& m: C6 j8 M    initial_prompt = "Hello, welcome to my lecture.")
/ i( b/ U5 V7 a1 z6 f保证能尽可能准确的断句 punctuation,但是不是决定性的。
' d  k- U* i0 ]/ P+ s; H其他参数可参考源文件:8 U. L. Y0 J3 @4 B# g' @7 F8 J
https://github.com/guillaumekln/ ... isper/transcribe.py
. u- B, d7 r7 A, P+ Y' Y152 def transcribe(
; Y; e: [) O7 P/ n% z从源文件你可以看到是支持中文的句号断句的。# Y7 P" `9 I1 D

* U  L. @, e! A% D) \6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。! w+ u# u& c- V1 T  \) S( X+ U
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# g& c# w9 `; i% K# b
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ v1 S+ j% X8 D+ C/ t' t+ m

% P2 ^7 F% Y  |# A+ u   {! A% M6 L- ]/ H
0 @7 @) G( N& I' h: j/ x

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




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