|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 ~& N' Y% z l4 W" v
6 g( B" ~/ R: K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# P) C; E- ?+ F( n效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, M- e% ^* a0 Q4 Q8 e----------------------------------------
$ _6 z9 l/ ~: _% j( l显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。7 P0 f& M2 j( Z' b! ]$ U7 w: w; j
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
* X- J- X f0 p2 O. H) B----------------------------------------8 B% ^. r. I! }
https://github.com/guillaumekln/faster-whisper
. H! D% d6 ]: X q& X8 J, n) E安装如下:( @% I! u) i) v3 B
1, Windows 10
1 P' e" q6 V. V) n! b0 L5 e2, Python 3.10.118 H! W. ^& R' f8 `: x3 N
3, CUDA 12.1
' L2 p# ?7 N# I. u5 \+ B1 x0 I8 q4, 在python 3 中安装! l: K" l# N; B1 A9 G
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117$ W% u5 O# L1 W# F2 p" n* \
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。% B- H4 ?4 o6 k% G; O, U+ A
5,pip install -U openai-whisper
& r# j4 x8 l6 W. h% e( v' ?( v, y这是向whisper 致敬,可以不装2 ~) t8 Z8 _0 P4 M. d8 O" ]$ q
6,pip install faster-whisper
9 Z( g" ^1 O7 M# F4 s----------------------------------------
3 H9 Z" v2 S& {; i7 z" |whisper 我用的命令行,faster-whisper 我用的是python。
/ t: o* k! b9 g$ ^9 L, c! n4 c; r下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 d& f& P4 u- k% g( h9 @
9 Y! t. c- p# Z# a5 g; i+ f----------------------------------------
" K5 N0 f7 y7 e# t5 _# D
) Q* u, r) o( t. o3 P: rfrom faster_whisper import WhisperModel% p% r8 N2 w. e5 N
# F+ W/ F+ m: U& g, Xmodel_size = "small"
# E2 s1 ]/ r! h3 D* x- f4 ?+ C1 c+ l. U* H. N0 J
model = WhisperModel(model_size, device="cuda", compute_type="int8")
0 L4 U5 r, |! B# t9 X+ n0 e6 g) W) x1 F& d
segments, info = model.transcribe(. g4 o9 q5 X; _
sourceFileName,
& U( w i& V5 X( J3 W+ M beam_size=5,
* \3 P! L+ O3 w language="en",
$ w! G& ~( B: O: v. B3 ]# k; b task="transcribe", , R+ k; U3 H4 ?9 q
word_timestamps=True, $ i9 `/ o7 t5 G& ]+ @
initial_prompt = "Hello, welcome to my lecture.")
9 x" z+ V# X: O8 N( @& x# O
, B7 E5 X* @3 X3 L$ afor segment in segments:) [$ c" F# }/ Q2 j% a+ C
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
4 G+ {, B5 k; v) p& ~6 X9 U5 ~5 Z+ ?- T* i1 y
for word in segment.words:" A4 z* a6 v. C$ U% n. H
7 h0 \9 ^& r5 S% V----------------------------------------
* l2 g. n7 ~% Q* a( F" h( |5 @
" L4 ?& k0 m7 F' P* n代码说明:/ t4 X9 {2 ^9 Y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。6 Z! s+ ~- V! }5 k: b
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ i+ U) M. A; V" |, S% R
2,segment 本身是很粗糙的,做字幕勉强能用。3 M" j, x) |0 p* ?6 C
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。1 M# G1 X! p9 ^) l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
4 m t" u, g. O. X比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
/ W& j, |, B1 s: G9 K/ W5,model.transcribe 中参数说明:
9 U% q' @* W: j0 J. Q6 A' Q5 q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数. r/ A1 n- f- B k. T) q5 r
其中
1 I6 q1 S, }$ u0 @( X word_timestamps=True,
8 R m! v! _! v保证了你能拿到 word,否则是拿不到的
& \. R) w+ W/ ^2 Y' l- j initial_prompt = "Hello, welcome to my lecture.")
2 L1 r- Q$ l& d% H) ]保证能尽可能准确的断句 punctuation,但是不是决定性的。! Y2 p7 ?2 D& k$ \6 t* q& m3 t c
其他参数可参考源文件: s* y q" U, z! Q
https://github.com/guillaumekln/ ... isper/transcribe.py
- q& h# w% f w% q2 A0 g152 def transcribe(
( }4 G; G8 v2 O) F% E/ S9 \从源文件你可以看到是支持中文的句号断句的。
Q k/ H6 X0 B5 Q* b
G& D6 j. r* ?0 E: D) X6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。+ g! R$ l* t0 v3 }
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& `8 h0 Z+ e2 Y5 {" M4 S3 o4 {8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
) p0 Y: W4 A* s4 R+ x" G) }- M9 b+ T! L& J" K/ C, z; Y
# y& v& N! ~+ R" k
q6 t3 J8 P( ] |
评分
-
查看全部评分
|