|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& ~3 }6 J. s# U3 u `3 g/ Q! C5 \! z- C& E! [
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) ?1 S. u2 `7 F( _" g/ S: e效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
: V6 A" g% O7 d----------------------------------------
i) W) e E. r" Q( `5 |显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。 ]; S; q, m9 w- J* m4 j
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; t/ I) J( Z5 I( M/ ^4 O9 {' Y
----------------------------------------$ q# P6 b9 K& @; S
https://github.com/guillaumekln/faster-whisper$ d3 J* J8 r9 `3 p) f' m3 F
安装如下:+ {. i5 x( p0 z5 F. |$ P/ g: K
1, Windows 10
8 J( F0 q- k, Y( m6 E; E2, Python 3.10.11
9 @' X/ C8 M7 n9 w y" z7 K1 T E3, CUDA 12.1- {0 K+ d/ ]9 L9 f! C8 n( R& u
4, 在python 3 中安装
+ c y0 P8 h% F* s% Q7 X5 y1 ^% hpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' q: p' A; Q8 x2 C9 a; B这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。3 W+ E0 p, l9 f& ^3 H' Z- H7 S
5,pip install -U openai-whisper
# k. i: M/ Q6 d' H4 |6 c( A这是向whisper 致敬,可以不装% e! z0 w8 H: {9 A0 n& H# Q
6,pip install faster-whisper N( l$ n; r& c& q, F" E
----------------------------------------# p3 x. z% t& g$ K8 n
whisper 我用的命令行,faster-whisper 我用的是python。
' h( |' ~: o+ X+ D3 o$ o下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:$ s# _6 c% U, J1 T r8 p
, k, p [, O7 o2 N/ o----------------------------------------
9 v6 M+ K: @+ w; H2 V
- ^8 a7 ^% Q0 S; U; `from faster_whisper import WhisperModel1 ^! q( ~+ H6 F! x5 f* B
+ U) z- |1 t) ?7 U! C9 N4 I: mmodel_size = "small"
+ A; V- V9 q6 T! m& t0 g# [( p
% P; j0 L2 b0 t+ u! N; L+ f+ Nmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
, ?5 n9 d) f) R w1 H0 @7 H4 J z5 O& k- g& w# e
segments, info = model.transcribe(
6 B% ?. H1 @) n( A6 R sourceFileName,
- R5 d9 F4 `7 ?7 Y! @, d. S beam_size=5,
6 C2 w* o& y Z1 u9 W0 ]" r language="en", , S3 \- s7 w A* O l- L
task="transcribe", 3 |0 s3 p+ O8 n& `8 V5 \/ o7 _
word_timestamps=True, 6 c9 p0 i, g3 @' I( v
initial_prompt = "Hello, welcome to my lecture.")0 m) g8 {+ h' j+ ]; w/ c
/ R: n$ w- A4 M/ u* n" P* }
for segment in segments:
- r b4 i7 S; C; G5 l2 J* D! x print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))( _7 U/ J) o- s
& s4 g6 v8 j/ s) V3 w; B. u for word in segment.words:
, D d" [9 u0 V1 ~+ T
8 }( G6 |8 S: f X$ F' N----------------------------------------, B- \5 y! [% u, w- Q
8 `9 A3 x& ~0 s代码说明:
7 W+ s: Z) N6 v; ^+ R6 B: n1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。9 R: r# V! ^# v8 F
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 _% J! `% w( q5 B1 C
2,segment 本身是很粗糙的,做字幕勉强能用。6 F: H4 u/ ~, t. r; Q% p
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 t: C: k, W/ n- X* X% }+ q4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
! f; g9 y+ g0 l; g1 k比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( A$ B, R8 g+ k+ g9 ], Y" F$ d5,model.transcribe 中参数说明:1 ]4 ?8 d: F4 i8 P! C) J
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
6 i( H7 F# ?- P其中
6 E5 r" U5 d1 ]0 y V3 H word_timestamps=True, 3 \- R" X- U) z( E7 `8 M
保证了你能拿到 word,否则是拿不到的" V1 I9 @$ I. N5 v- g! [$ N
initial_prompt = "Hello, welcome to my lecture.")9 F* h. o( x- b2 P7 w
保证能尽可能准确的断句 punctuation,但是不是决定性的。 y: g# A( A9 ^. U& o# ~5 }
其他参数可参考源文件:
- w2 u1 L$ c2 K5 {2 `8 @+ Jhttps://github.com/guillaumekln/ ... isper/transcribe.py
0 X; x! J* f1 p( b2 b3 e; k D152 def transcribe(* K- D& x4 t' }: P, E$ E6 a3 d
从源文件你可以看到是支持中文的句号断句的。* t; |$ |: Q" w
. e4 |( x' y P1 Q2 \$ z6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。1 L! X9 {5 Y: h. v: L6 X4 r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。/ E- Q" q1 F/ k! u0 J
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。' B/ m' X/ q+ p m3 p" K; x" D) @
; Z+ @. h) m; y$ {
4 X7 ~ p$ m4 V8 \ d8 `/ U
8 ^+ w& Z9 @: {! j |
评分
-
查看全部评分
|