|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 2 L+ D- j) D; _$ Y% |
4 l3 V: Q5 {$ r7 A" n. w
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 l% s6 r$ e1 }0 S3 U- e+ K效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) T- Y+ l' ?8 F----------------------------------------
% P' I7 a) C" f显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
; z, k# U& X8 Q' D( [" I在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。! c3 J! r) i8 m3 z
----------------------------------------
7 y7 X9 @$ H# o4 n" q5 A" Ahttps://github.com/guillaumekln/faster-whisper6 d& C" c& [* B0 v9 R9 U
安装如下:( I ?1 S5 ^6 Y% G, C2 U2 v
1, Windows 108 W- Y4 _5 Y" \2 d' k
2, Python 3.10.11
4 G+ e# d0 _. p b4 u9 ]3, CUDA 12.1
/ M; j7 u3 ]- ?' S! d4, 在python 3 中安装
; L' O# J6 u$ N/ b% ppip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) v L( A' j1 v! }8 L- H这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( o [! @6 y+ f7 @8 ~' z v A& v5,pip install -U openai-whisper# I/ o9 E& u0 g# A* @+ x/ s
这是向whisper 致敬,可以不装
' T: W" F1 z9 e. R6,pip install faster-whisper+ g3 r. Q0 _3 V8 q
----------------------------------------, w( h8 T9 b* ~, }( R1 i
whisper 我用的命令行,faster-whisper 我用的是python。
6 ?8 Z% S* I* H( S! h, @下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
6 }! C4 M+ z4 u8 V" ~/ U* p. L8 M7 m0 C6 z; H8 i5 h4 F) _3 J& R
----------------------------------------
. R: B6 y( Y0 a
+ o0 f9 i* P5 C& I0 C& ~- \9 Pfrom faster_whisper import WhisperModel' s3 ?, a' `3 [4 S
O- |' l5 z$ p0 n2 S& r, ]
model_size = "small"- E b* d0 }; V r/ L/ r
; ] d% r$ N5 o1 B' Jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")8 A# T t6 x$ o+ k" q
: `! m/ F1 I* |( i! F4 ^4 d
segments, info = model.transcribe(
1 v3 a# v- L/ p5 J* G [+ C6 I: O sourceFileName, - ?* B' P+ d0 i/ u
beam_size=5,
8 e I, w- r! x language="en",
+ {2 H( ?' L6 {* u6 y task="transcribe", ! Y9 \1 a/ w! D, b- d3 @+ U
word_timestamps=True,
) |3 Y f# @ h+ b; l4 S9 |1 H' w1 J initial_prompt = "Hello, welcome to my lecture.")& f5 ~# M& t* w* w! V" v
0 Q; ?0 _7 p1 i5 n: m* T$ E5 o. X2 u& Yfor segment in segments:
! H: ~( \; n: G, j5 o print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
, P0 D; d8 x) r3 ]$ `" \$ o+ A( y) z. U% U. m, a5 K
for word in segment.words:
+ V8 m" P: e0 ?! f' x- M 7 }3 M. E, Y1 v& [# J
----------------------------------------
1 t5 O$ J" V' k* G: D
- W: u( m" t/ S* O- i代码说明:
6 k, U* r& X/ B& L) Q1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
' l3 C( i4 ^( R7 K但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。/ K3 Y5 [7 d9 ]# b$ H$ V7 Z
2,segment 本身是很粗糙的,做字幕勉强能用。
7 o" e$ K: `. u3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。. v( k' P+ S- ~7 b( B; [7 h. Q
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中1 ]8 C2 ?- W6 q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
, d, s" X$ s4 Q0 ^+ p5,model.transcribe 中参数说明:
# j* R6 i7 N9 A. c你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数5 \6 k8 h! l$ G
其中2 Y6 a9 ~1 B* M9 R0 J8 ^* R
word_timestamps=True, 1 C9 a W" {& ?) J2 ~4 Y
保证了你能拿到 word,否则是拿不到的5 j1 ~1 _1 @' o! k2 p3 T5 ^
initial_prompt = "Hello, welcome to my lecture.")) J8 V* a& U4 T! Z; h: t: |
保证能尽可能准确的断句 punctuation,但是不是决定性的。
( R( ^" q3 t. i* Q+ R其他参数可参考源文件:! K5 c+ h8 c+ J
https://github.com/guillaumekln/ ... isper/transcribe.py4 x5 ~- T$ r4 v3 R& t" w
152 def transcribe(
8 ]1 Z, f c( ]# Q1 v" t5 j+ A" h从源文件你可以看到是支持中文的句号断句的。
: q+ E6 q- t8 y9 J* Q; [/ L @$ [* b
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- x- K _* X0 F) d% o& k7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 m) t2 m( u% t# w- g. D+ c8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
" c' D5 I& u; m# V7 \: g/ w2 v* D/ B7 W6 }8 W7 e. L% |
; U; h- I/ q" a2 p0 b0 f
" E( N3 Q+ M2 `* N! W |
评分
-
查看全部评分
|