爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 h7 U1 }0 u; d, X5 i6 r
& M: ~# j8 U/ K" J7 W7 ~6 ~借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。% Y7 Z% ~  B8 ?7 I, S
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 e+ |. e8 d+ t& i. E5 Q) k----------------------------------------( C- B- ~# p. x7 [+ C
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% ?$ S1 O- {" r( Y# Q" x3 ~) G在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
) F/ B4 M! b" [2 f) u$ h3 I& X----------------------------------------
8 b8 k9 G4 v) z- bhttps://github.com/guillaumekln/faster-whisper" J2 O& M7 M4 B" L
安装如下:2 B; F- e( E3 m/ E
1, Windows 10
0 P' {& t+ Q6 b- |5 M2 z& k7 J+ @9 H" }2, Python 3.10.11
9 y* o* ?; c8 E5 ?! y, U3, CUDA 12.14 D2 y7 G$ k0 x6 Q# T
4, 在python 3 中安装& G' ^0 l9 t% ?& z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1178 f! n: _& Z4 X5 i/ p/ z* t8 Q
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。+ n  ]( N4 U, ?2 C9 k9 F' O
5,pip install -U openai-whisper% |( T# c+ ]$ D5 c# X4 o
这是向whisper 致敬,可以不装# h  i# p" K, Y3 X2 h
6,pip install faster-whisper
8 T8 o' A# e1 \9 A----------------------------------------, g  |, c0 [  X+ U6 O
whisper 我用的命令行,faster-whisper 我用的是python。( V/ b- L; T  Q0 R) W; G
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
# }: ^0 g! q# O. R2 |/ @* T" N9 a3 p% E! a
----------------------------------------
& {/ f2 J  C* F' F! t( j+ |! h2 a. G. i4 J% X8 x
from faster_whisper import WhisperModel. [3 {7 ]- ^+ n% I4 ]- d0 j

0 |; j0 s5 E3 }( z) hmodel_size = "small"
* M/ U) ]/ V1 p( ~- d$ C: T4 A
- k; w  e; k% j8 P6 emodel = WhisperModel(model_size, device="cuda", compute_type="int8")0 d$ a+ o- z. Q2 q- V
4 f: A7 ~- n+ D. O- M: s1 }
segments, info = model.transcribe(
( K) Z" T) ]" X    sourceFileName,
7 }. N8 K- g6 b2 ]    beam_size=5,
% Q/ L) Z, k. g/ N2 D    language="en",
; W; P2 x: u9 u1 d, m/ @' Y! h    task="transcribe",
. t* I& O; \# h6 l    word_timestamps=True, * {. _2 t; t8 E5 d: d( A
    initial_prompt = "Hello, welcome to my lecture.")& u; U5 s4 B8 u3 n8 e8 Q
4 N: F0 N( O# Y% g: F4 E
for segment in segments:9 q( P0 i7 ^0 C4 W2 L
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" {3 W. t$ S4 v  d8 k% P+ v0 d  y0 k: m$ i+ f! D  B9 n# ^3 f. A
        for word in segment.words:: J8 @( x1 R* J% u9 B0 V
                : H5 b! f# i6 n9 X5 J4 {% L
----------------------------------------  {; B$ t) _# ?! U

4 J3 Z0 z  Y8 G# {% S  w代码说明:- x1 g0 k. I& l6 K% ]9 L1 x
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。) V# ?" \+ k% j) Q% K
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' W6 Y. f4 _6 p. U1 D9 p( p2,segment 本身是很粗糙的,做字幕勉强能用。
# I3 x. A; v5 w. G2 h7 t+ k3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。9 P" |* ?7 R0 k. ~8 a
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
5 F) H  i" a4 z% S8 D, k3 C比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% {6 _2 j( Q6 l7 y* w% K5,model.transcribe 中参数说明:
5 q- X" ]) B- s你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数$ I4 [$ x+ P7 x, x+ O
其中- B' |/ s9 L! s. H6 l0 Y5 h
    word_timestamps=True,
& m. U8 r8 g" a/ i* N. Z保证了你能拿到 word,否则是拿不到的
8 I7 ]: w; Y6 D1 S( y    initial_prompt = "Hello, welcome to my lecture.")# I* r2 i- x: p' w' B
保证能尽可能准确的断句 punctuation,但是不是决定性的。
( O# R  J+ A$ b) C# k  f其他参数可参考源文件:
& h, ~% N) X; a# f1 U8 ^, Vhttps://github.com/guillaumekln/ ... isper/transcribe.py3 Z9 V% Z8 ~2 p: N6 ]6 H
152 def transcribe(* t3 _% W9 B7 _5 d, L: r! Z2 [) X1 d
从源文件你可以看到是支持中文的句号断句的。. Z# o5 S$ @7 E, I' j# H% C
2 w2 O3 \/ s; D2 X& G( q% O
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. o# ?3 q4 W% }& t) A$ Q7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。6 B  y) W7 [' y% a, Y% v
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 ^) C% w' L- ~! D8 L1 C2 q5 b

) H; e6 P2 W" t" X9 k) g8 B
: \+ _  j* p, M  c$ J
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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