|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
\0 G& w' g7 S/ w& Z% k6 B! X) X
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。0 a$ f# V2 _* n* h9 \
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ Q( I- p) e1 K----------------------------------------1 J9 g; Q( f u- y0 t9 L( p
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
' u ?1 u) e5 H2 V9 d R! s- M$ @在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# X& d' a4 m9 w. c2 O! u# b3 h----------------------------------------3 O4 K5 n- B% t/ h
https://github.com/guillaumekln/faster-whisper( w. }6 i: T% ~1 O4 p- H P
安装如下:5 L" v$ `# I! C3 t: @7 j$ @
1, Windows 10
2 Z# \9 t$ n" x/ s3 Z, {& `2, Python 3.10.11 `9 o( p. T: c
3, CUDA 12.1
( o! q; @' l* L; B" J8 ~$ I& M4, 在python 3 中安装
. X6 X% O/ f. Q$ u1 O7 ppip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* ~) b4 A- r- v# A1 _这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
# A. V' v" r& n1 K& R2 i+ n5,pip install -U openai-whisper
8 K) y. `; G. B- O! b) ^3 J9 K这是向whisper 致敬,可以不装( _7 a: A2 B6 V. V7 C' b
6,pip install faster-whisper# Y X: F; c: ^( E6 M& k
----------------------------------------. q! L6 A3 [$ |, `) ^0 n- g
whisper 我用的命令行,faster-whisper 我用的是python。/ a& f9 x" h! n9 J# K7 o Z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ ]% D3 ~2 y5 v( o$ E
8 [$ R+ j. n8 g5 s1 L----------------------------------------
* w6 D3 Q5 [# X' Q& x/ |" j
( X8 w& e! G" I& d- G. K% W, Gfrom faster_whisper import WhisperModel( o% S0 p5 [6 s/ [' Q7 X
( U* b- I; Z ~/ g6 ]model_size = "small"
0 N7 R; a0 d9 t! W
- x. \% C, t3 N, y jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")' `# ?3 d; Y6 J I* u( d
( E$ b0 y; d! g" q, o6 ysegments, info = model.transcribe(
8 z, t. @+ j( S: I* m sourceFileName, 6 Q9 v5 o" }# ]7 P& W
beam_size=5, 9 x9 Z5 F2 S5 D# C
language="en",
' R% c; C6 \% P task="transcribe",
$ Q5 J5 Y0 Q! L8 I5 O5 W word_timestamps=True,
' s% _+ C* P. L/ v8 A7 F+ L, F initial_prompt = "Hello, welcome to my lecture.")
! M" b* }' Q0 Q; m) h, O7 b: d2 K& E, I# Y5 _
for segment in segments:
* F- I4 M! [4 `( J- A print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))2 ?% o! p% u- k- }' T2 Y' z
8 K# Z5 x D W6 B
for word in segment.words:0 `1 }! m: q& c; R/ f0 k
7 ?" _% a; D, a6 G, F! M# J----------------------------------------
+ }. v( ]! ^- O1 O" e- j0 P+ |1 l6 n. e8 A0 ~& E5 b( d) c* A- K
代码说明:
4 k0 ^4 `4 S! |& T9 G# D1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# }% F9 s s- _) I5 O4 `) B4 ^但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。0 s8 P1 x5 Q5 [3 K+ a1 o2 x
2,segment 本身是很粗糙的,做字幕勉强能用。
0 R5 ]. l, H8 ^( I2 W3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- t8 t/ x. o$ D1 o4 c4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 y: q c0 x( z8 U4 h: h比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。0 A# v4 ~6 N! E6 ~$ A( O1 o6 ~
5,model.transcribe 中参数说明:' |/ {$ _ B: l5 g$ M1 Z
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 o/ P% |! f V! N1 ~其中, m2 |5 j1 k- n6 Z2 [2 r
word_timestamps=True,
( S- _" q, @+ D5 L# ^8 M保证了你能拿到 word,否则是拿不到的
, F5 i- Z& n0 x4 I" u6 q initial_prompt = "Hello, welcome to my lecture.")- k y5 l3 s: L, |
保证能尽可能准确的断句 punctuation,但是不是决定性的。" }: S& d" a; G* n: `% O
其他参数可参考源文件:3 a; T' D" T: H& f1 X' m1 q
https://github.com/guillaumekln/ ... isper/transcribe.py
4 I& |1 E$ s5 K. z; Y) z" t152 def transcribe(# H* |3 W! d9 F$ v
从源文件你可以看到是支持中文的句号断句的。
2 v* ~- Y) O! q7 m" K9 O6 K$ x! X9 u
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。1 } ?9 g6 H+ U R: B2 G' R7 P
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 a1 x- w b7 M, n
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* Q; g9 u4 S6 @+ e- W; D
& D& h, e% c0 p + P4 V1 U2 x7 Z5 Y$ }/ X
C* v) P' [6 m {8 D @
|
评分
-
查看全部评分
|