|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 0 S8 \! B) z( F# x
* Y' |% u5 t8 ]/ x3 r
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ m' B8 v4 k% W效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
4 p$ g: s& n2 z- y4 e H! z----------------------------------------
* t$ A7 `( d! s9 f显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
7 m4 Z9 J4 T: c$ U. L; A8 p. `% {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: q' @/ W5 S, d( q8 W, b! ?! L( P----------------------------------------
/ `% `! E; D% Z% v4 I b9 d9 a+ ehttps://github.com/guillaumekln/faster-whisper
3 B* X+ Y+ h! ]% q, [6 ^安装如下:
\0 D: m4 h: u1 C3 O+ ]/ `% q1, Windows 10
6 x- I$ P% Q' S9 c/ S3 y2 l2, Python 3.10.11
U+ l' D( V0 V2 b3, CUDA 12.1
) V7 Z6 j J* Y. H4, 在python 3 中安装: V& v. Z( |8 t2 i+ i
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
4 f# C5 e3 R1 Q" d* U7 _3 L+ j这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。+ A" O3 o) |5 T1 [" Z2 y
5,pip install -U openai-whisper
* \7 E5 j0 D/ o/ e% I H- s; j& n. C这是向whisper 致敬,可以不装9 x4 `( ?0 P$ R/ g4 B
6,pip install faster-whisper {/ B* V( n! P' y( s
----------------------------------------
2 ~, m* \2 B( N' Cwhisper 我用的命令行,faster-whisper 我用的是python。' ?& U) s2 U+ |6 G5 x* ]
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 [4 b" e+ S4 a2 G: P+ v1 ~9 b( k8 a* K( N
----------------------------------------+ ~# p+ d ^# y& j
& s! z& R6 `$ R4 N8 X% n! R6 Y) Ffrom faster_whisper import WhisperModel
# I& V5 ~! b9 `
: f" d: n1 C9 r1 W5 Mmodel_size = "small"6 K5 D+ r/ ^! ^9 F6 z/ M
! }- K& p( n+ ymodel = WhisperModel(model_size, device="cuda", compute_type="int8")
0 ~( `" T$ i# C+ k0 S6 `! a" B
! g+ d' E2 v+ o( L6 V+ R, {# U4 Dsegments, info = model.transcribe(
/ e, v" H* W: |- I. Y* | sourceFileName,
* t# {! b5 I# e8 h& K beam_size=5, / d2 k2 b1 F q% w2 O% Z
language="en", L6 T+ r) j1 o4 @, F* v
task="transcribe",
9 z. ~8 I( ~$ z! ?5 h word_timestamps=True, 6 M- T7 A* N% `1 l; [8 T
initial_prompt = "Hello, welcome to my lecture.")
( B: B# y9 ]- L5 n; }
9 Z6 n. o" S) J$ g! bfor segment in segments:( {9 q$ z1 a) D
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))! E1 b4 i6 k' Z) g5 L, L5 y# J
- \8 d6 c( R* g; ]# E
for word in segment.words:
2 @, n( S9 h t, x
' u1 @! h' r0 T7 n2 A2 d$ ~/ v; G, A----------------------------------------
; g1 l8 i0 Z/ f$ }+ W
* w3 i' m. z2 s$ Y' l' B! L代码说明:/ K9 ~" Y* u; X9 H
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
4 I/ u( X' Y+ r. |' E5 b2 S但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 Y7 c6 M* e- Y* _* {/ {7 b2,segment 本身是很粗糙的,做字幕勉强能用。3 b+ k( ?( e2 N8 [+ n
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
5 h' x$ g6 [/ @* m/ l' o/ e0 z* ]4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中: y9 k3 x. E, y' h- g% l9 d$ X
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 Y) E2 N% n1 M/ ]5,model.transcribe 中参数说明:3 w, @/ [2 \7 s/ g
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数0 p7 [3 n8 C! T/ c* N+ b
其中
) u; l% p2 V* a: n) Z D word_timestamps=True,
+ E3 m. f! A+ w; ^3 c保证了你能拿到 word,否则是拿不到的9 N5 f5 ]$ H: {1 G1 X
initial_prompt = "Hello, welcome to my lecture.")
- N# T: U( _* G' g保证能尽可能准确的断句 punctuation,但是不是决定性的。' q" W, w G/ t" k
其他参数可参考源文件:
9 v6 x. q/ t! E, }6 }4 [' M7 k) qhttps://github.com/guillaumekln/ ... isper/transcribe.py! H! Q S Z" E, t$ G
152 def transcribe(
9 t. m& F: i4 N从源文件你可以看到是支持中文的句号断句的。
. F& `3 B2 e* t8 k* c0 k: O( d) r0 }" E9 r: r' ?" @% N. N
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
4 J) w- _3 O8 C1 |7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。; j/ R" I. E' z) `8 \% z8 s
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。2 V( P6 d2 p3 s* F
7 b- U. j/ |/ _! z 5 E* F$ s$ x" V k( L( L
7 H9 J& d; {; Y5 m2 Z( N1 E |
评分
-
查看全部评分
|