|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 / ?, O. `, D C2 K" S
( v7 z. N1 c" R
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。3 c1 ^" L4 F9 C) r
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
# m% e# Y' y7 A- T9 d----------------------------------------
& `, f8 N; [: X V( n$ [; a; ]# v显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。1 T2 X/ L8 V0 c$ h, s, E+ ^7 i" [" n
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。) G( l& d$ t) u
----------------------------------------2 y8 L: o) O! V; B
https://github.com/guillaumekln/faster-whisper
; s! v3 U7 p C- `% p( S+ A安装如下:
; h' \) F. M" X+ w/ {0 I0 ]6 I1, Windows 10
0 Z* p% v7 i* V2, Python 3.10.11( a! A1 U9 R; k5 u% {! r9 ?4 c0 s
3, CUDA 12.1! n2 v4 m$ [) M. x4 u
4, 在python 3 中安装9 T9 G! R3 x% g7 N5 H
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
, n# P+ ^# m' C3 W3 ~! b8 ]1 L这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" ?3 B/ B( ^. Q0 |5 r4 _% w2 Z2 D; i
5,pip install -U openai-whisper
6 s# c% _$ L! _0 s9 [这是向whisper 致敬,可以不装4 V( {+ m" Z3 X
6,pip install faster-whisper
! j2 Z+ Z. ^# d3 x6 \----------------------------------------
' w6 F# Y1 H) s: t/ G, Z3 {) G8 v: G h$ Nwhisper 我用的命令行,faster-whisper 我用的是python。; t+ S( c1 {' ^$ i. r
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
( \, a4 G1 r3 n) W8 I' M1 X1 k8 K: Y- s
----------------------------------------" H+ `5 D8 K8 Q& A2 u# g
# h" I" Q Y8 T6 z& } F8 mfrom faster_whisper import WhisperModel
+ ^5 k5 D$ I5 b A. t( }
- |# H/ X# Z7 X6 Qmodel_size = "small"% M2 `1 D% c* `+ g
& W3 D' q( U( V& {" B
model = WhisperModel(model_size, device="cuda", compute_type="int8")$ [$ {' o3 }0 Q
0 \& @9 E# x' ` zsegments, info = model.transcribe(- c7 J# r b; m5 X6 H( a0 t
sourceFileName, . ~/ e. S: x- f: |0 g q
beam_size=5,
7 E) R- p- f& S) ?- W6 U* |: o' a% a: z language="en",
8 S0 p" b; T& X9 \) \$ w6 f6 a9 ^" x task="transcribe",
& s1 n4 V3 @7 D6 r1 V; M word_timestamps=True,
+ R. V7 h( [- t: S. i4 `2 w$ A initial_prompt = "Hello, welcome to my lecture.")
( t) F1 X5 X# f8 L2 l4 o1 B- _
3 p# T4 l- g$ lfor segment in segments:
) K) s+ m d( T+ |7 r print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% O4 s* a; Y- Y1 e* r
4 [ @1 F: s i! m5 P4 v* F! D5 A for word in segment.words:
0 w. G' R& M- {+ R) J3 k% ?% U
# T" T& ~1 P+ k, a1 c/ e1 o6 O----------------------------------------
5 E2 v0 H! a! J- X: @: a, L3 k: }; V! n8 `) t( R
代码说明:2 L. z# c6 m& Y& V. \
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。 _2 a) ]7 R F
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。- f2 e4 f: f4 c1 a% Q
2,segment 本身是很粗糙的,做字幕勉强能用。
5 c g1 q' a5 ^ l8 S) Z# V- s- h3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。9 m2 p4 Y1 S7 R5 Q1 z2 {+ H
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
6 b* _& O4 l- ?& y# u L8 z- K比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: q, c2 z) d, I% E% v7 C, H8 m2 c5,model.transcribe 中参数说明:
+ X. v$ ]! E7 m/ Y) n7 [你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数; F! ?* z e1 u2 Y# {3 X" r- g
其中
* O" F5 W* |3 E$ Q9 b' k word_timestamps=True,
$ H5 U, Q' p8 o2 j9 U保证了你能拿到 word,否则是拿不到的
7 o. N1 m' N# _* ^$ }8 I initial_prompt = "Hello, welcome to my lecture.") d7 J/ [' H. q3 y% ]! T& D
保证能尽可能准确的断句 punctuation,但是不是决定性的。, X( n V+ k9 g
其他参数可参考源文件:% w/ G( F$ G. s2 @, Y: Q) n% i2 u
https://github.com/guillaumekln/ ... isper/transcribe.py1 N& ~6 h/ | b+ M$ y' M* h
152 def transcribe(9 `$ S" {& H, Y `3 N
从源文件你可以看到是支持中文的句号断句的。
, Z! z! L; M9 t6 {9 R( O, h$ h7 a/ H- N
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。7 r$ A7 g4 H2 B0 @% R% [% v
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。8 }1 Q4 X: X# m3 N. m3 |
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 m* v6 W! Q9 u! E: y
: y5 j: O- c0 P8 o& Y" L & G8 k0 {$ C7 ?
( g0 @" x/ V2 F) O5 ^( H |
评分
-
查看全部评分
|