|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ( W( B0 w! t+ ]* ~. p+ b( h
9 h; N# s( ~) {% O' S/ H借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。- O1 I5 i" k7 A; j/ ~
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。 C4 k; |3 E) C7 S, E# _) Z7 B
----------------------------------------% x. K1 o8 ?+ z" x: Z
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: i) j/ k3 w# j在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。. O4 g2 }+ C' W. r O2 s* }: {0 v
----------------------------------------
8 ]: [0 D* y2 |$ Fhttps://github.com/guillaumekln/faster-whisper4 c- X% J: c: k. P: L
安装如下:
# \% G3 x/ x; z) O* |# e: s% S1, Windows 101 z! J" i5 p) O9 M; y0 j2 V
2, Python 3.10.11, B4 z3 _& @3 A, A5 }3 O' |3 M
3, CUDA 12.1" v" z& p6 Q6 b2 m0 @1 _- R. q
4, 在python 3 中安装
# A6 X6 B2 }% ^. h( _3 ]( M. B5 Fpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1170 p; K$ O' m# u O. b
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" C7 a0 ^* T+ ~% M
5,pip install -U openai-whisper
& y4 A+ K9 T0 v3 I# G, Z5 D这是向whisper 致敬,可以不装4 }/ v6 p4 S! o, ] |2 X2 d
6,pip install faster-whisper
8 Q9 N8 W; S* N# L- a( @----------------------------------------) F, j5 j; ^+ Z# N% _. q
whisper 我用的命令行,faster-whisper 我用的是python。4 k2 \ l. T. _ @: _3 O
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:$ s8 f8 {4 N8 Q3 E8 X- r
* ^; V; w- W, x6 Q% ?. j----------------------------------------8 h, L' u3 h; v( D% c& J
( h3 B4 S+ I4 e. f/ H( G
from faster_whisper import WhisperModel& c; ]7 b. Z6 M6 j
; o$ C) q6 c3 C' y( q
model_size = "small"5 _9 ]8 @, N# \& I: U
/ l/ H. M7 l/ y9 ~4 ~
model = WhisperModel(model_size, device="cuda", compute_type="int8")- A5 _% ?" y0 G. I5 ]) P7 B
1 G7 [# a1 h: N: Tsegments, info = model.transcribe(
$ S% | r7 T0 K4 b) r sourceFileName, ; z" q& ?8 w5 I& }7 U
beam_size=5,
& a' a8 K# N* x) C language="en",
' d2 _7 J' }% |: B7 K task="transcribe", 2 ~ F+ ]; T. N. @# ]- j) r; p
word_timestamps=True, 7 o* j% ?, N/ c1 }8 X, z/ l% r
initial_prompt = "Hello, welcome to my lecture.")
- p, C& ^, E |, d# i! K9 w4 w( I0 m& o3 l" A
for segment in segments:
$ N& x9 b$ _ q8 j print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 h2 Q& o$ E( D9 o
) X& h, X0 l! {. h2 I( A2 X for word in segment.words:
' |5 t# y) F3 \. _# n. c! Z
% H. u2 i3 m- m* O----------------------------------------
1 U5 t: y4 V, L- f6 F2 I
Y' N! S Z7 _: w$ x代码说明:: s5 g( o8 U) d" _$ x
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# j1 G1 y+ H" f7 d
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* r- R% f4 F' M, I7 t2,segment 本身是很粗糙的,做字幕勉强能用。! x% P1 K0 A. h3 p9 b
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。" { X# V# q" w2 {4 W6 w8 G
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, V9 }9 u+ l7 ?* |$ Z比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% t4 J/ P: m$ c8 ]$ j9 m5,model.transcribe 中参数说明:3 X8 ]; t( N+ V& w" ?
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 `% a& [! L, U
其中
- v% a: f6 D9 J3 m( v8 _. L: }# N" @ word_timestamps=True, , v# j& L, @# C
保证了你能拿到 word,否则是拿不到的
# W6 d# B- R! H5 c ^+ [0 l0 A initial_prompt = "Hello, welcome to my lecture.")% G3 q# C* I! t! f: C) e6 u: T( J1 O- O
保证能尽可能准确的断句 punctuation,但是不是决定性的。
# s) k a# D, o; O: q2 v其他参数可参考源文件:$ U) M2 M# x+ R& ^( d, |/ z0 `
https://github.com/guillaumekln/ ... isper/transcribe.py! X3 Y$ ^: i4 s5 D5 |
152 def transcribe($ w. I; T( a; K5 T0 j
从源文件你可以看到是支持中文的句号断句的。
5 b' n. P, S* ^# r% o( A7 Q( E; y: K% n, V2 v4 {/ R
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 @1 Z1 Z& p! F1 b& S5 S0 q
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。: a" d4 v7 |$ I7 Q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。, N& |- @! n, V
( ?1 J( T# ?9 P2 C/ ]
% O; h0 N2 @7 R1 D( [7 ~: u6 X. f6 A/ G5 M+ n* s9 O
|
评分
-
查看全部评分
|