|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 t7 g: B! H* o4 e# h
) U) z2 j# D; d( Z借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* u) R2 D9 ` B1 E" x# H效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。9 w1 e$ E$ i2 P0 K& S
----------------------------------------
' ~: v$ o* p6 |+ {显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。6 c0 s4 d( M( V* S* }/ n
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。7 Y$ Y5 Z9 V% h# k
----------------------------------------
" F4 V" g2 v: Z, s! B3 y( Vhttps://github.com/guillaumekln/faster-whisper
$ r( f$ c2 f* m ]! b* h+ a安装如下:6 R' ]9 n( C" V
1, Windows 10
& h% L. P$ P. J) J$ O& {* r2, Python 3.10.11
* C2 G% A& s2 h- l5 n3, CUDA 12.1
. g* g7 b: g0 o; F; I4, 在python 3 中安装
' [- z1 t/ Y; F% Gpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 T+ C' P7 p i6 U; \2 o
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。1 b/ `, r! {6 [0 N) t a
5,pip install -U openai-whisper
T" B- u5 W2 d% z8 }3 h这是向whisper 致敬,可以不装' v) k0 N2 U7 S
6,pip install faster-whisper) M! }+ `3 e5 z9 ^) {" |
----------------------------------------) P% W' E& N" J1 {: Q! T* Z! r
whisper 我用的命令行,faster-whisper 我用的是python。1 q, E( O1 V Y5 N. K
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:% F( V6 ~' J! A8 v( \5 ?8 K3 M# l
7 q: o0 v4 R) S) Q3 |* V6 H* |% w ]
----------------------------------------0 @8 I9 C5 L8 u9 @# ?& ?
/ I7 \( A" c9 vfrom faster_whisper import WhisperModel
# R# m/ n# ?7 P& m/ m5 O1 b7 z7 F. k
model_size = "small"
; C# |1 o* k1 k) v' ?2 i* m2 w, W
: R! V1 z9 e. J/ L* ?, Hmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
. U% `, e2 g! [/ n
$ g+ }7 {4 K; g1 M! C7 hsegments, info = model.transcribe(7 A$ y3 _7 A2 {6 {
sourceFileName, 6 }; K5 k. n, |
beam_size=5, 7 N7 P, C! R; y; k( W+ A8 E
language="en",
3 P k' a* f4 a- L task="transcribe", 9 b4 r- N* A4 m: X" E
word_timestamps=True, 7 d& b! F6 \! A/ ~% A! w1 f4 Z
initial_prompt = "Hello, welcome to my lecture.")9 d4 p( Q4 x: X+ s) o2 M
! s% Y; _8 e. x$ i. Y
for segment in segments:7 y# G, G6 h+ |+ T1 v; w
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& L5 Z# O% L4 G# Q9 e. K m* k% {9 U; z( h0 s1 |4 ~
for word in segment.words:
2 i4 a% T: j) Q) P4 w0 T! e% f8 e/ B
+ s" Q# A5 {" }- `9 q----------------------------------------
9 V: i ?3 K4 r$ G& B }
& f/ e2 c5 e3 |代码说明:: F; E2 ?/ h( c/ ?6 |
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。: a: J6 p0 M8 g6 s
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
2 ?+ E; Z1 r# m) f2,segment 本身是很粗糙的,做字幕勉强能用。
% Q3 k* k2 m. s' n3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; z; y5 F- m! B6 }0 |! p' N4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中6 d7 _7 k Y4 y Z5 d
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。4 l# j# V# z% e" f9 o( }
5,model.transcribe 中参数说明:
' i+ c+ L; ?( i& r2 r- }/ s你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数, X. Z9 ]! K" T; u0 K. ~
其中
' b( ~9 T* o' [1 \% H6 j: P word_timestamps=True,
5 u3 y. e a! {! _/ i7 X) ]保证了你能拿到 word,否则是拿不到的
7 G9 K# F& B9 T7 {+ W7 J initial_prompt = "Hello, welcome to my lecture.")9 t( e1 _8 ]+ ]) @4 x. w5 p
保证能尽可能准确的断句 punctuation,但是不是决定性的。1 _5 g$ Y3 r- P7 n+ I& P6 M
其他参数可参考源文件:
4 ^) P' b( m2 ^' S1 fhttps://github.com/guillaumekln/ ... isper/transcribe.py4 I G) D" H# v4 @" E
152 def transcribe(
9 q$ ]8 s, J: C1 E& f: ^从源文件你可以看到是支持中文的句号断句的。
4 R P; |! [# }& R- q$ h! G" v' d% [4 Y" B
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。6 g6 ]5 r0 H: K! B2 T
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。3 Y. o6 d/ C3 n- F2 G, A
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。4 [6 R6 T9 y) S- j5 z# y' D; M$ J- ?0 z
/ _: E- p T" j% [4 u% y1 p
# p. {9 ]6 ^3 A1 A$ R* h1 d1 F" e4 ]) c
|
评分
-
查看全部评分
|