|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ E8 I7 p$ `. \. |- d0 S- w+ R8 {' E% C0 {
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
4 d- @( B f8 f" v# J6 L$ n效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; e5 y7 A$ f% b5 P0 \8 I0 m7 I s----------------------------------------
% U( l$ D. X, ?' }' y9 y' d5 U; r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。0 S# i- H/ y4 w ~7 V5 D
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。, Q6 J, r1 q8 n4 \) T8 s
----------------------------------------
7 p+ s1 E2 x+ n- A$ k) dhttps://github.com/guillaumekln/faster-whisper
. ]( o/ k4 R- y2 Q安装如下:) g3 @/ I0 M6 m) \+ U
1, Windows 108 k9 I# `8 |; ?
2, Python 3.10.114 Z/ R+ t8 ?+ N. ~- s3 t7 l" W
3, CUDA 12.1# M* ?, L" @5 N' e1 E! }; H
4, 在python 3 中安装$ c- v6 f: Y' D0 R
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
3 a1 F6 i$ v* g* d1 i4 F; Z这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
% r3 g6 P' _$ `5,pip install -U openai-whisper$ y4 w0 C4 \: o6 z& A
这是向whisper 致敬,可以不装( x+ ~! G' p+ `
6,pip install faster-whisper: ~; C# X/ u% X: H* J" B
----------------------------------------
5 \+ u0 y/ f7 A9 Bwhisper 我用的命令行,faster-whisper 我用的是python。+ h& g) U' q. e1 c; L* @! g6 J
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
3 s& k5 Q4 Z$ t/ [9 d# r
\/ F* n/ @% {----------------------------------------
: B! \0 b/ ]! e; h4 f& Z
3 w, y$ i. N; x; a8 D. C7 ^from faster_whisper import WhisperModel
2 d* ]) |4 o/ b* q; M+ h5 k
' M4 _2 X7 I* O) p% X" o, Hmodel_size = "small"( J/ r: O4 Q/ i V
* c u. _! j5 D$ h6 ^2 dmodel = WhisperModel(model_size, device="cuda", compute_type="int8")- K8 w% i) _& V
& C1 O: A6 O; p; E% d) D8 o
segments, info = model.transcribe(
; j& Z8 k3 o' z: L sourceFileName, ( N3 f/ w* G3 B9 \3 c8 @
beam_size=5,
" e0 S( R+ L2 F0 @- r6 I7 M2 W language="en",
9 M# k2 W2 A; t( V+ V# T# C task="transcribe", H2 V/ x' \% h$ Y" t# k8 `
word_timestamps=True, % ~0 j* Q. I) N$ k' r* {
initial_prompt = "Hello, welcome to my lecture.")
" `3 x0 O2 s6 Z! U
* w& u; Q+ A. a* D$ |( w. Cfor segment in segments:, M& b @3 P0 d# L3 q
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
# p8 } U/ n. S
9 j7 ], q3 O0 l, X for word in segment.words:, t6 Z6 ?& X5 |0 A: { V: l3 ?5 ^
% K3 |/ K- ?6 D. ^5 U3 |" Q
----------------------------------------2 F( P) o! j. ~% { B
/ e* S: o1 j. t, o# y* _4 c, a
代码说明:# ?6 X4 L5 M. W/ X1 c3 B# w
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。8 i/ u; D- g, s. `* v
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. Z7 v: L7 G) ?+ U9 L" D+ P2,segment 本身是很粗糙的,做字幕勉强能用。) K$ A+ r8 u1 G n4 H. T
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。' z8 q) q: f# z# g6 y; X2 x& }8 n
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中$ m& b7 o, m- x. k% \9 j# E
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
$ `0 k8 ~2 _+ `: r6 T5,model.transcribe 中参数说明:( p: ?5 h/ S3 o# L
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, k1 S5 z; L) Z; b+ Q7 _其中- N; j* D( k f$ j0 `5 y' J+ h9 C; F
word_timestamps=True,
+ l0 [2 l* G9 m$ l8 m. ^保证了你能拿到 word,否则是拿不到的
5 {0 K$ `; v* ]- A7 u7 S7 [2 V5 w initial_prompt = "Hello, welcome to my lecture.")5 l5 R3 `) g4 {! R) f
保证能尽可能准确的断句 punctuation,但是不是决定性的。! S% h9 C7 y; R0 G8 n
其他参数可参考源文件:
' P# i4 q. `/ x! V* G5 Khttps://github.com/guillaumekln/ ... isper/transcribe.py( w' u5 s5 z% w4 r2 f* m" P3 K
152 def transcribe(. ]% Y/ e9 G5 i6 K( B8 g7 d" t8 O
从源文件你可以看到是支持中文的句号断句的。* F. }% y+ z5 k# b0 ?' m( W- e
, }! c. |) l: \: `
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。& A; |* d$ E0 p) O, g% w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。+ N" | E+ v% w# ]8 C e2 W7 T4 b
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
9 b1 ^0 q0 R: G* M4 r; L: U* c" A0 e% a' z5 s( d
8 O% D$ B: i, k. c% o8 b* N3 ~2 k
! ?, J# g4 |: a& R+ U+ q8 _ |
评分
-
查看全部评分
|