|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ' y8 }4 p! n6 Z: a' }; l
0 G! Y% W; V/ C' x借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。$ A" P, Y* Y. q& W( t, [( Q
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。5 \# l/ \ R y" }: j1 y2 |" `+ }" A
----------------------------------------( p) L1 ~) r) _+ \5 i& m
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。+ n, c9 m2 p& E F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# j6 u# s, ~& t; {8 o5 K3 _----------------------------------------) j* `: ]: ^3 D ^0 d4 n) p
https://github.com/guillaumekln/faster-whisper6 _4 x0 Q4 @$ S3 h/ G/ }
安装如下:
# R- ^1 v9 B1 }3 M$ M1, Windows 10. }5 y* D1 k5 y" Z) c% k, W
2, Python 3.10.114 E4 k n0 m2 V9 V! G; z
3, CUDA 12.1
7 F2 S3 |% h6 q3 R( ]4, 在python 3 中安装" t. a. u( O, ?9 \: O" {
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117; Q8 c. R9 u# m: Y% v6 S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 z) I p) i+ t4 `5 o5,pip install -U openai-whisper
" x6 y% Z: S6 K5 O4 A: T这是向whisper 致敬,可以不装" C/ h7 ?+ l0 h* y6 n' I
6,pip install faster-whisper
* X8 W* }8 S h$ w, ]8 I0 o----------------------------------------
# I2 Z1 d1 F& J& d- e* b7 s. kwhisper 我用的命令行,faster-whisper 我用的是python。# `* _) C% _: r& }# H# @
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:+ }1 G$ @% M# F
* I( _& P5 q% Z) R0 m! p0 r9 @----------------------------------------* P C- X) n9 s) [5 {
# [9 Y& @: l0 j. W: w* ffrom faster_whisper import WhisperModel
9 U* m. c7 l) Q4 C$ j
: D+ _) I- A8 Gmodel_size = "small") w) X M9 Y' p5 V
9 H1 ^. y* l' q8 M0 f, d/ `4 Imodel = WhisperModel(model_size, device="cuda", compute_type="int8")
' d9 H1 h0 \# [. t( p
" L% K+ e D" |! k" ?segments, info = model.transcribe(( G. {4 ~) |: I" j! g. Q
sourceFileName, : ]5 }9 ]) P& f6 I7 z7 G
beam_size=5, 3 A/ y. b6 W9 [
language="en",
: p) s( R) p; \6 x+ i1 [2 ` task="transcribe",
, S- \9 ~8 R. a% S/ {7 c: g; L6 ] word_timestamps=True,
8 U6 e* q1 t, r0 N initial_prompt = "Hello, welcome to my lecture.")
4 Z* f' i1 Y' }2 d
4 S* ], w! B4 v7 n0 k3 H) jfor segment in segments:7 M" u) e! f- h3 O: _
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
# W* K8 G& B6 |5 x7 j3 O& S; F. |' q; k# K% b
for word in segment.words:
% u3 G! r/ t# y0 A) a" ~
& h' | m5 {; h8 ?+ T1 ]/ N----------------------------------------# G9 R: P* a5 C0 h2 e8 i
$ D7 o% o" ]7 F% D% Z代码说明:
Z7 e' M7 P. l1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。( U) N) m( d! k+ g& X' @
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。/ q0 w5 O8 Q6 p1 D
2,segment 本身是很粗糙的,做字幕勉强能用。$ ^! }$ q+ ~! s w* l0 R3 d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 S0 N2 |" U; G* O
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中5 I) E: q) x- ~% _! g
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 x0 }7 U- j) @) y; e5,model.transcribe 中参数说明:
; t% j' G: Q/ \' D5 E: ~你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
}; n+ J/ ^: Z4 E其中' m- T3 V3 { C0 n5 q
word_timestamps=True,
8 q6 p6 r% \% _* Y; h% t保证了你能拿到 word,否则是拿不到的
! j4 @! c- s# p initial_prompt = "Hello, welcome to my lecture.")6 t8 _$ C( l( \* h
保证能尽可能准确的断句 punctuation,但是不是决定性的。. c; a8 P1 ]) _
其他参数可参考源文件:
- N/ m5 K$ I2 R3 w P7 qhttps://github.com/guillaumekln/ ... isper/transcribe.py+ a! N Q7 r- y. [9 `0 t% B
152 def transcribe(6 X2 \' i& E0 }# K
从源文件你可以看到是支持中文的句号断句的。
% [ u% U; Q8 z0 B5 R2 a. Z" G3 x8 e) w V$ Y6 k
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。4 _; Y7 E' h( }7 n8 m! B7 [0 w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。% H; I9 O- O7 i. k: Z4 j
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* K2 k9 Y: i# g; [
0 R, F# K) k9 Z" i
5 I" S# J% A/ ]+ h4 g" t6 k" ~
+ d& e6 L* o4 e |
评分
-
查看全部评分
|