|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
" t$ _6 `, X& {. p4 A9 N5 r
$ ~; O* L) a+ Y+ J$ e0 }: w: p借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 B2 {/ C! D0 U: e5 Z: c3 @效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ q3 \: f& a. C$ P0 J$ o' f5 s----------------------------------------
) ?6 M4 W7 r+ N i! b. M显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 G# ~* P. N8 `! b" o+ q
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。. n& h( f; w8 i4 [' A, C
----------------------------------------
: M b) R9 m+ V+ O. y, ?0 I' Whttps://github.com/guillaumekln/faster-whisper
2 y+ C8 N7 h, e; }# A安装如下:& v& v' R* q4 d, ?
1, Windows 10
9 i7 N$ c5 i9 m" J$ ]; h4 t2, Python 3.10.11
3 X/ G& p G A' ^. w: J3, CUDA 12.15 U, k2 E) r& N
4, 在python 3 中安装& [% {( b7 r6 ]: X- r0 w8 T) O
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117; ]& W/ i) M6 w8 o8 b& Q% m1 @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
! U% M! W: [- ~; H$ x5,pip install -U openai-whisper
4 p/ C+ u! [8 Q' Z+ q5 g这是向whisper 致敬,可以不装' v r) Q) V l& o& w! X5 C1 J
6,pip install faster-whisper6 ^! i- n8 Q2 e; ~/ p
----------------------------------------3 M" p6 u$ `% a' a
whisper 我用的命令行,faster-whisper 我用的是python。
% V" k% H, Q* m: q% k5 H4 ^! F( H下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
3 v1 Q6 q' R: A4 s7 f* M( u7 n2 U: \
----------------------------------------' _- y: O, b7 j! [4 m* `. D
6 }- ?1 B, i5 T
from faster_whisper import WhisperModel# r* R% K4 O" A# t3 Q
2 E: p1 H6 b( o0 v) u- R3 h
model_size = "small"3 g# w. i* w* f* M. m
1 H/ z( K3 \2 }, p" v9 O7 \
model = WhisperModel(model_size, device="cuda", compute_type="int8")
o# f$ {1 Q' q) Y4 Y
6 l _' ]' g6 l$ D" k9 Y; E( _segments, info = model.transcribe(
; Q7 b$ S7 `4 k3 z; X sourceFileName,
6 I, k" V& \: ^. E) N beam_size=5, $ W5 i. z8 P( P7 E" d8 q4 r
language="en",
( E( m! o t- T3 ?+ N% W( l( f8 f( R task="transcribe", 6 f1 Z: |6 l& P% U. E0 |
word_timestamps=True,
% W; J( u, l" v' V0 b initial_prompt = "Hello, welcome to my lecture.")
" ^& ]$ L6 R1 x$ m5 c( S" Y
& u6 F6 g7 Z* I# v7 P# f# Z4 ~6 Rfor segment in segments:/ \/ W# c O8 C3 K* E
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% J8 f& d- _7 y- e2 R, o
2 y7 n( p Z9 Y% C7 B% r for word in segment.words:
5 d4 i U3 b% T 4 t* \6 W, C) \# V' y* y. D/ Y- h
---------------------------------------- [8 B9 S' ]3 G; v/ }0 c4 S
2 u! c3 _& X, N代码说明:2 j/ ^ h$ O2 B: c. k
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。5 _# B: N) g% O! q! R/ |
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。$ _# S: ?+ V4 M- H8 Y% r7 {- T( n
2,segment 本身是很粗糙的,做字幕勉强能用。. b% i2 b e$ J0 a9 |. P' ]
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。* W& j9 _& Y& I
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- I5 h' [$ U4 f' e: k
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
4 P8 \; M+ U& Z# T: h0 _5,model.transcribe 中参数说明:; Q: Y% ^) S! z5 I3 d) ?9 M* r) J- X
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数) r2 B5 w. B' e$ n4 i3 W
其中+ v a0 f0 Q8 {
word_timestamps=True, ) v. D) [6 B( P o0 k+ k
保证了你能拿到 word,否则是拿不到的# t. D+ h% s, u2 O% ^9 ~% R
initial_prompt = "Hello, welcome to my lecture.")
/ g3 b* O- m6 H$ z: @5 d保证能尽可能准确的断句 punctuation,但是不是决定性的。4 T" q: Z3 P( q
其他参数可参考源文件:
8 W# D/ `; B7 Y' w3 u" x4 x$ @https://github.com/guillaumekln/ ... isper/transcribe.py( _& L* }! L; g. W
152 def transcribe(
; K- j9 [) ~ Z) H从源文件你可以看到是支持中文的句号断句的。+ j1 X, r6 N! V" V* D" ~
3 U9 c$ ~# Z- l0 C, o% i. F" t {6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。9 x9 b; w j: I7 ]- v
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 }# r0 K) C" N D3 p( l2 s( h! O8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& X6 K2 Z- e( I. h$ g9 v M! [2 G, O O. M. e
# S2 i; i! m1 z/ \! f+ e
1 _2 D( O+ J4 `% s |
评分
-
查看全部评分
|