|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 # u* X5 {/ A; ^9 H9 g- O
# ~0 R& u& }8 T, } w& `; x借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。7 `( c) I9 l4 i3 y) z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。7 K! w) E- Z: E4 n2 i
----------------------------------------8 d; Q1 Y7 t$ ?1 G, S) I: J
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
$ k% x1 [$ _$ I+ \1 |3 y) z4 m在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
( s& C! b( V# j0 s# Z----------------------------------------
1 [7 N# c; n" ` ^# g/ dhttps://github.com/guillaumekln/faster-whisper
6 T7 l" m. g) t8 q- @- V# `4 `安装如下:8 @) F4 c b6 S
1, Windows 104 ^. ^) i9 Y4 F7 j
2, Python 3.10.11
+ U) p. M! O- y" k3, CUDA 12.19 a5 w. _9 V! G$ m" t" _
4, 在python 3 中安装
) O- c, U& Z8 Ipip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
+ k( s: [- ~: E; y$ w' k. v这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。8 A8 b7 N4 j+ B$ x/ O
5,pip install -U openai-whisper
: t, ^2 z( k% i& N这是向whisper 致敬,可以不装! f, R+ m; E) A' j2 \
6,pip install faster-whisper, E* y8 c) D( T b0 m
----------------------------------------
$ ], i; v3 f( P; N# T- d6 `8 [+ lwhisper 我用的命令行,faster-whisper 我用的是python。
4 m2 T. H4 g# S5 }% j1 [5 a下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:: A# s( w+ b2 t
" Q4 V& w$ X5 ~2 z
----------------------------------------
/ Q5 y( l( c- t* n0 [& l6 ?
+ _. ?2 z6 |( k5 ]. _9 X5 D/ H. Efrom faster_whisper import WhisperModel! S, l0 q. S( _- g0 J9 A3 C
/ u( t% {, e' J; Q( Z' i" a
model_size = "small"
& Q/ ]0 R9 J4 K* N6 e1 ^9 w
, I" s+ ~: R9 U2 |model = WhisperModel(model_size, device="cuda", compute_type="int8")
7 V- c* C* R( t- W, ~9 e
' K+ w$ x7 W0 O) ^" N9 I& E. xsegments, info = model.transcribe(" J! g; d0 m8 v) G6 k3 j
sourceFileName, # l: T; p$ k: j$ T4 m+ h- `
beam_size=5, ; p, R& y3 d, F5 b O2 P2 Z
language="en",
% K5 H4 j- Y' U" M: ~ task="transcribe",
- x7 n6 q; p+ U# D word_timestamps=True,
* A: t I# F& @0 X/ ] initial_prompt = "Hello, welcome to my lecture.")" v6 C4 @! _/ r8 h* D: v- _
& z J0 o' O" V! F" ?
for segment in segments: _) n. s: n- \# I. _) E- L
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))" ~5 c s* @+ P& T* b3 ]! F& h
6 U, X4 `2 l# v- W8 R for word in segment.words:- l0 ^1 O/ W' P9 F. |
, Q7 U! W. P3 I6 U9 j. N6 {----------------------------------------. j2 C! m1 {$ {# ^! O9 W
2 Q( I# s1 _" \7 w, Y& d代码说明:+ ^% ~) @$ B6 t) {4 G7 W5 D
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ P8 O& ]0 \. s' C; _
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
- w9 J! B7 e3 Q- o2,segment 本身是很粗糙的,做字幕勉强能用。
- S \2 i8 x5 v: y1 n! L3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。3 r" Z0 R9 @" _3 `) B7 Z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中3 \6 z: |3 J( n- }( F+ f5 Q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
/ b; C1 N9 |0 t% L, G& m5,model.transcribe 中参数说明:
8 P* v( G$ w( m: }. x. i- S你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 e7 C o- [% B+ {8 [$ M+ V( [其中) l- d2 H- s! {, ?4 g, T
word_timestamps=True, * Q7 W$ a2 k. Q% ~* p" Z' V3 d
保证了你能拿到 word,否则是拿不到的; i# v- h1 E5 N" E& h6 ^2 u
initial_prompt = "Hello, welcome to my lecture.")1 v. b0 E3 v: |3 y
保证能尽可能准确的断句 punctuation,但是不是决定性的。
' }! f x' a9 i& m# K其他参数可参考源文件:
4 z- L$ z: k" k# K) W4 Jhttps://github.com/guillaumekln/ ... isper/transcribe.py+ \/ |2 V$ G- D1 Y4 W1 M7 t
152 def transcribe(3 z* K1 M0 P* @
从源文件你可以看到是支持中文的句号断句的。2 q( |% | M2 t. d
3 V0 U6 W7 S2 s' {, K6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。2 H) _+ X B, K
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 [ h) B, p7 u/ x8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
, i- _' T" _, K! {% ~- `5 |& ]3 z
! B6 C/ r) y0 }9 ^
1 m" e% S7 o: s! Q2 d" Y- O5 ^2 x
|
评分
-
查看全部评分
|