|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
. d. _. E$ i6 ^1 j. _& i$ D6 W0 ?! c. }* D9 ]% r
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& m* y* R! q6 }* Q2 E! H效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( P, h& f) j3 z s
----------------------------------------6 Q' ]# a# }7 X! A: e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
& P! M4 e7 y( W. p+ ]! e6 I在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
9 X. M$ _. a0 n! s( o----------------------------------------
+ ^6 g; f* s8 x7 X8 x5 m' B, thttps://github.com/guillaumekln/faster-whisper! b- o0 H8 z0 Y) T& |1 ?! C2 l
安装如下:6 g! Y" Y& f4 g
1, Windows 10
" h: [7 D1 b) w6 S: ?" W, t4 M2, Python 3.10.111 d% N: _& G1 U# `9 ^! _) X! }
3, CUDA 12.1
V i8 f6 e% {7 F4, 在python 3 中安装+ V- }0 M# n& J
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117' ~) F0 s# z# Y9 b# e4 ^* Z
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。2 N* ~: ?5 y: }' b0 @ v
5,pip install -U openai-whisper9 }1 C, U7 |( o+ ~5 a0 i' R$ {& v
这是向whisper 致敬,可以不装
: c4 o, s# U5 K# e0 M* |6,pip install faster-whisper- P2 o% Z8 j+ ]0 w
----------------------------------------
7 h$ {3 z- ]( T' w. G; j: C) xwhisper 我用的命令行,faster-whisper 我用的是python。
& T# g @% n h9 b下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:4 L( r, L8 Q$ J2 z: a
# N# G0 W, ^2 N# e& N+ C! g----------------------------------------/ _5 M, E6 }# ]$ f: |6 c
* v- N: P: |1 N3 R! q# {" @* Tfrom faster_whisper import WhisperModel
9 y _( h3 o: { t0 x3 @0 I3 b
5 X! V% `+ ^# W1 ?3 A% ^ Vmodel_size = "small"
% u0 R- w4 W X- \! S, j2 {% W, X" A1 T# T; F
model = WhisperModel(model_size, device="cuda", compute_type="int8")
1 J* s# E% [4 L, l. h3 Z+ O7 p# R4 n0 J( c6 U6 B6 z
segments, info = model.transcribe(
7 y0 g2 X) o! L sourceFileName,
( s, W& v" P; ?% n- l2 n beam_size=5, ) l/ p8 ?' p# }. F; M4 J2 f
language="en",
. x9 v8 C7 ^% X( ?4 B task="transcribe",
$ `& L- p6 E: ^7 w/ H5 L4 w word_timestamps=True,
' m* E0 U8 ?+ F. z; c initial_prompt = "Hello, welcome to my lecture.")
' a, l2 A( a/ w/ G% U7 v
3 i5 W! B+ R T: Y7 l# l+ X0 Zfor segment in segments:& \7 m# m8 V9 O z9 F& O
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
* |3 G+ U ]( G+ P7 c/ D( M0 {& G( U# w8 @
for word in segment.words:; w) L3 }) O% h# H
- a5 B. e, n# n1 y/ C, H% a) `/ `
----------------------------------------0 K. Z0 \' ^6 u8 _& g' V% \7 X
" D8 W. M9 C. v' p0 g7 W代码说明:
. B* N+ S, t4 R; Z1 Z) Y3 [& S1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。$ Y6 b$ S2 w! b
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。2 a) R0 v& }( T3 K3 F; q+ j
2,segment 本身是很粗糙的,做字幕勉强能用。
; }" H* ~' u; F% T- u; k8 z, H/ h3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 g' _& W9 [! U$ f( g% i! U4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中/ K5 a1 s8 r! I; F7 `2 g
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
7 r6 W' W$ \. g2 _' u4 d, r5,model.transcribe 中参数说明:& r. m4 ], M5 y; G k
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
+ p m X7 T& a5 Y其中( C4 p6 s1 N* f
word_timestamps=True,
9 h) e" W9 `# m4 w- j. r" l3 @7 w$ \保证了你能拿到 word,否则是拿不到的2 n) t, G7 x1 Q1 q6 j3 g) Y! E
initial_prompt = "Hello, welcome to my lecture.")2 N6 d( s# k( _! ]5 ~! {
保证能尽可能准确的断句 punctuation,但是不是决定性的。/ Y* G6 W t, q
其他参数可参考源文件:
! e4 W* a( [' v0 _4 k& ehttps://github.com/guillaumekln/ ... isper/transcribe.py. s$ y9 Z+ R" x, S4 U
152 def transcribe(- n- a: y) g3 l+ ~: Y2 ^& L
从源文件你可以看到是支持中文的句号断句的。
; h% {; \6 L% B! W2 X6 e( K+ [3 P+ v1 T/ d; H3 i, ] Y6 }& J8 R
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。4 [: u& I5 C/ `+ H
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
+ G- n8 ^* R. I [9 u, C' n8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
' u v( X2 L6 x( ^3 d# V; d" w8 |
3 Y8 z; [; a) j6 U/ k; p. H, m7 A
, _+ U$ Y2 u/ P6 f" O( T9 Q |
评分
-
查看全部评分
|