|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 |6 r- c4 L# i0 c/ O6 Y+ s' k* ]* r
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。# H( B9 k! L% y2 d4 }
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, d$ ~: S2 n' z: x0 g6 ?$ ^7 V: [----------------------------------------- ?) V* s* J1 H. H% Q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 H' r& c- _) o* H! `在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。. |( R+ ^: q0 k" U6 D Q) {
----------------------------------------
& F: x2 _0 Q% l$ l) ~https://github.com/guillaumekln/faster-whisper2 b" T9 I" X. G. d% H0 }; ^9 Q
安装如下:
" R; [1 C. R, i8 f9 d1, Windows 10
6 O! R2 A0 _4 V0 j2, Python 3.10.11
' _" i' [/ f+ [% H/ ]0 e$ k9 R3, CUDA 12.15 D# c F1 O1 I: W7 E# W
4, 在python 3 中安装4 x3 o5 P0 m2 y& |% a; H
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 \0 _/ P: O" B& e9 r- M6 y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。1 K$ E! I1 p% ?' z# C, I
5,pip install -U openai-whisper7 }( J/ s! v3 q4 t a; x
这是向whisper 致敬,可以不装
# q5 I% N1 Q) _5 L9 C* n, U6,pip install faster-whisper! h# V( W/ Y1 I; ]" L7 _7 c5 t
----------------------------------------
, S) t1 }5 O0 f- t, |whisper 我用的命令行,faster-whisper 我用的是python。! z1 B6 J: o* u3 x4 D
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' f* J+ [2 h" D0 O* r6 D' l' i) W) S2 W9 g- @7 s3 r: e- K4 V
----------------------------------------
( @3 N# w8 I- G: S! K4 d' D+ V7 ]4 }4 T$ e
from faster_whisper import WhisperModel4 \8 y" F% Q1 b, t& x
0 Y1 {+ c% }: @5 X+ c* Dmodel_size = "small"7 Y+ t6 W* K3 g
/ W. V/ y5 e! O3 ?& s
model = WhisperModel(model_size, device="cuda", compute_type="int8")
! V M1 e7 M( A# Y
+ ]& V |$ P& d' G# a- a6 R: k* Fsegments, info = model.transcribe(
4 e/ }/ P3 G0 X5 R7 K3 p sourceFileName, 2 A# x# o$ i6 \% X( V
beam_size=5,
0 Z1 W9 d" W2 i# i& k language="en", ; z7 e: W# j8 Y" o5 S$ K F% i
task="transcribe", 5 Y9 i. q! L" x
word_timestamps=True, ; |: j0 y+ ] p& Q- k* h2 \
initial_prompt = "Hello, welcome to my lecture.")
- W5 z' R: ]% O% v( t' ~0 {) U$ J5 u( i( d) K* ]* l
for segment in segments:: O' H$ x3 Y0 J, i/ E' J% V
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))7 E, ~ j! e6 R
0 H" Z2 i8 g9 x- a for word in segment.words:# y! u3 D$ M% F6 s
# T, A+ F! U1 O. P+ R----------------------------------------
e. s3 D5 S3 ^! @
# }! b2 Z5 E2 \. ]2 C代码说明:8 G4 M! G" u; J( q
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; D Z' L! S. d, C但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。4 V3 b) y3 s2 T4 l0 b$ [
2,segment 本身是很粗糙的,做字幕勉强能用。9 g; t! ~9 R) ]0 x% V! V
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 S+ `9 A$ ?4 [7 h" s8 X- f
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 ] C3 p% G2 P$ |7 E
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
2 y6 n8 T, H+ G2 i: T% J; ~9 K5,model.transcribe 中参数说明:- D8 t3 w, p' x9 x& v
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数5 q0 \! t. y! h$ y. I- ^ \5 Q
其中5 s# J/ e' u7 A" A7 L" O
word_timestamps=True, L [( ]" E8 V7 v$ r1 g
保证了你能拿到 word,否则是拿不到的3 u5 k& H4 `3 ?6 X
initial_prompt = "Hello, welcome to my lecture.")( K7 @' B2 r9 r. Y6 _
保证能尽可能准确的断句 punctuation,但是不是决定性的。
& S8 K* L& s/ d% z% K. U( G* I' K其他参数可参考源文件:2 m3 F3 b1 q# T* _( Z$ ] u
https://github.com/guillaumekln/ ... isper/transcribe.py
; `- A) w1 }7 _- D152 def transcribe(2 V8 }) a( n, v% V9 T/ i+ P
从源文件你可以看到是支持中文的句号断句的。1 x: K# w- _8 g) Z A0 n* D
! K* k2 o$ |! u" [6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
k" a! \" T' Q9 ^+ E0 \; L5 A7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 }. W9 o0 {, L; @$ {5 B" s% ?8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
" Y# |, B/ c1 Y/ H z5 d8 D) Y' [4 j O. ~* g
7 S' z# L2 K c1 r
4 X. ?1 H, N; Z6 E4 J8 V- e! c
|
评分
-
查看全部评分
|