|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 O/ u/ k6 o* T; Q! l0 h1 Y1 u
5 y, R/ t3 c: K: G$ p, h借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。1 O# [ n/ I: X" U1 f: F- x
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。; X, Q% n7 S1 m: w0 ?' o3 F9 c
----------------------------------------7 p. T4 J) U5 Q2 }) S9 W H% _" I$ \1 e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。 d/ O( G: _/ f& C
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
8 k% L: g- [. j& g----------------------------------------
6 t/ x; }- y3 u+ xhttps://github.com/guillaumekln/faster-whisper: `6 _1 k1 \8 Y; Q) H/ x
安装如下:7 }- e! K) j q& [% Y
1, Windows 107 T( c* @4 M. \3 N
2, Python 3.10.11& N- R) w @4 p9 x3 g
3, CUDA 12.1
# O3 j/ y/ u3 D& ?( C$ B: K4, 在python 3 中安装
1 H% ~$ M8 [0 t9 W/ D1 Lpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
9 Y" n' ?$ X6 W: {" i+ F+ H1 F这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
1 q. n) G2 g! ^# [+ Q+ }5,pip install -U openai-whisper9 b5 `" e+ e! v& O% a! Y3 }
这是向whisper 致敬,可以不装5 g" r3 m; t, `
6,pip install faster-whisper$ b: O0 p H; @5 `; f
----------------------------------------
$ B. Y, F7 x% \# f3 H# Z+ O! @# Uwhisper 我用的命令行,faster-whisper 我用的是python。
# E/ h0 }! O/ c: y& L/ M: S下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:3 k8 X4 k8 |) a' T
8 ?, X1 n0 c" `0 w" j
----------------------------------------
6 j. Q# m" i, A3 P
7 d2 K$ D+ h* o- n5 Ifrom faster_whisper import WhisperModel
! R4 n n; J5 I/ Q; m4 m7 U8 Z" O! O: i5 Y
model_size = "small"; e, p; a+ q y* F+ A0 t
1 H" r' v2 t( |3 ?6 i+ ~6 p7 n& a9 _model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 p0 k0 B B* u' n
4 Y/ o. d, s9 M5 F: y3 i* p$ t* Vsegments, info = model.transcribe(7 t& m B/ ~- `( \# Y
sourceFileName,
! e# p8 V a7 H* H beam_size=5,
2 |0 e4 [9 a) ~4 z language="en", 6 X9 N" j Y, K! ~9 E; j
task="transcribe",
. b" Z/ a% y, @+ d& G word_timestamps=True,
, h, `' n0 z$ q2 v( b initial_prompt = "Hello, welcome to my lecture.")( e7 t- G' g" [; V% h L# z
: i2 @6 l o- s" h* t9 {for segment in segments:
7 m0 Y) m2 R; R/ ~ print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
, w; ?6 n- f5 B: [. x. L8 u
9 {3 J/ V/ H2 I$ u9 S for word in segment.words:' m {" ^$ q+ i4 {
% Y9 k% s9 i: |
----------------------------------------& L3 Q- {; |, e; T1 |% Y/ U$ v& T
0 a6 k0 z4 b7 _) b* F- F$ W代码说明:( f, n8 S' t: h/ ]; ~- ~
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。 } [% Y& q0 @! t+ u$ F/ ~
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 y' e; f% `2 A. [4 I: t$ v2,segment 本身是很粗糙的,做字幕勉强能用。$ ^& A" S* Q8 Z: E7 `% }/ w5 ?
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& a5 j+ W% S: s4 d& o
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中3 Q3 N1 I+ @, c2 W& ~# B
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 X" @; V' O* s5,model.transcribe 中参数说明:
! o9 ?/ C* n( F2 x! j+ X你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数0 y7 H; { Q- \: t
其中; x' S* w( {9 E7 I# w% v' M
word_timestamps=True, / V7 ^) D! C! n ^
保证了你能拿到 word,否则是拿不到的
- A& e9 Q( b& V* l G4 G* L! F initial_prompt = "Hello, welcome to my lecture.")3 }9 I% t9 w% ?* s6 l/ v
保证能尽可能准确的断句 punctuation,但是不是决定性的。
, b( H6 p' ~$ S O2 d w2 ~. A' M其他参数可参考源文件:; c: ? @- P: a+ {9 r
https://github.com/guillaumekln/ ... isper/transcribe.py
% A2 p! O. J5 z6 N% S6 E152 def transcribe(, q' A$ ~/ [. H0 ]! e
从源文件你可以看到是支持中文的句号断句的。! g8 e4 \9 s) |! T/ d. z$ o
" Y& [! j; P9 @% w4 V" p% {* X. k
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。. ]2 s6 j- V a6 o2 Y+ I+ j
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
- x7 ^# {2 E+ {( g9 B) e: S8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
8 e3 A3 ] J; H) u3 z6 V v: b0 ~# ?( Y9 ]& d* T
$ ]5 a$ ? l2 g+ [5 ^) J) ^! h7 y1 a0 `
|
评分
-
查看全部评分
|