|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* a- b/ J5 q) V6 ^8 }/ L: Z- u; x5 k. J) B9 j* h7 _+ F: w
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。$ ]2 x* @# u8 q' B; v/ s# z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ O- B$ z( w, |/ x# S+ i! g----------------------------------------$ `; g9 J" k1 C2 L
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。/ K6 n' f3 b3 P) t# h! {' u
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。" ^( [8 K+ d- y: o
----------------------------------------
- |& Z q% f7 ]6 K" X# bhttps://github.com/guillaumekln/faster-whisper- f8 p- A L7 j; @+ s
安装如下:
4 q* y8 [' F9 o% |1, Windows 10
9 R- x6 x9 a7 U2, Python 3.10.11+ O5 W' I' V4 i8 x6 U3 l2 S( ?
3, CUDA 12.1' l% `3 m' S! U2 s1 O% C
4, 在python 3 中安装& M; q" G7 Z4 P8 `, g+ }: \: M
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
7 T' x; A3 ?0 G+ }* f/ h6 K这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
+ l5 P. S3 x: {. U3 I/ e6 A" e5,pip install -U openai-whisper V" P% Y+ k! m! a$ f, T6 C
这是向whisper 致敬,可以不装
; x. z2 e2 m7 F6,pip install faster-whisper
9 i- G8 C, e: p----------------------------------------5 Y7 U, l* F, u( a9 p
whisper 我用的命令行,faster-whisper 我用的是python。
3 M8 h/ }& y: h m: o: {; e下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:8 q7 D; m- Q1 n. b2 x: ?
' P' d# H( N- g* _----------------------------------------
, Y/ Y$ {, u( |# `' o- B l+ d
, K4 `: ]( g# f/ t: y. Rfrom faster_whisper import WhisperModel
* o( }4 s$ l8 f- [' ], E5 |' I( k
model_size = "small"
& b% D9 C0 v4 ~- ~% a) L! f3 l4 a5 Y% V2 X
model = WhisperModel(model_size, device="cuda", compute_type="int8")! i3 c+ ^4 W4 s/ P4 ?" j
' Z0 Y. y% b5 i5 y# ]segments, info = model.transcribe(: |/ a5 Q) Q8 {; A
sourceFileName, . H$ K, ? L( s+ v2 Q
beam_size=5, ; U! J% p" v$ ^2 E) G r" k: [
language="en", 2 B9 A/ O/ s3 }% K K
task="transcribe", 4 w( [* K( A1 k4 P$ P
word_timestamps=True, . Z. W# Q* w2 q
initial_prompt = "Hello, welcome to my lecture.")
2 M9 M0 V( c. a; }
4 T [+ C/ C' Rfor segment in segments:7 Q# K. R K# z. G1 h6 B
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))1 I8 ]+ \# L) X/ a* z- p6 X! K/ y
# l1 q- }3 ^ A u, V$ @$ \& C
for word in segment.words:7 v4 r9 z8 p) T0 R4 G, O
( M% f9 l1 L8 R. u8 X- w8 ^
----------------------------------------1 m0 H1 l! k1 I2 B3 c2 y
4 @6 N% z& d% x代码说明:
" {9 d; Z7 K# S; ], z; u) b0 R1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
. ~$ u& {+ S e8 S3 ^但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ j+ l( t; x( S+ t8 F
2,segment 本身是很粗糙的,做字幕勉强能用。4 e) r+ t' I# I4 n, y$ ^6 f) l) e
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。/ R9 C' v: K7 w" z' L; z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中$ k7 u( k! t0 }# k$ s# U0 X1 U
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。( v) T) z, G( t- v, L1 O0 U! j7 d( {5 q
5,model.transcribe 中参数说明:
7 f4 {! W* h' t1 {. P/ u+ {0 L- r你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数, O+ ~. b& q7 [. d
其中
9 e( Z, e, i% k: l word_timestamps=True,
- C# r- u3 ~! I- G8 K/ T( `) K( {) Z保证了你能拿到 word,否则是拿不到的) x: M8 Z8 \- K ?
initial_prompt = "Hello, welcome to my lecture.")
% @5 g( M! L4 [$ H保证能尽可能准确的断句 punctuation,但是不是决定性的。% q( E: H! \1 X4 F7 g3 N# C- |8 g; s
其他参数可参考源文件:
" k8 E1 C. X" z6 L% M1 X9 Fhttps://github.com/guillaumekln/ ... isper/transcribe.py
! H* ] i) L; l4 y152 def transcribe(. y6 v: \& f) f; C9 `- v* Y
从源文件你可以看到是支持中文的句号断句的。" U+ M; F0 p7 h* y
& v& o4 ?( W2 |3 B7 V' S6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. }: o( z) D5 D: P. B! L7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。- L" p) {8 |8 E3 R- F
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ s) c5 q3 f6 H# o7 Y. x$ `! ^
* t4 c+ S3 A) u; J * t d4 H" o7 Z
" y/ a* J) H/ h$ i# l3 G |
评分
-
查看全部评分
|