|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& \8 X- x7 D" D# e4 S; d2 |0 `" V8 ^: A7 d! q! ]
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 t, q3 @+ O: Y( J效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。8 h/ w% a9 O: E$ e
----------------------------------------, m4 ]+ a* `0 \& A; E& }( [; E
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。* Z1 e/ k `) H) r3 l, i8 ^
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
/ d9 H$ Y. m8 D9 Y) o. P+ B8 @----------------------------------------/ I, E4 O2 i' X% w$ z' T
https://github.com/guillaumekln/faster-whisper
9 z5 n; e, [7 @* [. F安装如下:2 l, N9 v5 P$ V( f( b r
1, Windows 104 h7 [7 F' V; a, c7 U
2, Python 3.10.113 V2 {7 y% X& f2 s( @
3, CUDA 12.17 `& d7 A) C2 w0 W: N4 [
4, 在python 3 中安装7 ^2 J, H5 l$ u
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117- i; I4 c1 T7 T, d+ }: _$ _/ i
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。: d) M( P4 }/ z0 R* v, f" r7 ~# Z
5,pip install -U openai-whisper+ c* L9 e, P, H8 w
这是向whisper 致敬,可以不装
+ f | n$ ?6 P; r, G6,pip install faster-whisper
B" \( R% s4 w# X& |; l, H& c----------------------------------------
! }7 q% c6 G D8 y3 q2 u( Awhisper 我用的命令行,faster-whisper 我用的是python。
, P6 H9 d4 K$ L) r& z下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:7 D6 i; e. D. H6 \4 ^
2 y- ?, L: B- Y# ?0 B1 e: @ ^/ D
----------------------------------------
4 O2 M) G2 y+ d4 H! |: a k
: q. b; M% E, b& @from faster_whisper import WhisperModel
/ \* x! G. Z' o& w2 W, Y% V. n3 v" `8 g4 p' K5 P
model_size = "small"
( j7 t/ R% n) C
# k, ^& ]) L" D$ W8 d* nmodel = WhisperModel(model_size, device="cuda", compute_type="int8")5 a& Y& s# F- Q7 w2 x8 p
% l. A( S: |/ q4 D" E
segments, info = model.transcribe(- o4 y% J5 j5 p" ^( o+ `
sourceFileName,
: e8 ^/ u0 t. e, C beam_size=5,
2 S9 h2 M8 ]. s: _, `: Q6 s language="en", 5 {. e* N. F' I& V) T$ E
task="transcribe", 9 W8 y% I# L8 J# L
word_timestamps=True, 5 y+ r% k: R& e
initial_prompt = "Hello, welcome to my lecture.") z4 C% \! g$ m0 I1 W2 C* p
: ^. I0 L b. v2 n/ A) P, U6 [1 Xfor segment in segments:
5 W7 W( {& q$ I( [8 ^) R print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))4 j) C" W8 a+ v! }+ J) X: i
7 ?. J" B$ C% m0 O9 ?8 L
for word in segment.words:' {+ w" X5 H5 \3 A Y/ A
0 R9 _2 Y i/ J' e8 {----------------------------------------( H8 \! @/ H3 A/ E4 G! S2 E0 x
+ u. x6 F6 {2 } @, I+ T代码说明: y1 B' l" \; t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。, l) Y7 g8 x' \: B+ o% k; `, b
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
8 `/ s' R& H6 o2,segment 本身是很粗糙的,做字幕勉强能用。
" o5 t$ `3 s9 _4 N. X2 ?( v2 d3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。 q' ?/ C4 L3 b! }( R
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
$ U6 @+ ^5 s7 [* u比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。3 N0 t" {$ V) e7 `, ~& j2 g
5,model.transcribe 中参数说明:" G" A" Y& k( K. \
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数$ \- U; f C: N: K" u- {; K
其中
, G; U3 k5 [, n word_timestamps=True,
" [$ h* h, \2 B3 J% K- }% K, u保证了你能拿到 word,否则是拿不到的# s' ?: ]; N4 O2 V4 {, Y0 Q- _! H
initial_prompt = "Hello, welcome to my lecture.")
. P4 H: \+ r) [5 y保证能尽可能准确的断句 punctuation,但是不是决定性的。% h1 U5 H0 h* m) d# n2 E- _7 j$ H' d
其他参数可参考源文件:5 `5 o L" }+ l- ?( x, F
https://github.com/guillaumekln/ ... isper/transcribe.py
3 g9 c: s" t1 h0 F9 a: k3 o7 I152 def transcribe(
8 e) }) `7 c% z' v i# F从源文件你可以看到是支持中文的句号断句的。
; M; u8 U6 D+ x8 B( n
, q* A9 z& Z; {; a. T6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" d- X" G1 \' t0 ^" Z1 f7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。5 o* o t6 h$ k, C
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。- F4 F6 t0 |8 f: o
1 Y3 X' F2 ~$ u: @+ ?' a
5 k& r9 _7 Z" P" ` {! f
5 m* K5 M2 I2 ^8 x: ? |
评分
-
查看全部评分
|