|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * {1 T2 A8 T9 }/ r7 L/ ^
# U) Q, i; g1 z" o, `7 Q
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
" |& Q/ D% y* `5 ^/ y+ K效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。# B; H' \# p# b' E+ i
----------------------------------------
4 h% x# f) H% S& b1 y5 g显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 _) d5 t u2 T3 Z- i4 c
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
8 R% G; a! P# a( c! E6 M8 @----------------------------------------
) s- E, b( O, C" {+ `/ n- thttps://github.com/guillaumekln/faster-whisper
, d: R1 G' `$ L5 Y# E安装如下:
; R j2 K b- h. f( v' i1, Windows 109 ^8 }# x5 E* h% x' ~/ e% |7 B
2, Python 3.10.116 K3 c8 H# Q- Y" @
3, CUDA 12.1
[0 C+ [ J2 P8 E7 _' `2 H7 z j# p4, 在python 3 中安装
) `* r( U4 u# i/ O$ E! A# Apip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
% j1 j$ m9 W0 S: P/ |这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
6 O% Q. y9 |3 J9 ^. O+ p5 m; k5,pip install -U openai-whisper. `7 k8 ~7 k; s; H. U$ M
这是向whisper 致敬,可以不装! e1 _+ F9 Y3 o! |2 t$ y% }9 `2 T
6,pip install faster-whisper
9 {: j' e% ^4 N- w6 {, k; y$ r8 q----------------------------------------5 T' G! l$ g8 ^4 t, F
whisper 我用的命令行,faster-whisper 我用的是python。- G- t( L9 }4 A; O& @* p& y& s) r3 x7 U
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 m9 `* O; m( \8 `1 d) U
% [! i* }. u, d2 ~" e# w----------------------------------------: Y) e9 h _4 g# n! k
) R u3 K5 O# Z) N' B$ G2 p. z4 Efrom faster_whisper import WhisperModel5 {/ @9 W( B, W$ N
+ k7 l' @' w* e# r* kmodel_size = "small"
# G2 t8 t9 A% X4 d; }/ M% X3 K8 Y/ K. j: j
model = WhisperModel(model_size, device="cuda", compute_type="int8")
. Y" n9 K8 O% D
- i7 U v; I* d/ Y$ v; vsegments, info = model.transcribe() g- n' S5 x+ ^) u
sourceFileName, 0 ~" j4 ]. p; N" z( m* V
beam_size=5,
0 M6 Y( x# W1 t7 t. m( J language="en",
% o- t' l' L# S9 F" l2 K task="transcribe", 4 g% y) |( P' G# }1 C
word_timestamps=True, ) E& N6 s) T$ ]" t7 M& x
initial_prompt = "Hello, welcome to my lecture.")
5 a* F( R* H- ?% A f) R
( N% o( z+ \$ e2 [for segment in segments:
% _: E" ~! ]% n print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% [% b% n& X p6 r$ }6 t
9 }6 X7 B/ [- t9 N L, Z0 ? for word in segment.words:5 ?; z& Z, Z1 j4 m1 X
0 U- A4 L/ b0 u, e# S! \----------------------------------------
9 e/ T+ O5 u0 @4 L% \2 J0 _: u ^! O. {! K3 u
代码说明:
5 f! S0 q' V& S+ `) g1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% a9 P, I; u# z& K
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。0 ]8 x+ [- v$ r0 p2 e
2,segment 本身是很粗糙的,做字幕勉强能用。
% d" p4 p: E/ }3 v$ _& [8 \3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
, J5 w( K& U# }) t4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中6 E3 T9 k7 J8 z) h
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
4 }9 e) W3 V7 V+ I) X* a9 u, T1 I2 W5,model.transcribe 中参数说明:9 O% ^+ P6 Y& f3 ]: U. o6 U
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 }6 A; X& ` L9 E1 T' Y其中 L0 e5 @7 N+ z' }6 [1 w- E
word_timestamps=True,
; F+ T! _+ V d4 o. R n ]保证了你能拿到 word,否则是拿不到的
5 w6 m% h% F7 O& S% a! `# O initial_prompt = "Hello, welcome to my lecture."); ?' V5 a3 n$ G/ k, F
保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 S5 u' }: M. V8 {其他参数可参考源文件:/ E- U8 C6 ?" G- z; c
https://github.com/guillaumekln/ ... isper/transcribe.py, H$ |9 V: a0 @0 L- Z( T- c( y
152 def transcribe(
# {& I9 y% ?8 o' o N1 e' r* _$ u7 L4 {从源文件你可以看到是支持中文的句号断句的。" S3 O2 y* a6 i0 D D9 R
! n# G" g- W! }- N6 I6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。& v1 M! u6 m7 C6 d0 d% v2 o) d) L
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。0 [" ?! n3 q2 j! p6 Z
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。; ~# m* W1 m3 h, F7 G1 X
3 {" @6 D! a3 V" q/ H* G$ x
+ s% X" y8 Q4 z1 A: c; f/ o
8 ]& C1 H4 x. J }+ j; X |
评分
-
查看全部评分
|