|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! r6 v& ?6 y9 x. ^9 W* F$ _6 {* z& ]8 H5 B5 w- t. F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。' c- o* W P$ P# ?0 l
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 y/ {% v7 n/ L9 E
----------------------------------------
5 k m7 e4 ~ S6 Z7 R0 a显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
/ h/ a1 M1 E" ?5 v3 `+ a( F0 Y在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 y( v8 A7 V, |5 d' K
----------------------------------------2 W) G9 B1 {2 V2 f. f
https://github.com/guillaumekln/faster-whisper
4 F& K* g& o$ x, q安装如下:5 R# j" R1 y; w2 F" g5 M
1, Windows 10
& N" k# k$ W' c8 X! ?8 H3 d2, Python 3.10.11
1 q' X r) ~" [6 k" m3, CUDA 12.1
2 h o, J& j4 k9 C# x" S0 O4, 在python 3 中安装% K/ D/ L. v1 p3 i- V# `
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1174 \0 W% w) X% H! O
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。' }) V. I U" J7 Q
5,pip install -U openai-whisper
z% J: m, C: [9 N6 ~这是向whisper 致敬,可以不装
# n$ P0 O+ @& [& \6,pip install faster-whisper9 k) g% a) L; A9 J
----------------------------------------! j4 }* l+ j$ b- C3 I7 K$ J0 j
whisper 我用的命令行,faster-whisper 我用的是python。5 y4 n8 f3 @2 c$ [6 A$ J) c
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
9 u) v6 D- \4 R/ w, `2 V: Q% M0 X% k9 F( s8 g3 ?
----------------------------------------) J. I) Z4 s/ _. W
0 c0 c' w' ~2 l1 b" C- W
from faster_whisper import WhisperModel
% K6 H; T' V3 k) N3 F) S
' S( D, l) ~; \) N. G: A; mmodel_size = "small"% J) }/ P" B( C0 c. ]
0 w0 V* t8 z" ?# Q* ~, q; w
model = WhisperModel(model_size, device="cuda", compute_type="int8"); ^2 G) ?. ?5 ]& T
6 I4 p( N4 e& c" {0 F0 wsegments, info = model.transcribe(7 K$ j/ F/ }8 m3 U! Y6 r5 Y1 y! E
sourceFileName, 4 m7 |9 L& l2 o' l/ E& P Y
beam_size=5, / B# s R6 V' o
language="en", : @* t2 E1 A- v: w
task="transcribe",
, \+ ~2 x8 C2 ^, O, P4 w word_timestamps=True, ; N; m' q& Q$ b, ?+ ^
initial_prompt = "Hello, welcome to my lecture.")
( f! v" X+ V+ h4 p7 w- l5 I
6 t0 E+ f& Q- q& afor segment in segments:
! V8 V& L" Z& Q2 [% h+ J0 p print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)) W9 {% s0 a$ k+ B
) T2 w' a; z" r2 ?9 ]3 V) r for word in segment.words:
$ u2 F, N4 j' a4 j8 {9 J
3 A9 v3 K' L/ j! x----------------------------------------* v0 o* d% s+ n; J \8 c# n; c0 c
& v5 f8 B2 Y: ^6 Z. f7 u代码说明:
# d$ r u! Z# w. D1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。, R2 d5 t! h' C$ }6 P7 U0 r0 `
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。, e3 H ` R& ]- M! ?
2,segment 本身是很粗糙的,做字幕勉强能用。
& e6 F' s" o/ p, i3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。( ?0 t8 `. y3 s: @ z) x: M
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 ?( \; ~" X* X2 U比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。2 O+ A' A6 Q# ]3 |3 D, U. v+ v4 ?
5,model.transcribe 中参数说明:
3 L0 z( ?! G4 U& t. r& J你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数: x$ D0 w' r6 V) A9 e- c
其中
6 Q" j6 ?' Z" t. x# e! t; G word_timestamps=True,
4 x& d4 F/ L+ p保证了你能拿到 word,否则是拿不到的
) g7 ? U! h+ y3 S" n initial_prompt = "Hello, welcome to my lecture.")
4 M7 {: A. x% f& D; y保证能尽可能准确的断句 punctuation,但是不是决定性的。3 x, y. {/ L6 m, v8 A
其他参数可参考源文件:8 @% O5 J6 ]! ?; ~6 _0 ^4 V: }
https://github.com/guillaumekln/ ... isper/transcribe.py3 J& P9 v! D! `" ^
152 def transcribe(; N- o9 Y+ f9 d, r
从源文件你可以看到是支持中文的句号断句的。
% a0 h0 C$ k' t* l$ ^3 [, Y; R m5 s" x+ N& X
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
2 q I0 S/ `, W6 K$ V& w7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
# ?4 s7 e% P, Y/ e6 ^ I8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。7 n* m) w3 S4 b$ C, T
2 x2 ?3 L; v/ }' w E
3 o- C: f) y5 L7 ]) D
9 q# x# n8 |7 N! d& q6 r: y$ _ |
评分
-
查看全部评分
|