|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
: y2 E) ]7 c8 j2 j* R0 C+ p% N% y K" y P1 E
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
$ R; ?& Z/ V$ M; J) T效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 y) F0 i- ~# o& L
----------------------------------------$ d4 b0 P! W8 V6 J5 `) `
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。 Q' Q: v( f$ p
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 P" R5 C; r7 z% e* @; M) I----------------------------------------
) V7 f4 T: Y9 C, q: ?- F5 b0 ehttps://github.com/guillaumekln/faster-whisper* D7 }, J6 H" ?$ k$ S7 s
安装如下:0 }7 O" {& x- b% c3 D8 k) L
1, Windows 10
! |5 ~1 B: o& _7 r2, Python 3.10.11
6 ^3 u$ {4 U$ w; z' V& m; F2 K3, CUDA 12.1/ _. E* s# V, V" h! L( {, Q4 G
4, 在python 3 中安装- k$ L* T+ C" V W5 S* C: O% w
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
: Q1 i9 C G; @这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) j c9 y( P9 F, m. C5,pip install -U openai-whisper
& U' p- }0 N3 z* W这是向whisper 致敬,可以不装
5 U( i% u. n. ]/ a1 t P6,pip install faster-whisper5 }" K M+ x3 K: Y7 g+ Z9 _
----------------------------------------
; N/ T! c- g6 u& Nwhisper 我用的命令行,faster-whisper 我用的是python。3 ?* U/ b* c* P' S: P6 f
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 P0 R# c$ [# z" H$ x$ K. m
1 X+ E, e* @9 d----------------------------------------
$ v2 j' \+ i* S0 o: h4 h
3 Q" Z( Y- f2 s- ]from faster_whisper import WhisperModel
$ u, |' Q% w1 O. v' k2 u( \7 t4 p5 S& [) [1 Z& T
model_size = "small"
; P# M# b, Z6 ~1 `/ q
3 x7 d- n( H' ~% \" ^% h+ gmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
" ~/ m- L0 C, I& r! C ?. p4 ]' q0 f# i3 @& p
segments, info = model.transcribe(
3 u( Z+ @: @2 _7 z% c1 k% ` sourceFileName, ; U/ O. t: m' u2 M5 d# M
beam_size=5, - u. }# ~; o3 J
language="en", . R. M `* J" P
task="transcribe",
+ Z& c! E7 r7 D# H word_timestamps=True, 3 F1 k2 q" L1 f0 M; ]
initial_prompt = "Hello, welcome to my lecture.")
; _, c" `% ~ P4 ? X, G7 U: G+ F6 z2 z) b
for segment in segments:
C# Q. U( o2 J O" } print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))% _( l N# ?% ]) o+ Y
/ L* z1 W, h, S
for word in segment.words:
6 C$ L6 w N7 e/ N3 p6 I
; r0 o j2 h! d# k3 o6 u# M- k7 ^6 U9 e----------------------------------------
I6 {, |* O( Z: m9 }% s
1 [) H9 \6 G0 P代码说明:
2 {, ]# S) ?' K! ?" l1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。; v, l/ N1 ^9 C6 t# e
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
% \+ b# n' x' i- L6 o* P8 X2,segment 本身是很粗糙的,做字幕勉强能用。
* ?$ B/ g B! P# z' @ G2 _/ v; a3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( g4 e- S) f: q4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中 \ j) _+ z) J
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
& U/ g; i( e4 n. ^5 w! c& j5,model.transcribe 中参数说明:8 d! |2 U* O' m0 F; a8 y5 K X
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数8 @& L' y9 f' K3 W; W* J7 i# O
其中4 h5 h Q: L* I
word_timestamps=True,
7 l) Y6 b7 Y* O: t- G& u t! F保证了你能拿到 word,否则是拿不到的9 `# L; a/ ^" d3 }0 v& N8 L5 n
initial_prompt = "Hello, welcome to my lecture.")
# s- O+ w. L9 K4 j# t% Z: t* l, N保证能尽可能准确的断句 punctuation,但是不是决定性的。
* ~. R7 }) n2 I7 z4 e" W其他参数可参考源文件:
) O0 C' h- [2 O3 V$ Dhttps://github.com/guillaumekln/ ... isper/transcribe.py
2 p/ Q- w0 K/ O152 def transcribe(: n% c0 h' |* |; G8 [* _
从源文件你可以看到是支持中文的句号断句的。1 c6 ^; n7 Z6 D1 f2 @- g) ]. F
$ L2 W E3 \2 s' y. c6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。1 t) y- U$ `$ |1 |: n0 o% G
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 z6 P7 N& S0 D. Y
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
9 ~7 g& y* m/ o5 b( G% I
% P! g0 S$ d) W8 \1 q3 m 0 O T n' W" H: o3 J4 X" X
: D* X7 R" Z* E% } {; Q |
评分
-
查看全部评分
|