|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 6 t, `/ v* R# E8 N" z, g9 V
, J1 H+ ^ I) ^# h1 |2 g
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: P: j% N" g& s! w# g [效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。& N# b- i2 ~! d. n0 a3 F; V9 N
----------------------------------------
}$ J' {! `. V% W4 k- n显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。, Y: r( g; U+ i. i' ~
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
3 N" \+ c/ R, Q9 s8 `7 H----------------------------------------
* [9 I8 C0 E! d- E( v3 Lhttps://github.com/guillaumekln/faster-whisper9 z: [! K/ }6 W& C' `% E$ M/ y0 q
安装如下:
E5 i( a! s! ]. [: w" E1, Windows 10. k! Y0 _3 O. u9 q% Y5 D
2, Python 3.10.11( n; z2 _8 u* r8 p0 B% [. N) N
3, CUDA 12.1
" Z& H' n- u7 a! X% M( W% l4, 在python 3 中安装
: s# I" C r* X: w. ~+ A# O. npip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117) x6 y- a- F _+ Q! R8 D
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 j$ E" q0 h0 s+ A' a2 m4 G
5,pip install -U openai-whisper
5 H% i! o8 S; F, h; f- i: B这是向whisper 致敬,可以不装) D4 B4 w" C8 j, U6 U
6,pip install faster-whisper K) G4 F0 k; `$ K
----------------------------------------
* V. \2 {( \6 m" Hwhisper 我用的命令行,faster-whisper 我用的是python。8 h3 g- Y. w$ S8 j- _5 N" y5 v
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:% I1 P4 h3 i5 `4 l5 X( ]
, k' [' o; e8 L8 u6 d# Y5 z
----------------------------------------
4 \5 b. e3 f+ B4 ~! c: \8 o' S% B" y( Q! t8 h
from faster_whisper import WhisperModel
0 i4 o. x& l& T- M- G6 J. S9 H0 a; j; z7 t8 _$ \, Z5 Q
model_size = "small"
: A: M* Q S5 [' F$ w
1 X8 w; H5 A4 g. L& Y2 \( ^9 Jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")% b3 K- L3 u7 ^8 v
* @- _2 J* G2 h' K$ L' U
segments, info = model.transcribe(, t- z% Y# B3 A
sourceFileName, , }/ b$ r8 V& \, s @6 G. c( H2 s
beam_size=5,
# e Y- F" d% G language="en", * F1 ]1 v3 q8 j4 A4 l6 k b
task="transcribe", ; d. |( z- s( e" H3 @' }2 j- r
word_timestamps=True,
+ @9 _6 o* u. D5 v/ R& A* J7 @ initial_prompt = "Hello, welcome to my lecture.")
5 M! Q# B$ L& x! Z @! v
4 |6 q. r( Q# Q, x9 H; ?for segment in segments:4 ^; p5 @2 C! v( m0 u
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
; \0 x F6 |% k& L( Z+ E; e8 A& ]% W- z; B# x4 y" b" a# G( ?
for word in segment.words:
& E2 X, B% f7 Z7 h) S
" T7 B/ y# a9 F: n5 R- U( T----------------------------------------
' Y- z# ?# l, F$ e( \$ x
6 T- n. m1 T9 i; f2 Q1 v D- Q5 @3 G代码说明:
% r0 O) \6 [" ]% q5 n3 T4 A0 W1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
4 l) g1 C8 ~9 _9 ?: b1 Z但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 j; j5 P3 o( s ~ M. e! v) ~2,segment 本身是很粗糙的,做字幕勉强能用。* E2 B+ a# i) Q) i: a0 ^; ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。" p2 ]* g2 C; I2 R5 v: |) Q" ?- {
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
4 k Y3 ?' S$ W2 v比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
/ I& i% _( w9 L9 j3 Q5,model.transcribe 中参数说明:
7 W$ u7 g$ \7 b* x8 C, s5 Y; V你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
: [7 k& r& ?, I其中/ o' R7 u* h2 L" z$ k4 Z
word_timestamps=True, " |) T; f' V0 q' P; N
保证了你能拿到 word,否则是拿不到的
6 }" ^( b4 l D6 q" t) d initial_prompt = "Hello, welcome to my lecture.")2 X4 F/ |9 K0 N" v/ ^
保证能尽可能准确的断句 punctuation,但是不是决定性的。2 p* A+ w% r) E7 z: t
其他参数可参考源文件:
6 S7 [) Z" o+ E# g# r2 T( ihttps://github.com/guillaumekln/ ... isper/transcribe.py; W) ^5 w% ^" D0 {$ |- J$ c
152 def transcribe(0 \. X, R3 E7 P
从源文件你可以看到是支持中文的句号断句的。
% K5 [# Z. [- l/ g' ?* F0 ~( E2 m/ w. x. o( g& G. t0 T5 {& c; F
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- X8 j8 G* t! Y: k$ ]. [7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
" _4 s; O8 y& i8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。7 P! j) G* u9 M' i
9 }, W. x y9 r
; U! w* i4 c! ]) v* N
$ J$ F3 r6 q% I+ c |
评分
-
查看全部评分
|