|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; c; L1 A3 d, `! X9 E- e0 Z" M" \' \7 M! m
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
F9 k( c1 P9 P! L% ?效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
: k& O) L0 Q! a( X, a----------------------------------------
4 N" z6 ~2 i" r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
, G2 \$ K7 z* e+ f在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。' `. T0 ]; D( Q: ^$ M8 B
----------------------------------------
) G. V, c8 \5 `- C" mhttps://github.com/guillaumekln/faster-whisper
! n `2 A# l/ A8 B! t3 |: i- D安装如下:: [* w) M- i& I. H7 S. k
1, Windows 10
- p4 {! l6 p) L+ t5 W! J2, Python 3.10.11
8 }' y8 B$ q% U- ]1 g3, CUDA 12.1
& A7 m0 J2 k0 }# {4, 在python 3 中安装
6 l2 C+ W, i; p! ypip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
D1 P/ D! p7 U, J这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。( x' d3 s- Y5 ^9 M! e& T9 M0 c
5,pip install -U openai-whisper
: o( z! R, c3 X7 R这是向whisper 致敬,可以不装
: z, r! q; M; ~& V/ `6,pip install faster-whisper, h6 x4 T( v0 u9 G6 e5 r* K4 Y" l4 H
----------------------------------------
' k! r6 L6 O/ {6 Pwhisper 我用的命令行,faster-whisper 我用的是python。, L: O* E* P5 i% {1 ~! i1 f
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# k4 a) R/ { T
5 G1 @+ h" M0 p, i. q6 \: x----------------------------------------/ G* h/ I6 H) e
1 O" A; g8 S, N4 kfrom faster_whisper import WhisperModel
) F6 F6 I* g& S, X6 D2 O
' P7 |, p+ s! L7 O; {% l. Fmodel_size = "small"* U/ d" j( V0 S& n: I! Q2 L9 ~& P
& M- ]) d* Q+ M0 Jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
1 b, N% P( m% [+ l, D) k4 Z0 u& i: s5 W" V0 K5 ]- i
segments, info = model.transcribe(7 f9 Z3 }! _/ y/ \/ P: F
sourceFileName, 3 C( }# h! z, D% @8 a4 m
beam_size=5,
8 H4 n* M$ @9 G: v) I language="en", " x6 D. r3 d! ]1 F
task="transcribe",
0 e* O6 Z( \2 i/ H+ t word_timestamps=True,
! G; V+ b0 [: y8 w initial_prompt = "Hello, welcome to my lecture.")
: P, j+ j$ q7 Y! @ O% o3 Q' k( @0 q
for segment in segments:
3 Y9 D# c; J( r9 E$ q- R, S print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))8 X7 p, U5 Y+ T
+ Q1 l, N i8 H for word in segment.words:
( `3 _% C8 f6 c1 w _/ O8 q0 L7 y9 U
* p% T" c4 C+ h7 b; |7 Q----------------------------------------% D6 t: x; C) i2 J- ~% d
* N+ ?: f7 S; M/ `/ L3 @9 U' P: f代码说明:
/ H3 g0 O. n! `2 X" P1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
m/ U7 e1 Z# ?" f9 m& `但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
e: ~3 O9 ]( K% R3 B: P$ D2,segment 本身是很粗糙的,做字幕勉强能用。
9 }+ y* E3 a# V" e, ~; A3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。5 a* O5 r# j. Q9 {4 i
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
( u$ o* N# l' |( y比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% t$ f* [. d2 P5,model.transcribe 中参数说明:
, u9 O# L1 r$ u) ~9 c$ g* B你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数) f0 c' t/ D, q5 h9 q# R1 _" P5 {" [9 t
其中2 ^' F( B; c, j1 m5 t: x
word_timestamps=True,
" y1 i/ Y+ P' d5 x8 f$ Q/ V保证了你能拿到 word,否则是拿不到的, N6 F) U# z, p/ I4 t& Z! W
initial_prompt = "Hello, welcome to my lecture.")4 n5 w! D0 e) M
保证能尽可能准确的断句 punctuation,但是不是决定性的。4 E2 H3 Y) L" ^# Y( C
其他参数可参考源文件:$ L. F& I# t7 D `4 A
https://github.com/guillaumekln/ ... isper/transcribe.py
: O. W) v+ J" v7 \" U! Q9 r152 def transcribe(. J7 x. v% b1 ~' f8 }
从源文件你可以看到是支持中文的句号断句的。
! L7 g* T4 C R- W' w. Y% ~/ _$ t+ {
" n5 E- s" t5 A2 D) E2 l4 E0 B6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
2 c& F& k: w+ D0 |* m: L) m" G7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。' @; y! `# V. Z H6 n) M
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。& A) j8 \$ t4 S0 A( K2 Y
$ G4 q0 K* @# N; S, l" Z
) t) o: q2 N8 t m$ u) n3 w! @ T: [* B0 R% H: p# e+ ?
|
评分
-
查看全部评分
|