|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 8 k- J9 V2 f+ A7 e3 i
9 j0 M. x6 I( l- Y0 E$ }3 c3 D+ W借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。: t1 i4 F+ ?; r ]6 L2 g+ l6 e; \
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。7 v# V4 }0 K7 e* N! m, |
----------------------------------------
, W' A/ K9 X2 K9 l% _4 p显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。7 W% k5 t% @" s& l
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。( K5 R9 v1 A# P% ~7 G& o
----------------------------------------
& D+ a* ?; e. t- W. o/ V& qhttps://github.com/guillaumekln/faster-whisper1 M% H0 L1 q1 ]/ B6 ?! c
安装如下:: w# P# [9 R) h' {
1, Windows 101 ^9 l1 R% x3 E- J: q4 E) d
2, Python 3.10.11+ n9 k& b0 N$ s" c% R) o- F# A
3, CUDA 12.1
1 t2 J; H+ m/ v" f- I2 V4, 在python 3 中安装
Z1 T- x( v, I* j' F3 opip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
$ |1 K' K: H9 J' _ z) H这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
; X c- N4 g# A4 b$ P2 N5,pip install -U openai-whisper
8 K5 x: p& n; ^4 j' q6 t0 A& n1 `6 G这是向whisper 致敬,可以不装( S6 R/ B3 u0 \ s0 R
6,pip install faster-whisper" t; e' i, [; L0 ^
----------------------------------------
: L5 O0 c4 a0 U" t( Z |) h1 Cwhisper 我用的命令行,faster-whisper 我用的是python。
* Z& q% i8 J) v7 W, r7 Q下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
( I. V/ ~3 @* y' \2 p3 O* h: h8 d; p: J% k2 q
----------------------------------------* M* @2 k/ a5 p: Z: v1 w
( M: A8 S( Q5 [7 V, p% q7 R qfrom faster_whisper import WhisperModel
! h& Y, X% ?/ W2 t/ E* ^/ Q& p" N2 q; ^) m6 w) U4 |
model_size = "small"
0 ~( E4 F; @5 U) @4 a1 E7 J7 ]+ C0 ^6 D! \$ Z( d' ?, A
model = WhisperModel(model_size, device="cuda", compute_type="int8")
( L1 P. I# U- ~' P# f" i
" M- _6 k& I8 {4 p0 U9 v+ ^. Msegments, info = model.transcribe(2 \! W& h5 Z X, p) p4 l
sourceFileName, - a- E1 O, @: g% ~4 a
beam_size=5,
" |" s6 A8 O& P& o0 X* _6 q language="en", 0 b7 N- @, ]/ E4 Y+ X% X% n
task="transcribe",
) n" m7 _8 l/ Z, `- G1 C word_timestamps=True, : t& s1 l& e: j6 B
initial_prompt = "Hello, welcome to my lecture.")& ^2 D7 N4 t# ^. z" N, S% Z$ v' W/ H' V
% g4 s. z6 Y/ k2 c7 Y; P. s
for segment in segments:
! y/ B& J( |2 g' S4 Y print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))% |' [8 N7 k) t3 t$ t
9 R& e) q" z0 o# ]- P7 l' k
for word in segment.words:
9 u- ~# c/ q: z- P/ e
4 Z3 D- x$ D" R6 w----------------------------------------
) N/ h3 ~; ?" Q% F4 x3 M5 S, m8 N1 G; T$ X$ b0 g7 C5 C' N
代码说明:
, w6 c% V/ m& ?7 N8 {2 A. J1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
% R a1 y+ N* h" A但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
: T: s: ]3 e6 ?5 c- t4 M+ u9 R+ ?2,segment 本身是很粗糙的,做字幕勉强能用。
/ h9 a3 F# b7 m# x$ P' O) t3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。1 k! ?# {: y$ k$ U9 b
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; ]" y2 Q# i ^比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
1 q) |7 I8 A2 |5 ^1 b" D0 }1 ^5,model.transcribe 中参数说明:
3 f' U; e* \7 f7 k6 d! F2 R你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" | W! [& n# I" `$ r7 v% t% R
其中
7 q' M/ M1 U {* A/ H; K word_timestamps=True, : O; `- F0 ^) [
保证了你能拿到 word,否则是拿不到的
: V6 y) @; @5 u initial_prompt = "Hello, welcome to my lecture.")1 {+ u C4 Q. O) L; e
保证能尽可能准确的断句 punctuation,但是不是决定性的。
& O. }0 `- ]4 \: H+ C其他参数可参考源文件:5 O4 h+ E0 B" Q8 C( U: _
https://github.com/guillaumekln/ ... isper/transcribe.py
& I& \0 Q6 c: y0 u; u152 def transcribe(
; Y/ V/ A/ w* Z x. }8 t从源文件你可以看到是支持中文的句号断句的。
5 M* {" W* F$ j, t# G
+ m7 o4 `% c4 s( V8 C6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
& g4 K7 U A+ w+ x7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, ^0 F3 f' z3 X) A3 {5 x+ ]4 ~8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
3 \5 @# B7 H% B
+ |7 k& M3 [' r: a7 x, @
2 T. S9 q; c# Z4 q, y3 I* v& J! B0 q$ f- f/ E
|
评分
-
查看全部评分
|