|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
4 K" X5 D- l" U1 _7 Q' U6 @! P! Q5 [& R V
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& K( i0 h/ b! d# [效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。! x# [/ S. R6 s- W- W- k
----------------------------------------
! I# K1 Z6 ^/ l显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。: Y! {! m( z* ?8 D3 ~4 Z, S/ v8 a
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。. G: C- P% c. D& s) Z
----------------------------------------
5 w* S! ^: e8 khttps://github.com/guillaumekln/faster-whisper! P+ T# U% c' y( V' W
安装如下:
/ X/ B9 a/ Q: I g5 S: c1, Windows 104 I2 T' K7 N7 A. q" X8 R! @
2, Python 3.10.11
; ~- O" R7 M: h) o, L* l: N, {3, CUDA 12.1
6 J' `" Q+ a9 k. y3 H; }* ^4, 在python 3 中安装! ?/ K" n* F: L& V
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1172 N o" ` K. B
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. u* f% {+ z8 |; Y: a3 J5,pip install -U openai-whisper
3 a$ A- H& T1 t1 |0 J这是向whisper 致敬,可以不装
) z$ e6 r+ c0 E/ f P7 N6,pip install faster-whisper
: @) t, C4 i+ ]$ o3 d: c2 m----------------------------------------
|. l: V& N" B0 |: Cwhisper 我用的命令行,faster-whisper 我用的是python。
' O! M' l( ?. m/ i8 ?; S下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 t* Z4 }* ?: _8 c, L3 L
( R5 o! K1 w: m3 j$ Q6 B----------------------------------------2 R, p2 f, E- t
- X4 u$ U4 ?! \) ~ O0 g8 bfrom faster_whisper import WhisperModel
+ T9 c& u2 ], j% n
! g6 _1 _; b6 `4 omodel_size = "small"
7 G' r% d7 r2 W% U
" j; X8 `% p8 e0 Mmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
5 F1 |% W2 h. {/ u( `7 Z( A- A- r3 S9 J6 r6 c
segments, info = model.transcribe(
' z% d2 g( E- K# e$ h: k sourceFileName, + O D/ ]6 i0 i% w
beam_size=5,
( U; \/ t1 T( g7 s2 c% {( x: q7 A8 q% | language="en", ( B) m$ ^' q* c4 Q/ q; P
task="transcribe", 9 B x' E, i. ^/ J7 |3 p
word_timestamps=True, - ~% u7 ?; n' l2 @+ P+ @' j4 E
initial_prompt = "Hello, welcome to my lecture.")- _) O/ X, t' K6 |" b
9 s7 R7 e) [* X( b, Rfor segment in segments:" E! x$ z2 p, h
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))' J: l) s+ A/ N$ _3 X0 P: U2 N$ K; f
% h9 j$ B' G3 [" O for word in segment.words:
$ x& [, e) `) [! t u! c4 }. h; b ! @( a3 I( K/ L, D9 J) |; |( C; e
----------------------------------------7 |9 \3 _4 |4 Q8 @; ~% |9 b* U& @
! C) t9 S3 T& L4 K; @$ {
代码说明:
+ q6 N( P ~# u) L1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。8 v7 S* L/ }- }$ r, m" t% Y
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。# |9 T0 f4 M; t$ u8 s, ^ R6 D* S3 ?
2,segment 本身是很粗糙的,做字幕勉强能用。
( c# @" ?: h0 l& E' C/ W) j! A, ]4 W3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
* H$ @7 r% P2 x9 L) H5 n [& [4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中2 `6 K/ E7 t* ~" P0 o5 s
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 }% i* w! s0 }1 ~! w& B
5,model.transcribe 中参数说明:
( e) ?9 e' ~$ \你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数 Z) [) h) \; P6 y+ r* j, ?3 ~; q
其中3 s0 f6 g! q: S
word_timestamps=True, * p# f! _* N& P1 D, l$ }
保证了你能拿到 word,否则是拿不到的2 Y0 [3 `1 y1 e: j5 U' g
initial_prompt = "Hello, welcome to my lecture.")
) Q3 q. g4 A1 P+ U# P$ K( C3 |保证能尽可能准确的断句 punctuation,但是不是决定性的。0 ?8 d+ E$ p0 U
其他参数可参考源文件:4 A& g0 B9 N7 E8 p- ^
https://github.com/guillaumekln/ ... isper/transcribe.py. q2 o8 a! h* _4 D
152 def transcribe(
6 w, ?: h* n# e! g从源文件你可以看到是支持中文的句号断句的。' n# e' c# p) W$ K7 b, n1 c
% s A9 `; m9 d+ D" N2 S& v
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
/ e9 b {$ e8 w+ U7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。. |% b3 t1 ]4 |3 ]4 E
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。4 `2 h& p+ G7 C8 y, `% Z4 z
# m' B# H# V( ^% `( w
( ~1 [" E: E1 R% Y
i) @. V& ]8 }4 `( N& }
|
评分
-
查看全部评分
|