|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! r+ X. q9 j) E# P7 ]+ ]/ {5 m2 G* ]3 [; B7 N
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。2 x n4 y+ }- K, n' {
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。9 ~; h: u( J( d
----------------------------------------4 X; e; Q5 l" g U
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 l6 n" r; ]9 C, {& |- K& F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。3 l7 h0 q M* G/ q( x6 A
----------------------------------------
& f! v# ~+ c+ h2 ?https://github.com/guillaumekln/faster-whisper: K U3 p; n& }' Y: C* n2 ?
安装如下:1 s' X0 x0 @ `" G; e! r; p
1, Windows 10
7 S" a) p9 O0 N7 ]2, Python 3.10.11
3 p Q) c7 g) i- t' |+ F+ z3, CUDA 12.1
) _6 D. C0 m5 v6 ~* G! X5 \4, 在python 3 中安装9 ?" S ]) k' w3 U4 M
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
% z% o ]# g/ q5 V6 a# d& g1 V这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
- B5 ~# y( L- Q' W# k5,pip install -U openai-whisper
/ g) Y9 m+ } a. W |0 y1 o- ?这是向whisper 致敬,可以不装
, d/ o1 w$ a. m6,pip install faster-whisper
# k5 k5 H9 X9 i W/ Q----------------------------------------
5 k1 W% k4 ^; |, n. Q$ M3 \: zwhisper 我用的命令行,faster-whisper 我用的是python。( d f2 G3 g, [5 x: v. N
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
/ {% d$ j) j. b: y! X% }3 ~3 e4 N4 i, g; ^3 V! g# M
----------------------------------------
. ]9 L) L! \2 `9 d( A' \0 Y- y" r3 q* ?: W8 i8 d* a
from faster_whisper import WhisperModel
' H$ K# N2 \$ y
3 Z4 B9 k& l7 _4 p, v2 g& Fmodel_size = "small"2 X8 S- a/ P& ^) X/ E, x" H
3 X; ~4 o8 n, ~2 x# nmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
( X& A% G8 [+ K5 e f, g
+ U2 l- N. Q/ D$ xsegments, info = model.transcribe(4 \% R U6 `. H9 J
sourceFileName, 6 W }: m" I' u' Z; L; H% ^# k. p
beam_size=5,
* O) C' y7 T. T$ A, d& m language="en", & {1 `5 }7 t" `+ j n& W& M
task="transcribe",
6 R+ T' D5 g! Y; ? word_timestamps=True,
6 j' o/ l5 l( l; Y: w* z0 k initial_prompt = "Hello, welcome to my lecture.")7 N9 c; F8 | R% i3 v; k
* u* x: S) N+ N# Y' y) O' b2 Q/ A8 R
for segment in segments:
9 H O+ w8 w! w( i print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
. j0 W! `4 y# p$ P3 \4 m
1 ^: D+ l+ C$ [$ F for word in segment.words:$ S4 a4 t9 e# A. B
' n" b3 |, O5 r6 E) o----------------------------------------
2 k; y7 B2 D8 P; W
5 E. U4 ~) o1 |2 c, U7 W4 K, ?代码说明:
5 ]! j! ]$ t' q1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ m! u$ P7 A/ R5 C" I. z但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 [' N* b& T! C6 }# w
2,segment 本身是很粗糙的,做字幕勉强能用。
( L/ G) Z, P" @6 r4 q3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
# d, `3 H) R- b3 c. s4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; ~$ H. M* P( Z* G比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( \& `' P0 _9 t) T+ {. D9 m/ S7 m/ [5,model.transcribe 中参数说明:
9 e5 i0 x- Q' C5 E你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, z9 W6 T/ D2 i0 h7 K4 a" D( b其中7 m9 K8 G+ D M2 |
word_timestamps=True, ; K8 E4 Q( \1 l# \# y; ^* B
保证了你能拿到 word,否则是拿不到的0 C& B2 t- K% w0 n5 b- R( d% c/ _
initial_prompt = "Hello, welcome to my lecture.")
2 j$ s; h3 @3 Q' E4 L1 j; c保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 @: ?4 Z; n. K8 @$ P5 H) T; K其他参数可参考源文件:
0 i7 c8 j# G \/ Whttps://github.com/guillaumekln/ ... isper/transcribe.py2 ]- G2 |& c0 Y6 [
152 def transcribe(
S, W- \% d( A& A2 V0 b/ Z) h从源文件你可以看到是支持中文的句号断句的。) H4 y/ f% [! f! H
7 L$ `; j0 v0 i% W5 {" @# S
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
, {1 I2 e. n% Y' V, A. h7 \! g7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 I: N2 S" b6 Z4 Y9 \
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
' U: n/ E0 q0 _: J2 A( |6 m$ [* |" q" }& U# p
- m6 m8 W+ q! j. F+ B! s, A. G
- |: N. A# f% b
|
评分
-
查看全部评分
|