|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
% P' q) X6 k3 q- ^% g
( n7 p$ { [9 F借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。2 p) i4 A1 I( b6 f
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。- y& O# T2 g7 r' B& `
----------------------------------------
. J. p7 [8 _" a+ d' S% ?' w显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
) h6 j+ U9 ^8 E$ ^0 F, C% ?在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: _& O1 b* K( o, O1 z----------------------------------------7 k4 d- o$ Z* K0 B2 |+ ?$ m+ f
https://github.com/guillaumekln/faster-whisper' m: H' H7 o$ U- _) P
安装如下:
3 V4 ?% ?4 Y5 T, |. P1, Windows 107 a2 [9 ^8 n% V7 V* V. P
2, Python 3.10.11& C' `, q) m- O- j9 |! b9 E
3, CUDA 12.1% F6 U& S! Y" w) E9 b3 K8 z C6 R
4, 在python 3 中安装$ [ u* J v5 \
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
9 R! |7 w+ N @2 x/ M2 z6 U5 i/ Z这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。0 ]6 n& i3 t- ~0 @6 {
5,pip install -U openai-whisper% y6 r: [9 k. o% ]% t+ |7 @' x. W& G4 p
这是向whisper 致敬,可以不装
) @$ r E w1 f n& _0 u( K _6,pip install faster-whisper
5 j1 N1 w \7 w# c9 [ r. k1 A" D+ v& @----------------------------------------
: A3 ^, l' v1 u, L' Swhisper 我用的命令行,faster-whisper 我用的是python。7 k# E* P( ~& Z6 s$ g' `: J
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
: J! i# s, D* m2 a' I d/ l) R( F a8 ]! o9 _
----------------------------------------
& a& W! j( y7 D1 M
4 s. X. d) B0 k$ c5 ~) A4 Xfrom faster_whisper import WhisperModel/ z, ^" C% z8 p8 U
# h6 O1 o1 ~3 T0 j! U* p. _- ~
model_size = "small"
* _1 W C! H4 e7 x! ~) }6 W8 U; R5 a& b" v
model = WhisperModel(model_size, device="cuda", compute_type="int8")% C/ A9 Z( c7 h. q2 s, f3 R+ Q
& h$ K2 b8 n7 m6 x$ C
segments, info = model.transcribe(5 ?/ ?5 I- }" J
sourceFileName,
6 o8 C+ G+ z, y2 z9 |, F1 c+ ~ beam_size=5,
+ X& N# N7 |0 ?* c language="en",
4 z6 H7 j. }) u5 ~ task="transcribe", 6 a9 t2 H% {- N' d0 u
word_timestamps=True, 1 G. n% Q. n G1 U# n3 r7 i
initial_prompt = "Hello, welcome to my lecture.")
+ Q* N2 \- c5 q7 p, v+ B9 S- U f9 @$ {1 N/ o
for segment in segments:8 _% I) P$ v# I. p
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" t. M2 O+ Q1 f2 s6 ], ]9 E% |, X$ A2 U! W' v Y3 c
for word in segment.words:
( K, s9 H5 p* H ' V& |8 p; t R8 }2 H
----------------------------------------
& \3 G" G$ b; y$ e9 H! K8 x- x6 E: W3 D! j/ y+ X4 M S* V, w
代码说明:7 I( ^ q& ~9 p2 q4 M$ ^
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
4 l: l1 P; [/ L7 p% O8 U但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 w, {, [& O4 z1 E+ N5 l2,segment 本身是很粗糙的,做字幕勉强能用。
9 b" x9 L( B' O2 W3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
J0 d2 A. B, @5 F$ W! J& S5 e4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中7 F1 |( P/ p, T
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ ^6 O5 G( w' D" T: U
5,model.transcribe 中参数说明:$ E( d E' d% r# Y* F4 ?. e
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数/ i, ?+ `# S q5 c! J2 }; ^
其中
9 T P8 h3 @' c/ M: [! x+ Z) _2 Z word_timestamps=True,
3 Z" N) n# n- J6 D O保证了你能拿到 word,否则是拿不到的
. z2 ^6 T* z+ a* ]+ w- ~ initial_prompt = "Hello, welcome to my lecture.")
( m! J- I9 E5 x! B+ [4 |) G% H0 Q保证能尽可能准确的断句 punctuation,但是不是决定性的。1 w. R/ J( I% Z: t! h$ k U
其他参数可参考源文件:9 e' `% g: S" x
https://github.com/guillaumekln/ ... isper/transcribe.py
- v8 w- d: d8 X7 {4 b152 def transcribe(' Z9 B% D' F; z! z" i
从源文件你可以看到是支持中文的句号断句的。- e/ i9 z; D5 u. s! n
- D/ A) ]0 z( L! O+ n% k: L. u6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。/ p5 E7 c) r9 A3 r! e1 d
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 G8 D/ M$ F# @: F0 E8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
7 U9 B' P8 Z$ R2 Y& |' M3 Z( ^6 y/ w" ~5 Y2 G6 d2 u
A6 E6 N5 M5 ^3 c: T0 G }
6 I& Z8 k* d# P' ?, h8 j |
评分
-
查看全部评分
|