爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
/ I* @0 o8 `# x- u' t! I4 k& e; m' |
+ z6 K0 Y# h# h: q借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。5 h. D8 `- q5 j2 d/ F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。- ]& b3 O7 w' y  @! C5 a( ?0 c
----------------------------------------
$ C, M/ m- f" z' a. H1 ^显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ x% C: P; a$ ~+ Z在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 M5 ?# `. S  a8 y' Y$ Q9 q
----------------------------------------- Q. p7 J, \8 e# b6 X
https://github.com/guillaumekln/faster-whisper( N8 u4 D4 z1 m2 w& w
安装如下:0 Y. N4 a; R0 N
1, Windows 10
% Y- S/ q5 a* C" }4 @9 u2, Python 3.10.11
% W6 N+ m% i  e3 }3, CUDA 12.1
8 ?) _  T6 D( r* N% v6 t4, 在python 3 中安装
' P' `, Q; \( T7 h; ]. vpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
; {9 ?# d* x0 R7 a  A) e$ n! y这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 c9 {2 T" x: l& ^2 z' ~5,pip install -U openai-whisper0 O9 h! r! \' J9 }# n" q9 M
这是向whisper 致敬,可以不装+ V' v8 o* w; N7 a! V* y3 a
6,pip install faster-whisper
3 f: a" J" p$ B5 y8 |----------------------------------------: a2 y2 y4 o9 `2 d% w% R/ k
whisper 我用的命令行,faster-whisper 我用的是python。
5 A- Z% M# o: C* U下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:: O0 f: {' w5 u2 t
: l: q! f7 P+ a/ q' {; z4 p* u  c
----------------------------------------. d  G5 n8 d* o7 M4 g

$ B6 p. {3 }8 H' u0 C/ wfrom faster_whisper import WhisperModel
3 b% {- j1 X+ b, k
5 e) b* q- c* P* X& r( E1 Fmodel_size = "small"
+ E! k3 G8 E7 a8 s( i5 [
/ b9 t, E& {0 a0 D; _  l; amodel = WhisperModel(model_size, device="cuda", compute_type="int8")& f# A( ?, F) [4 |, l
/ ]4 F# D1 C( c! Z5 A7 M7 F
segments, info = model.transcribe(
( l) b/ W0 d/ m    sourceFileName,
2 E$ s4 y  B* H( z2 O    beam_size=5,
5 S6 C% N8 r: r    language="en",
5 B6 s) [$ O0 C! x% N( k    task="transcribe", 0 i9 K7 I( \5 I6 `+ o# Q
    word_timestamps=True, 7 P3 h& V7 w9 W* |
    initial_prompt = "Hello, welcome to my lecture.")
, {: o5 h- ~* Y6 Y' B8 m7 x& d) k( W; B! C
for segment in segments:  t7 C) f0 z  s" b0 D  K0 _
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 \, H/ Y. `8 e: y( x; D
1 e6 F. C; S/ [7 Y) l' L/ @
        for word in segment.words:
% N- v9 v, Q5 }1 t/ q2 B               
/ q0 X: L0 W# c, P) t----------------------------------------8 \" x  C5 X$ @# _" ?8 \4 g7 W
5 T! i' h$ G( C. K: a
代码说明:
, x( m+ m" K. H: d$ r1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。/ S; o5 S3 c! F: z# _5 u9 V, K. v
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 B2 v5 ^% J2 p  F! I( `
2,segment 本身是很粗糙的,做字幕勉强能用。
/ l$ N! ~7 s( d, P+ f6 v3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; ?0 G1 x  F& a$ K( X# O8 c' c- O4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中/ @5 I  e3 f" d9 d
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 l/ j( O! Y* a% ~2 R8 {5,model.transcribe 中参数说明:% s1 x7 s7 t5 V2 P* {) |$ o
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, j+ \' j& _6 ~: \其中
$ A) Z& z" F: Z( s    word_timestamps=True,
5 P, C/ [  i: @/ N( e" O% v保证了你能拿到 word,否则是拿不到的
0 _7 s4 v/ Z: J( w0 C- U' h    initial_prompt = "Hello, welcome to my lecture.")
1 D' y0 |3 O5 G8 }0 i* T) U保证能尽可能准确的断句 punctuation,但是不是决定性的。
, [9 N* W* `! Y6 Y) ]! [其他参数可参考源文件:9 f2 I+ t1 W( u; i; {
https://github.com/guillaumekln/ ... isper/transcribe.py
# C4 c) V4 s) U, c3 ]4 M152 def transcribe(2 M3 ~3 X9 {5 D+ W4 n3 Y0 v+ }
从源文件你可以看到是支持中文的句号断句的。
8 x7 x( j3 U0 J- s* a5 h! k8 `: h2 u
7 ?( v, |1 E' i8 @: y; ]6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。" z( d! \9 `$ w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 D3 u6 F& f7 s1 M+ T8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。" c8 [5 \4 Q6 v( y
( w4 Z+ U( R/ L: O9 Q) X. M
% z2 ], T' b5 T! ]7 h# _  `

6 C2 s9 }% Z. N7 E  i$ @1 G
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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