爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 # @# o4 Q0 M# V" [' g* d

8 n5 G9 F3 t, t5 @+ @1 {借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% `4 X5 b2 A  `5 F: \效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
- F! `* _1 p8 k; q, A$ G0 _----------------------------------------2 y$ k4 G4 o8 \) U7 ~' @0 D
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 p$ o/ q6 T7 Z* x在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- @9 R1 B8 d. J
----------------------------------------. [: p6 o+ R2 W: ?# B8 M7 I
https://github.com/guillaumekln/faster-whisper- w$ N* o# T/ M
安装如下:6 X+ D* }: t* g5 N- x1 N; D  a! X' h
1, Windows 10
- F7 T+ u  w# y; n2, Python 3.10.11, Y/ Z- K# {: b9 W1 D6 o, ~. q/ M
3, CUDA 12.1
9 m9 t% o3 B1 V$ H7 i4, 在python 3 中安装: o: E$ `7 ^. m$ V3 @
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
& L5 u! C, h% x这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。. x  V4 L* }: B  W
5,pip install -U openai-whisper# _, ]) R+ N9 C- o) T& C8 ?3 g" _5 X
这是向whisper 致敬,可以不装
. C( L0 W# j  B! u6,pip install faster-whisper
. W1 x8 j- I% {6 u7 T$ @& g% O----------------------------------------
/ d9 o, l' [% l1 xwhisper 我用的命令行,faster-whisper 我用的是python。
' x0 u5 ^3 u, T7 T1 n下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
  o5 {9 \5 f. L) v0 B2 i( `) {; E
- U0 ~2 v% ?0 g* I. S----------------------------------------
% a# U: \+ c6 H$ s# o$ s
2 V6 d3 X/ h: M$ ifrom faster_whisper import WhisperModel& W, {$ x2 T4 {+ g6 m
3 G- V% B4 ?9 Y/ \% a- Z
model_size = "small"
. I  M6 T( h5 |$ u$ {5 f& v0 E, n& [
model = WhisperModel(model_size, device="cuda", compute_type="int8"); O9 O5 a: K; z$ w" I, T. k! d
( Q* p' B% c1 B0 I( t
segments, info = model.transcribe(/ c; m3 T: j0 O. e
    sourceFileName, ' t8 H# b" R) \- `1 V
    beam_size=5, * e! P% K0 @7 ~) }: i1 k: m, C
    language="en", 1 _% |& |1 B2 d$ k4 Q! c0 A
    task="transcribe", % c9 Y. `2 D8 @
    word_timestamps=True,
- T9 b; p/ k; a( ?! b1 m; \    initial_prompt = "Hello, welcome to my lecture.")
2 V/ d- P. B; D  v. _
8 b3 `0 D- [3 ~* Y8 bfor segment in segments:
4 G* e: q+ h% ?! c0 |1 o) m) r$ h/ A0 X    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" D2 B0 I% H" b! G! L
% S- O' ~$ d; D, L        for word in segment.words:
# }1 R! O5 A. i! X+ `* w                . y* C; n; u/ a* y; D6 o* F
----------------------------------------
9 M6 i& Y! _& O$ o! ^% B4 o
% O0 p5 ]5 M% F0 w代码说明:; K  |- k. T4 _  E1 o4 f
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
5 l& f+ l4 |/ O# ^: m0 r但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 a* ]$ Z; c' ^- Q2 K9 J  y2,segment 本身是很粗糙的,做字幕勉强能用。
/ C6 J: H5 }! N* V1 T9 O3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' Z: N2 x0 v) n$ I) D& L0 t4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; V, U  L& [* o& u( \4 u& [比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。% }* R! A" N! Z5 s
5,model.transcribe 中参数说明:3 s" E; l3 C2 l' |8 W9 E
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数/ e, u. G% [) X/ L
其中
  o6 |" r1 \- n# z; Y    word_timestamps=True,
9 D/ _" `6 _  M: L2 l保证了你能拿到 word,否则是拿不到的
- P4 }/ f0 ^3 i; J2 w    initial_prompt = "Hello, welcome to my lecture."): H& M# V  K, t0 l) W
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ a& c* R$ U& L7 |: N其他参数可参考源文件:) x; n% w+ A1 L) v* M" I, u; \' b' Z
https://github.com/guillaumekln/ ... isper/transcribe.py
" r: a$ X( _: @! }152 def transcribe(" D& o$ S2 t) `# d. s& \( T" H
从源文件你可以看到是支持中文的句号断句的。
# Z, N! p/ Z8 K- G+ A( [4 N2 b4 n5 v4 b- k$ t  U  g- M2 g& m
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
7 \$ D  L* l$ G, u7 P! a7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。. {6 U4 V( ?8 L3 t$ l& _8 J
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。# n! q+ `* ~3 V! U, v3 t- V
" Y: Q3 H1 s$ X; p; H% b% W- M0 G

& K2 v; i- P0 i! c+ c' t6 u3 G  A# g, O/ R6 k- [/ s' L5 a' V; J

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




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