爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 $ d0 t! n$ F5 q8 f  l

2 P" W4 j. |+ o借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& m$ p9 ~" i6 e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ a6 Y# Z/ ]5 p6 C, Y8 i# k$ T& a----------------------------------------
  b0 W0 x% a, E& v0 [! e! q显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 Z! S; z4 ^; _5 _在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; J& j+ n/ ~9 d! P. g
----------------------------------------; d6 y/ h" S8 Q0 D) O
https://github.com/guillaumekln/faster-whisper
% N5 Q  [$ z  t9 |安装如下:
5 u, g, h0 x/ y7 U$ b1, Windows 10
( M9 P4 d, T3 q3 P0 L5 [2, Python 3.10.114 R: }5 E0 A1 `0 H8 z4 b
3, CUDA 12.1
" a" |0 E* _$ Y4, 在python 3 中安装( K0 ], g- K$ o$ P
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
. r. l+ w  E7 K1 k- a& ~这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
' Z/ z8 S2 L5 b5,pip install -U openai-whisper
# Q$ J/ y5 v- Q- T' e* b4 j这是向whisper 致敬,可以不装" u, I! O$ w) r  x) o) s4 o
6,pip install faster-whisper( Y+ x- f- M* i
----------------------------------------0 l% C8 r: N& k! Q: O- e  H8 L
whisper 我用的命令行,faster-whisper 我用的是python。
  p; b! m+ O. \! k1 ~+ H: H2 }% q下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:4 J/ O! t$ `# ~( W2 I
2 o4 s" i5 ~9 p7 W) M" l8 f
----------------------------------------1 r* g" F5 s0 q1 g3 m+ q

" H3 y, B) c4 N8 r, ?& M* ffrom faster_whisper import WhisperModel
; y% ]* Y  j& _/ A1 [7 j$ d6 z4 c( ]) i
model_size = "small"  _8 r$ \, L; t3 Y& ^' P
5 E1 _) S1 ?& F% \! g  E3 r7 Q; f
model = WhisperModel(model_size, device="cuda", compute_type="int8")
; J9 |& ?9 p# e2 n8 \1 [( b) T. ]* A5 O& K/ `7 n8 v' `) j: O8 |2 o
segments, info = model.transcribe(3 F/ d+ y; F! Y
    sourceFileName,
% j) c1 a7 d( V: B    beam_size=5,
/ z6 S" w+ @5 D    language="en", 9 f9 U/ \& L" l+ B
    task="transcribe",
' q: r2 _5 [" k& M- r& @$ Q( w    word_timestamps=True, 8 N% b+ y% c& g' D+ U
    initial_prompt = "Hello, welcome to my lecture.")) v) [* n: P7 T) P1 L
9 W9 W& H1 l: X- ~# ]
for segment in segments:
( o; i6 L; j$ O! q9 |0 e: K4 P    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
  m" I' G* ]9 s9 q% b) C% ^1 ?; ^
+ X4 Z) K2 B( v; Y# Z" g' E        for word in segment.words:
: s* u% {0 f+ E0 [               
, k0 e3 a4 G8 v* |$ e& Y% i----------------------------------------2 j( o9 c0 E: `. y( D- t% n+ t# H
& \3 n; U  |# q3 A4 i6 [0 C* X
代码说明:4 s) r4 A* G" t$ d0 z/ [& c5 y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
6 a8 U/ j* z5 a  J但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
  {6 s( G  P  Y: J2,segment 本身是很粗糙的,做字幕勉强能用。1 B3 O" F4 ?% g' X# i6 ?
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' ?! w) A) G& p% u% U  J4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中# [# x6 P& R& j/ `9 `, z
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。1 ]4 {( }% [- o" S) k7 K
5,model.transcribe 中参数说明:
# }2 u# t5 o1 o7 W! ]( X& A1 a你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& @3 s; _6 Q# [  Y% b7 l6 C其中0 q0 Q* p  D" Y* |
    word_timestamps=True, . s! }  R" Q3 A. O% _4 U
保证了你能拿到 word,否则是拿不到的) K. N- I6 F' x. Z  N9 y- C
    initial_prompt = "Hello, welcome to my lecture.")
' q( O& j2 a# S2 r4 J保证能尽可能准确的断句 punctuation,但是不是决定性的。
' @4 h* b( r5 J8 s' f$ l其他参数可参考源文件:, I- d/ ^7 i. l! L
https://github.com/guillaumekln/ ... isper/transcribe.py6 k3 p8 Q3 `- t1 k  u, J5 P& T; o
152 def transcribe(
8 G. G" w- ^8 f) M; c! Q4 s从源文件你可以看到是支持中文的句号断句的。
5 V2 W  G# [/ O0 H2 b" v6 ~( W4 S* ^$ ?7 l! ~
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
# _# }; d( ]6 e" X7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。& E' k. c* H: _4 I8 L4 K! x( F
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: [$ R1 y- V/ F5 h/ l: ^  b( a7 q
! T) r2 l. c) e' x
' i. Z) c0 s/ X- P; p& t

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




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