|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 w- x7 B) [. M% E/ ^0 o- H
2 r2 G. @/ H { j, {( Z8 W+ | {借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ ]2 ~" p5 O3 D0 \4 V1 h$ z效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。3 {8 a1 E# @2 d& S" u
----------------------------------------) P4 T' R6 ~0 U5 r0 ~' i# S
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。5 a- ^/ G7 E" L4 L. y& ^
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- |2 ^2 [* L/ {/ h
----------------------------------------
* q& `8 p" o, ^4 lhttps://github.com/guillaumekln/faster-whisper
0 C: ^6 L/ u2 ^安装如下:
, X3 ^( C* ]; c+ |1, Windows 10
$ w* U- X3 y9 r1 K2, Python 3.10.11 H4 C- d$ s) E
3, CUDA 12.1
, n2 S. e1 ]) J% z" E/ C0 F" n- }4, 在python 3 中安装6 k2 g7 F/ M' O+ L$ q# n- N
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
/ E1 N8 h/ @* U2 q+ {1 |这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 c2 ~; V6 u; \5 Y
5,pip install -U openai-whisper! p3 }; E9 G" ^
这是向whisper 致敬,可以不装
B" O: d& S* Q [: D1 P$ }: \6,pip install faster-whisper
; h/ J- q$ [( W0 Q. V" L0 E0 {+ n---------------------------------------- f0 L- g% t, [& ]9 J
whisper 我用的命令行,faster-whisper 我用的是python。
0 |( ~5 Q; n' E( T. @下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# a0 j; I/ ^3 q4 [- o; M
5 S% X% J# j* A. B; u
---------------------------------------- @: \. D% H) B5 l t
0 `# q% o* b/ J0 T( H3 m! o
from faster_whisper import WhisperModel
, H+ a0 `' i! C5 w5 ~6 F
" x* h+ K/ t8 x+ N5 \' omodel_size = "small"0 [* o1 ]8 B( F3 }5 H7 X
# a2 j% W* _0 d: y+ F$ V! v
model = WhisperModel(model_size, device="cuda", compute_type="int8")
% A8 u5 g* A1 I' k. T1 E1 U6 f( }7 v C8 n/ N
segments, info = model.transcribe(
) I, j4 q$ t/ u2 @+ d) B8 T, ^* x sourceFileName, 8 p" D7 O8 Z4 ]' F; ?
beam_size=5, # y' \0 c/ `* [/ W2 \; _4 d* I* f- H
language="en", / M! }5 z6 i4 R+ v& t3 Q/ J7 ?
task="transcribe", & V' j) h. L4 U9 O" K' L3 ]
word_timestamps=True, % I: x: a. w6 `8 z/ [+ R
initial_prompt = "Hello, welcome to my lecture.")
; {' p4 e* A. Q6 }1 L% o! _
3 `& q& f& R2 Y, l; E; kfor segment in segments:* [! F3 |! b `( w6 |# J( X. {7 B
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))- H/ P+ @( \5 } c F `% S
4 o& x5 ^( M8 ~: B for word in segment.words:' o# w) q$ [8 b2 ]( N; y: o
+ u' Y4 a* v9 m: e$ a( V
----------------------------------------
# m' L5 G& F4 h. q, M
7 m1 }( ]$ {& |8 k% z代码说明:- m" J+ X. X6 \; N
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
) G) w* d% n7 W. s! E' W0 ]; |0 A但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! f. i1 b! s( }! p
2,segment 本身是很粗糙的,做字幕勉强能用。
0 S I* {& x: _8 K3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 c+ S: x1 g1 `4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中' x0 s4 ~2 Z' R3 _4 ~6 F+ `7 A
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。' x8 w9 R2 w) X% k* s
5,model.transcribe 中参数说明:. ^ u z: r4 L/ r- d
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 H" p3 F9 h7 d5 Z' m6 K其中
+ R, U5 ^6 @! w/ \9 H word_timestamps=True,
# ] n0 G! e+ \0 e$ s保证了你能拿到 word,否则是拿不到的7 _, G T" G9 ?0 B1 z( Q
initial_prompt = "Hello, welcome to my lecture.")
S) o% A- I: b保证能尽可能准确的断句 punctuation,但是不是决定性的。
: S' r% b+ G) q- a B) q其他参数可参考源文件:& f! _7 Q" }. {7 g$ _ i
https://github.com/guillaumekln/ ... isper/transcribe.py/ L& g4 p4 c) p
152 def transcribe(2 r* G7 v4 N2 q3 H" C
从源文件你可以看到是支持中文的句号断句的。# ~( l5 b! e( U4 s
" E" p- L }2 ^$ p( X3 ]6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 y6 H! ]3 b3 f
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 ~2 E& T8 b$ s* l* b. R" C8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
~3 W+ x2 W5 w1 ?1 X& G: S( t8 y6 J5 l
1 z8 O7 t2 a0 }; P. A7 S1 e( c! u! H; \
|
评分
-
查看全部评分
|