|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& g" n7 V0 N/ d9 A
, L, f$ q+ x* j借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。; \9 ]5 Z9 V3 A, S$ A8 H8 D
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。9 c+ G4 I `7 f
----------------------------------------
/ |2 M3 N. w+ f% m- `9 L显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。5 o/ ?: l. Y( P" l' U
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
8 s* I: a% ~" m# ]& k----------------------------------------6 w/ o. \. F, C2 e
https://github.com/guillaumekln/faster-whisper0 ~! k( @1 V' X
安装如下:
/ |/ {2 q! h& S% y' o1, Windows 10
5 C. M, J+ Q6 B$ b* X9 `6 b% t% t. Q( W2, Python 3.10.11 i* B9 u' S4 o; g/ O' }6 J
3, CUDA 12.1/ j: x& T' p0 N' k6 `1 E) Y" r! a
4, 在python 3 中安装( h" Q$ q% O" H3 i2 R6 B4 o
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) J0 i" Z4 L; U这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ ^: F1 @- ~2 w% g+ p
5,pip install -U openai-whisper- h K% w! e# R: j
这是向whisper 致敬,可以不装
4 E8 [$ T- F. b* d: x8 N5 \6,pip install faster-whisper- p7 P f& |. w6 s1 {
----------------------------------------
0 {9 e# ]6 P W' z+ }9 ?whisper 我用的命令行,faster-whisper 我用的是python。; l7 V( F& O8 y y( u& y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 z M1 L* j3 T0 W+ V$ `
2 i, U; a! d$ ~. h; K9 f. a4 h----------------------------------------
0 r5 F. t( L/ D6 N* N1 F+ Y2 R
) c+ ^" U0 u3 sfrom faster_whisper import WhisperModel
. m9 U( u7 [6 k5 ]7 e, E \8 h. I
* N; P5 k- s* B( U2 X pmodel_size = "small"5 z. f0 O+ Q8 x1 H; P$ ?* N
. C+ n3 F) N/ }model = WhisperModel(model_size, device="cuda", compute_type="int8")! s w( `$ s. w+ _) {, M
! T a: n$ m, w" U- w
segments, info = model.transcribe(# g( {1 ~! e( @5 j0 i4 i+ M1 D7 K
sourceFileName, 9 o4 H& _: T0 j! }. i& o
beam_size=5,
( Q! C4 o& _. p0 y language="en", # I% i2 v: o$ o$ \8 b" W2 i
task="transcribe", . a; ]3 G4 m( i6 I$ X) j
word_timestamps=True,
2 r8 }* @, g% n( ^ initial_prompt = "Hello, welcome to my lecture.")6 b- M3 s; o5 \! ?7 X
' n# ]/ k0 S2 m* _. V- s7 }! s7 [. D$ \for segment in segments:/ }7 X/ l0 b# P- s+ o- ]& R
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% F8 ^: X& {! v8 {, A! F
: r, I& o$ d( ]9 f1 N' N- ~, C4 I for word in segment.words:. e% J( Y$ T: y
; |% n4 U3 ~, p' g----------------------------------------& a2 q) H0 f" o1 o
2 z' V5 e8 m* f2 t# u7 e
代码说明:
0 t, u+ l% ~+ V0 K- ~% B7 ^. _. F1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
3 [7 ^8 K0 ^0 y# n但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。7 F: V+ m. t# T( Y' s3 C) j
2,segment 本身是很粗糙的,做字幕勉强能用。
8 {' D4 u. C0 x! u+ g5 F3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。; o# N, i7 V+ S1 G' p4 X4 w) Q
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中& Q0 ]% `# w2 Z# L5 E% u: t2 L9 }
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
" T# T. Y. [2 I) c% ~3 G5,model.transcribe 中参数说明:
& X% v" _/ f( W6 z你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
" X$ _% c1 j ]2 |" }3 @0 F6 ~其中
Z7 U3 j V4 i9 `2 ] word_timestamps=True, 6 t$ i2 h; N$ \
保证了你能拿到 word,否则是拿不到的
0 A6 I9 s) j+ ]1 i7 M2 K initial_prompt = "Hello, welcome to my lecture.")6 @5 d6 U: l% p* y8 r8 [, @
保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ I" z) O/ ]) n4 Z; n其他参数可参考源文件:+ ^! w' m& v5 [+ h7 ~" A X
https://github.com/guillaumekln/ ... isper/transcribe.py
1 O! F- u: K( ^2 s. f& m$ ?152 def transcribe(# R( {) d+ \( P$ j$ ~1 `, F0 ~0 m
从源文件你可以看到是支持中文的句号断句的。# B s# s1 Y5 W
# d6 I! D/ D. b
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。8 Q, ]% g* ^& z+ y, W% }
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。$ B0 c) `) \# l
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。 o% y7 q! Q* X+ W7 W* D: C
) E4 w. E9 f! p- v$ \" K$ O
6 d6 m' ^) z3 j, j8 a
* x1 u* _, f+ D4 p |
评分
-
查看全部评分
|