|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ( F* G [) e" ]% Z/ o# _: I2 B
3 t+ y: L H1 p0 R1 x- ?
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。 ~9 H9 u- E6 I' O7 l
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
% O9 n+ x2 b+ K" w----------------------------------------
+ S2 ^9 t' x4 _, O1 ^+ A. k4 J8 E显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。; {9 o* y* r5 d3 {& ?8 C
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。8 C* F' w4 G& [+ l+ P
----------------------------------------) q5 h& g6 ~% f
https://github.com/guillaumekln/faster-whisper
* y' ]9 K. R0 O& w) C安装如下:
. L; b. i" e! H, R' n4 J) \7 g2 B1, Windows 100 {+ Q& T0 O6 w: p' Q5 {! h1 l9 d
2, Python 3.10.11
3 i" X7 k% Y% k: @9 L3, CUDA 12.1" }8 z3 u* S3 I
4, 在python 3 中安装
# s5 V* {% l3 ^pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 q1 w" D0 d6 w) A7 [5 n$ n2 z
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 l/ n. q8 P# t0 n3 P# T9 s! R5,pip install -U openai-whisper5 F5 K+ B: l/ [) i. D L9 p
这是向whisper 致敬,可以不装8 J6 z* ?$ n8 w# H" w
6,pip install faster-whisper" {$ c% ^# c8 x% L4 H! g- W
----------------------------------------6 d4 W# F% c: J6 e
whisper 我用的命令行,faster-whisper 我用的是python。% Z Q7 U/ k( ^2 B- W
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
6 \# z9 }, Q4 s, ?
$ ^1 r# a, S0 v, g----------------------------------------1 q5 ~; T; `' Y! j
. H( k. X1 K% k; k8 Afrom faster_whisper import WhisperModel! h7 q9 S: ~: X+ c& r# _* E; ]6 U
" ^3 r) N& C8 G# }4 D* o
model_size = "small"# }3 u2 w$ F4 _& p+ S/ j8 U
* v& p0 a* T6 ?; F5 e) qmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
% Y8 g2 W, s8 Z% `
9 t4 M* {/ L( h" P0 g" N5 Ksegments, info = model.transcribe(, x# Q, K0 V. s. c9 q( K
sourceFileName, 0 r1 U. q$ o! K+ n! j0 f" o
beam_size=5,
) e# L( o/ I( [% J language="en",
( F9 M' h: ~7 H5 {% ?" C C9 p task="transcribe",
4 E/ [2 g5 Z: H, f, b. n" X* n3 _: Q word_timestamps=True,
; D1 K1 H) [3 M8 }# y8 I3 a initial_prompt = "Hello, welcome to my lecture.")( b, t9 I% c, _' L; L1 \. c
1 a( [ P" ~2 B5 @( c$ jfor segment in segments:3 N8 J1 \6 ]5 O; F& @. W7 p$ F
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" {) c8 a8 U- j) U$ R! b
" X+ p* x: \# z for word in segment.words:
: `3 f B G5 B - d( a# ]9 O7 [
----------------------------------------* U( m F8 m7 W- }. w5 z- v
0 }/ c5 U o2 R0 f; N代码说明:4 g# y) G; E2 z, f% a8 s
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
9 F; \6 S) R( o( ~' @5 T但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
+ m4 s7 {4 G& H/ c2,segment 本身是很粗糙的,做字幕勉强能用。
+ |% ]1 [% d! }# y* x4 q8 f3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ s5 c# |7 @7 V# i9 c4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
9 R# ], o& D. T& Q- B6 Q! l t2 r比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。) y, L! j0 h! \
5,model.transcribe 中参数说明:
! R- f% t' T- Q! Y你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数 m! X2 m, W( {7 v
其中
% j" W. s- d2 A. p- v0 a! ` word_timestamps=True,
; u2 o! j1 V, F) N保证了你能拿到 word,否则是拿不到的
* A# F* Q2 B# H initial_prompt = "Hello, welcome to my lecture.")9 [( O W2 l, Z# }- P' V; |
保证能尽可能准确的断句 punctuation,但是不是决定性的。
* R5 [ l. A4 l) z+ T# v' X" y) s& Q5 e其他参数可参考源文件:! A X1 t' N2 D
https://github.com/guillaumekln/ ... isper/transcribe.py
; ^. E* K1 F. v# a. D; b8 K152 def transcribe( @7 k' m3 \5 T
从源文件你可以看到是支持中文的句号断句的。
& I) q+ E3 p, u5 U% `6 p; d! ~! y) [ }1 I# b
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" t# K7 `9 O" ]) v5 u7 ]' o7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
) m. b% v* f2 s8 i7 n: A8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
5 P8 i3 M8 C/ X+ S! z
! J$ h; F# u) ?: K6 f+ e: A 0 Y! L5 a9 C$ K) f+ G" H j) Z% H. B
2 k7 u) g# v/ m- L; m4 t+ O" n' {
|
评分
-
查看全部评分
|