|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; E q3 T6 O: }
9 A/ B% R" `( W' R9 t; A8 R借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
" Z9 Y& y9 c6 _- y/ W效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
7 _6 X1 ^ E# o' Y, X- K1 s# x/ n----------------------------------------5 r$ O1 |# _3 i1 U( u3 c9 s4 K
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。" y( V! Z% G$ _2 j# g6 w0 ?
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。: h2 Z j) f5 q4 B7 `
----------------------------------------3 B$ ~- z% Q8 N) v0 ^8 b5 ^
https://github.com/guillaumekln/faster-whisper4 H( K: F+ F9 u- q" f
安装如下:
/ f4 s1 ?$ e) i. k l6 H1, Windows 106 T7 M% _$ _9 D
2, Python 3.10.11
! e+ U% k+ Y% i! g. P3, CUDA 12.18 k% Z5 F& ], }6 W* e
4, 在python 3 中安装' a) s- Z2 l7 G: C
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1178 d' r7 c& H0 j6 j1 C3 \
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。5 C/ T: [- m7 y- I
5,pip install -U openai-whisper
( K( L6 `3 c- a) x4 H6 a- t% M这是向whisper 致敬,可以不装
! }& |$ S! J2 g+ z2 D6,pip install faster-whisper9 A, ~: t+ A" ^
----------------------------------------9 m0 k. L& J2 _; P2 ^
whisper 我用的命令行,faster-whisper 我用的是python。9 {4 Y3 }8 q/ H+ B' ]$ L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:3 [8 }6 ?! l+ W5 X G( ^3 d
0 _0 d8 M& n a1 m6 g+ Q4 n; w
----------------------------------------* N& }% j- |; v) ]. v! n! P
, d/ h3 q P; p4 }) W5 b
from faster_whisper import WhisperModel
: L" }7 r' z' y" f& d6 s. O% H/ A7 U v3 q. Z& \ Z- @0 X
model_size = "small"
+ K# w1 f# K. F# M* i( q# G, U: e/ L5 H6 @; }7 W' D
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' Y2 X w1 |0 K/ }
3 g: a# n' q8 j6 z' Osegments, info = model.transcribe(% u! }9 r# a1 N! E* L4 w
sourceFileName,
: t2 w. }# u& i beam_size=5,
! h/ ^$ @ A, m7 x language="en",
a$ R3 W; k" w; l/ \" o task="transcribe",
, C6 K; [) s3 p, h; a6 S3 L, h word_timestamps=True,
& d7 h) s5 f. t1 B( ~! A& t$ O initial_prompt = "Hello, welcome to my lecture.")$ ^% Q6 ~4 o6 n! C! S; F4 W, _. r
* |+ f* j7 h- N, a9 B7 q1 d
for segment in segments:- K- j% ~& i: ^& ^5 U, ]
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))% y4 t/ i( o2 d/ W8 f( S
2 D+ E; ]/ B# O for word in segment.words:
, Y: p& U( F( \* s) z3 A4 d' u
8 t8 B8 a4 A& n2 C1 T8 F0 g; w----------------------------------------- E' ]! \6 ~* D( G, o v7 m
& z) O$ h! H4 b9 g& e( r1 M代码说明:
& i. M+ o: G. X; g1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。: D) k2 s8 @, W5 E
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。: g5 p) p6 v, p. A+ a$ i
2,segment 本身是很粗糙的,做字幕勉强能用。) |9 H* q# g/ F/ m- i( H- R) W
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! A% P& f+ u6 a. Q. U b4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中+ i) a! J, J; y g
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% R: S5 ?+ N% q9 O) p5,model.transcribe 中参数说明:
( M" h6 E; R" g你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 j1 _2 f2 |+ j$ V1 u其中
' E$ u" p' i0 [1 f) X4 V! [ word_timestamps=True,
5 V$ M6 I h" R7 p; U保证了你能拿到 word,否则是拿不到的+ Z0 i3 H5 }( U; N7 ^
initial_prompt = "Hello, welcome to my lecture.")( P1 Q0 y! v/ p+ J, S6 z2 Y5 S; ^
保证能尽可能准确的断句 punctuation,但是不是决定性的。
# w& C4 S2 \! `5 U+ I其他参数可参考源文件:
6 G6 ]7 a4 i% [, ^7 A* nhttps://github.com/guillaumekln/ ... isper/transcribe.py0 o B9 S3 x; f( x' v- K$ N
152 def transcribe(
+ E) Y- W |) K+ T: I2 e, r+ O# O从源文件你可以看到是支持中文的句号断句的。
$ V- {6 [1 F8 ]- @& G* z. g5 O/ }1 L, ]
- U1 c' O" V6 e( @6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。6 y9 {$ D% Q% p
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。' f) f) t' g+ r4 u
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 a1 V, r+ L% H& g O; B% s7 s
6 ^; z* V) s. X6 z) t) S* W" X; x. B & [0 G" \3 m3 W6 G+ m
# ^8 V! I4 X$ M7 A. x" P1 u |
评分
-
查看全部评分
|