爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 & E" _- e4 C2 Y, K
9 G5 f7 t) A8 G$ S6 o0 _
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ R& b- }! w; X1 `: `( B效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。& I7 X, D  b) D. p( ~" f
----------------------------------------4 _* D* d' y1 @& c" h. a
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: w8 Y6 r% _+ r  U* _在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
4 t1 @* w- r  Q+ C5 Q----------------------------------------0 ?+ k. t9 g8 y5 \" \/ V! ?& U
https://github.com/guillaumekln/faster-whisper
7 c! f- B" r3 M安装如下:) A7 C! G* ~: g! _1 X
1, Windows 10
, Z6 q8 O; g/ k3 S6 n2, Python 3.10.115 O3 `  z: h% u
3, CUDA 12.10 j0 b1 k2 [, E1 o/ {4 ^3 H
4, 在python 3 中安装
' B5 b/ O: f6 N9 e5 g: x$ `. epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 y7 [) z7 N, b) @$ \7 Z* U3 R
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" l: T+ B/ b0 {" C7 \$ T3 Y
5,pip install -U openai-whisper# y  J, t+ p$ _/ K
这是向whisper 致敬,可以不装! W/ _- r! O- I: u0 x7 |
6,pip install faster-whisper5 ~$ v7 y; ]3 Z4 v- {7 ]
----------------------------------------
4 R8 [$ n' R5 N* hwhisper 我用的命令行,faster-whisper 我用的是python。% {3 z3 c- |8 }0 ~& _: V
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
# m1 n& S7 D0 Q  T+ G
- a; v9 e: N) z' h# J9 }3 i----------------------------------------
! f5 q1 b3 W* i) Q7 b; S& M7 |2 k$ O4 C8 o, e
from faster_whisper import WhisperModel' J/ V. M1 K- Z* T  x9 |# U) \
! D7 g* c% L. ^' x3 _, m* C
model_size = "small"
" N& R3 \; s: [6 n0 V: `8 |: G. K8 w) O$ e, H+ \  l5 J
model = WhisperModel(model_size, device="cuda", compute_type="int8")
; F4 T) h# V( ^
( b1 b# M. U2 }( o- r# o1 b! }7 csegments, info = model.transcribe(
* Q, d& a- [+ n) y! ^6 q    sourceFileName,
* B, Q9 A( R$ E- V( W. M/ B    beam_size=5,
: I  G1 V/ z) R0 N3 }" k    language="en",   f; M8 H! y! a: ~
    task="transcribe",
! q0 Z. E5 k6 A$ c; o% `    word_timestamps=True,
% m/ n; [# ?9 c) s5 {    initial_prompt = "Hello, welcome to my lecture.")
5 b% Z9 l) g, w# |- J% E% T8 j
  P; i% _% _- [. w/ _- Ifor segment in segments:
8 I' ^- o' ~5 R: |    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) r6 F$ B/ D' [, B* q& m

- s' B8 K. {* B7 b* N  f        for word in segment.words:1 Y( C2 f* T3 y# q7 c
               
- I: b  w' V; ?4 Y9 v----------------------------------------
9 n/ X( a. N4 J! V! L, ?/ ?
! s1 r+ {2 V2 L9 F代码说明:6 ?8 {! t7 H7 T/ C. y! e8 T
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。5 ~6 Q$ Q; v) T- z5 b* w
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。- Z" U* j$ p' o  z8 U
2,segment 本身是很粗糙的,做字幕勉强能用。& b$ P5 [4 Y0 C, H
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。8 T% s. |, A" ~2 i, z6 c/ ]6 }+ S
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
( Y, W* D2 g! U比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。" F* O/ ]4 ~& y3 H; {% q! t
5,model.transcribe 中参数说明:* P% J% ?9 u7 N; Q
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
4 m+ S6 u2 V" u2 b其中0 l/ y0 b& C) B  I+ k- V+ i
    word_timestamps=True, 6 T( p0 O( j* f9 m8 `% o
保证了你能拿到 word,否则是拿不到的
( z, S% L2 i) ]8 ^    initial_prompt = "Hello, welcome to my lecture.")! h. {- M. D7 e# s% ]
保证能尽可能准确的断句 punctuation,但是不是决定性的。% ^' s4 L+ H6 @0 Z+ L% N
其他参数可参考源文件:
+ B2 x8 a: s6 m3 g4 _+ S) ohttps://github.com/guillaumekln/ ... isper/transcribe.py5 I2 n5 ~) O* \9 |' e" N
152 def transcribe(
* P. W" C- T' U从源文件你可以看到是支持中文的句号断句的。1 @( h3 ]4 a. V+ z% |$ Z, J
* Y6 b4 Z6 f& U$ h! ?
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. @' H  m5 m2 K7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。8 Q" V6 C) `1 [& d1 ]3 r) g
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。" j5 |# Z- ?0 T3 }8 J" b' D
6 a( E* {9 i" L% p

7 c- X, |& b/ X0 v1 V5 g; E3 \$ q& z: {3 M& ]" z- R2 j

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




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