|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ) V2 h1 e% O \- J+ `
' ]+ G6 x% k- [6 ]$ |+ B9 F& X2 ?% ^借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。, a0 ^1 `& l# e) G# |7 ^. k8 ?
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。" g; [' S9 r; U% G+ K8 V' a* b9 v
----------------------------------------
5 ]; T( R7 s& t6 @显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( D& Q6 n; f( v" v( |+ j在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ y! ^, p1 s8 y8 v: @4 I z----------------------------------------
# L( ?8 n8 b; d0 P+ B/ W3 Thttps://github.com/guillaumekln/faster-whisper8 @1 m' n) ^, {5 {. c
安装如下:
3 R4 }8 F" ~' I _1, Windows 108 w( m# D( N3 [2 t
2, Python 3.10.11+ ]/ d0 U, h6 R2 ^. y5 e% h0 t
3, CUDA 12.1
- @8 a) j' s ?2 Z9 f. [/ A4, 在python 3 中安装! V8 G& ~ R! N) g
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117- J. c2 n `/ O
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
6 u+ }! M$ M4 E1 P5,pip install -U openai-whisper
2 t( b1 Y9 A* N* u. q# o$ c, G这是向whisper 致敬,可以不装 _- e, J4 q7 m8 o3 v$ y
6,pip install faster-whisper
3 M- C7 n/ `6 X/ o% Y- L7 b----------------------------------------
8 @9 f- q! }' S$ b$ t/ _whisper 我用的命令行,faster-whisper 我用的是python。
1 A: A4 U' @& Q$ }下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:+ m$ M4 N f. e/ F: w1 ?2 d+ Z
* o% t* j/ f0 B+ I' z9 z+ c
----------------------------------------+ `/ Z/ |, }! u7 J! [
+ [; ~$ ? a2 m4 e! zfrom faster_whisper import WhisperModel
" i/ V: A6 x2 f, c% t5 y7 O6 I6 {! o' K% |* U
model_size = "small"5 U3 J" c- @7 m6 O& f- I2 \+ n9 ?
' C2 s# x( R/ @, o/ T, _) a! Dmodel = WhisperModel(model_size, device="cuda", compute_type="int8")9 q' ^) ?& |- Q+ z
* c' l. Z4 h5 d: a, M
segments, info = model.transcribe(
9 I7 K+ G# d+ F9 I2 F sourceFileName,
) G& y1 V$ |$ W# g beam_size=5, * F, m# Q4 a Z4 c3 C$ ]. L! R1 O
language="en", 4 T1 F4 X6 _! |) h
task="transcribe",
" Z. c& j( z0 N/ W* L word_timestamps=True,
6 ~0 C P! @' s3 }# ?! ] initial_prompt = "Hello, welcome to my lecture.")
3 z- ~/ t! M O. t, _: H; t0 G0 E
+ W! l8 L+ N2 ?for segment in segments:. U1 f; v" i d- |
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))2 s# O" ~+ w$ Z0 i% |& X* s
' D$ d. w: {' f) g: y6 P+ H
for word in segment.words:' |* _- c. o) h) _* t! M# k
?" f5 q4 r* N8 p3 X. A----------------------------------------- L, _9 I! D( w- K o! v! ]
6 Y" m$ M6 G1 w/ A. B
代码说明:
& @9 L% }) K r5 z1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。' p4 p5 r8 f x, K4 p2 K# t/ P% L
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! A: Y$ p$ c& I
2,segment 本身是很粗糙的,做字幕勉强能用。
' j% M4 T1 y! {' \3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。( `; C. J: E2 s# m1 m9 G) b
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
* u) U; ~. J) Y比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
) i, m$ e4 _- N5,model.transcribe 中参数说明:
8 O5 l a( A" y你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" ]0 f. a7 d3 I2 y- y$ F! F
其中
( J* a3 d" i7 A! T word_timestamps=True, ; Q# @4 l0 G/ {% s; A c
保证了你能拿到 word,否则是拿不到的* h4 Q8 X. W _3 e8 V
initial_prompt = "Hello, welcome to my lecture.")" Q, c1 f' _+ a3 E
保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 l+ t$ ]9 Q' s5 G! ?: {其他参数可参考源文件:
6 Z4 R2 {+ t" m. W7 ?3 thttps://github.com/guillaumekln/ ... isper/transcribe.py/ F6 l6 K' X. D8 [6 ^! c
152 def transcribe(- \/ U) H9 o5 Q* {3 l1 J- ]
从源文件你可以看到是支持中文的句号断句的。1 Y, P* M. C3 k
; x [1 t. I. X/ O' {, c6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* F% i( W7 K, f7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 i8 E# _5 [8 p4 C( e* d* y
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
/ i8 u9 c# m' r H$ O+ h. T8 b& V, `% A, p- N' a& Q
/ ^+ I8 @0 ^ d& `. `: F3 p
5 {4 U) K V* m! A0 Q7 k9 k |
评分
-
查看全部评分
|