|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
: \2 T4 F) p6 t C! h2 D( w
1 V# B- S/ ^4 j1 L借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。! ]$ H. `( ]7 x: v$ C# {$ T x
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; ?0 O) v" h* U: h- V6 y----------------------------------------
7 j7 o, {- ~2 f# E6 [9 e! k, k显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
2 I/ V! U6 l7 C5 x- p: @, {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: u6 c* p9 P- i" E5 [1 t3 p----------------------------------------
2 U8 u8 _, u: E2 |$ p; C! Y! Ohttps://github.com/guillaumekln/faster-whisper
5 n6 @5 E# Z& c9 H) b安装如下:
# O4 G2 I& O- m, u6 C! a1, Windows 104 l" a5 {; K4 l, W+ `
2, Python 3.10.11
# b: K1 y' i, H f3, CUDA 12.1 J" G+ F+ V9 B" V" H4 o P- E% w
4, 在python 3 中安装& _5 p" t) k) O' H; Q
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
! S: p u0 O( N2 h5 Y8 o这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 |9 G$ ~' Q0 }# H5,pip install -U openai-whisper
/ Q2 E" D# v/ z这是向whisper 致敬,可以不装- a) Y% H$ {! G( B' e- i6 G
6,pip install faster-whisper
& ~" W8 K, z0 u9 b- W% A) Q----------------------------------------
. q1 K. t1 Z1 k' z! o% w6 Y' uwhisper 我用的命令行,faster-whisper 我用的是python。 ]9 a; `2 L# O$ Q( K: V% t
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:1 ~/ `1 n9 G8 [5 z' v* v+ A0 D
! q8 U) c( ^6 E# E
----------------------------------------
' D& f' \ D' v; a; |8 C- }
* S( K# s8 V* v5 x' ^* a1 G* Jfrom faster_whisper import WhisperModel
4 E: x5 X. s* a3 u) G7 Q$ L' S. d
1 ^; J& q$ V0 }model_size = "small"7 m* q/ p7 [! j2 k/ L
" H) {# g) P) }7 y Pmodel = WhisperModel(model_size, device="cuda", compute_type="int8")9 |% p: X1 d1 D" K2 Q8 J
3 y! C+ e; m7 g0 j7 I3 Dsegments, info = model.transcribe(# A+ f+ n: D f$ ?1 C! y
sourceFileName,
3 X9 M/ h6 ]( h! I8 J6 A' [ beam_size=5, 0 }) e7 ?$ A* {5 ], K1 Y
language="en", % k/ v8 |& ^# f) D1 k& \
task="transcribe",
6 P6 L& n' E6 w$ m4 L4 L word_timestamps=True,
, M7 w# l( f3 X+ p3 m c initial_prompt = "Hello, welcome to my lecture.")/ } t) n" q8 ?" n
, b; H8 q) P) q& R7 T. Sfor segment in segments:4 D5 Q: I% c/ j% P9 U
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
3 D; ~' X2 V. O8 H) G$ l* k0 y; q) @% n e' r$ L0 V
for word in segment.words:9 O" C0 A9 U4 v R1 H8 J8 c5 `
5 ~, Y5 Q" Z/ }: l" s) [; n9 G1 ^----------------------------------------9 q2 e& M! c5 D, f0 W8 L
6 L3 c% Z6 W8 r3 o2 T" J3 e代码说明:) W6 a% m, a! H3 b; b, S
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 N F" ]9 b8 F7 k @( g7 W" O' R
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
2 H7 Y& L' H3 W& T }' W2,segment 本身是很粗糙的,做字幕勉强能用。
. b7 Q' J4 x( a% F3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
7 f: T5 [* p$ ^8 b# r) U' t% R$ C! ^4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 E- h5 i& j, f) Z
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 W$ A0 k0 P, e4 T; \% a6 E
5,model.transcribe 中参数说明:
) V% u+ n! N4 b6 s你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" w3 x" S6 c' X) A1 Y
其中
# e: e% D) [* X/ J- ? word_timestamps=True, ' e' `4 \+ ] g. g% ~% O
保证了你能拿到 word,否则是拿不到的: \! K, k8 q( l
initial_prompt = "Hello, welcome to my lecture.")3 p. J& C: @% Z- @. f1 |; H
保证能尽可能准确的断句 punctuation,但是不是决定性的。$ z/ V9 \0 N# T$ t
其他参数可参考源文件:
, c" q" _4 A# |6 ?! s' ahttps://github.com/guillaumekln/ ... isper/transcribe.py
" z5 I; @. ~. b9 w152 def transcribe(, ~2 e" ~) z5 m6 }+ t% [% |
从源文件你可以看到是支持中文的句号断句的。
" R1 ~$ E1 ]/ f0 ^( e/ M* `, Y5 y2 u/ v5 G: n& }3 N
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。$ r" C* }8 m9 [4 ^: z
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
! [: m3 E6 s1 f& j4 z4 f4 w8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
a( M# ^% I2 }1 \2 a
3 g) I. V' w) U) S' E- t# C, S 2 u$ I% p, b d* T0 @4 W
3 C3 j& e% c/ Z7 C p |
评分
-
查看全部评分
|