爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑   H0 E$ P3 u8 ~+ n1 a- }; |5 n3 d* m

7 U; _* l4 L) Q, ~借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。" u4 j. u. ?9 U0 \) V  ^
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ @% d+ m, n, l2 T. m----------------------------------------
! ^7 m; Z8 K% k& }* f/ A# d; _. _! q+ Q显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。+ f0 K0 B* k8 \) |
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" `& z; l8 F, A----------------------------------------! f7 d4 D6 C$ U7 V% D* e. m( r
https://github.com/guillaumekln/faster-whisper
) R7 j! @+ F, a7 `安装如下:" x; q& q" K" m. e$ w" C# X! u
1, Windows 10
; ^5 E2 H- {, j, Q1 g, J, `2, Python 3.10.11
' R4 r. s# [3 w2 R# h" g, n% Z0 w3, CUDA 12.1
  r, A: V# a# R0 S9 g+ N4, 在python 3 中安装8 w1 _# p+ k2 x% u6 ]* m
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
2 N  m! L5 E2 e! F3 t这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。3 r$ P( s$ D* j2 m8 ]
5,pip install -U openai-whisper
0 p1 |+ z6 x$ t! I7 \) A这是向whisper 致敬,可以不装
6 a# K" Y! D) h6 S6,pip install faster-whisper! w8 o: I- a( b! J& k' N  ]
----------------------------------------6 n9 n6 e# G. r# \
whisper 我用的命令行,faster-whisper 我用的是python。* o& I) {/ N- k! L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% b% |5 d0 k6 F8 C- w2 x& `2 ^) Q1 l3 |" {* L( h. R
----------------------------------------% _( V+ Q# K4 }  b5 @% x" h
0 u6 B( F" k7 e: X( @4 S+ \3 }
from faster_whisper import WhisperModel  K1 a7 X% d6 ?8 v1 ?4 Y. |5 S
( t% U+ v0 }# c" |
model_size = "small"
) T% P2 P2 l# F% _: l
! z# g2 |4 i3 R. Y* y( X8 Rmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
: M3 G+ c0 O. D5 b1 b  V; g
/ d! B5 W+ e+ psegments, info = model.transcribe(. ^- I* j1 x0 V) I" b
    sourceFileName,
; }( ]3 w( {) v    beam_size=5,
& l2 \1 Z+ P0 F! b! I( z    language="en", : C- Y" v: f& n; w
    task="transcribe", $ w4 y& Z& ^5 B) ^
    word_timestamps=True,
7 E- G/ J8 J' |8 ^4 {! q+ }    initial_prompt = "Hello, welcome to my lecture.")
) U& x5 k( r4 X1 [+ {* c4 t
) t7 G1 }- H, ]0 B! Efor segment in segments:" E/ o# y1 q  S2 M8 C
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& e! l: v: a; n( }* b2 f5 [+ Z( O2 ]1 `7 w
        for word in segment.words:
/ Z' J4 y6 E% _3 Y; r                9 S, z+ m6 R6 e; t" |
----------------------------------------
# r# R6 C' }  r
% n; w+ s3 ^# b( p代码说明:# Z* D# j6 v4 O, t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, C( f8 \; \- x$ M6 D0 a但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ s, j4 R- f/ L& S3 {4 W
2,segment 本身是很粗糙的,做字幕勉强能用。- h' H4 W) }0 ]& ~" s
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 g' n9 x% s1 f* Q+ D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中$ {, [8 P4 Z" |. l0 \
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- p4 f7 B# W9 j/ j5,model.transcribe 中参数说明:
5 z) d( e9 S" d( ]7 R你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 n% g' x% g8 {4 X% s
其中
% _3 }7 C1 B4 M+ u0 W. |    word_timestamps=True,
6 o9 H. c1 Y# M7 ~  [/ F- V保证了你能拿到 word,否则是拿不到的4 q) b3 ]. t& @3 e
    initial_prompt = "Hello, welcome to my lecture.")
  D5 V  n3 q4 V& w& A* p( W保证能尽可能准确的断句 punctuation,但是不是决定性的。% X: @7 J0 K6 P# |
其他参数可参考源文件:: @6 _9 ~. Q3 p! F5 s+ ^
https://github.com/guillaumekln/ ... isper/transcribe.py9 Q) U- O- \: O7 O, p, H0 v
152 def transcribe(/ O8 Q2 ^) `: d; }9 U
从源文件你可以看到是支持中文的句号断句的。
: S5 {9 U- T! l" P: e" h( j5 W# ~  N& a
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
# J! n+ O4 h+ {' W/ o& k7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
+ G7 T4 n$ l# o' e8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. U8 \* x- A7 w7 }. |" O7 h) Q+ ^' v! R; `9 T0 {9 h
9 [0 r! M) d  a

' a$ \$ i) [# h! i- O
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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