|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 q; C3 g- e, N, r& o; N
# A. ^4 @( D& ~$ Y. T5 g, V% K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, }7 [, _" Y9 ~) f+ q5 O. w, |! u效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ ]# S. d* B5 e8 {) m. W. Q----------------------------------------1 [0 R0 Z- ]; T1 D/ Q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。" _, {* Y1 u" k1 X1 Q6 p8 d
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; L: `* f8 _$ r6 O0 C2 k
----------------------------------------
& Y3 m( R/ x& ihttps://github.com/guillaumekln/faster-whisper
; L6 ^" T! B; O0 E& z# ]# x安装如下:
$ ^' T9 T0 x2 |& K' a& A2 e) S/ d1, Windows 10/ \3 f% B) n1 k& q6 f
2, Python 3.10.112 h. A5 p5 y; k( s3 W
3, CUDA 12.1
" J, v* u5 Q5 Z7 K9 `; v4 I% b9 k4, 在python 3 中安装+ i( u: s+ y$ Q: O4 N! o& J; d$ p) P
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1172 a2 z5 J. [" s( i1 U' ]0 _. H) r
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 m7 ~4 ^* o9 A6 Y# l4 m5 T
5,pip install -U openai-whisper
4 i2 j- M! x. H这是向whisper 致敬,可以不装
6 a" N2 H( d6 P# ]4 f8 Z2 G6,pip install faster-whisper1 C/ h0 j7 S& \3 g$ O9 `
----------------------------------------. @! Z; t' v8 N$ B( S6 R
whisper 我用的命令行,faster-whisper 我用的是python。
) e$ Z* ~& U5 w4 `- L下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) H4 R v5 s- g: A- k# m9 P' n6 S
* d A# T$ L9 M% g6 X----------------------------------------
, y3 X# k4 Y" S4 f2 Y. K3 p( j* k/ t
from faster_whisper import WhisperModel, m a K9 S! A, N5 {
- ?& D. S/ I, w/ ]& Mmodel_size = "small"
+ q" ^6 d: L& A! c3 R
5 ~$ g( n& q4 R6 K5 K0 J9 I. x% Amodel = WhisperModel(model_size, device="cuda", compute_type="int8")! a% y% P, m+ j
; p' w) h' L: O. h
segments, info = model.transcribe(
: Y; |7 A8 r/ X4 g+ g9 h sourceFileName, 0 R7 j, F8 }& e) n- B: X( C+ Q, x6 }
beam_size=5,
5 N( H1 b, g* h/ N3 z language="en",
& P6 r$ f4 }, _3 V$ @ task="transcribe",
" i6 O9 N+ q3 h0 R( |% `0 M word_timestamps=True,
: X( a, A3 Q$ E$ D3 Z initial_prompt = "Hello, welcome to my lecture."); z! A+ C# h% y& g
5 M0 g. o/ |6 s* `8 z9 g% ]3 B
for segment in segments:
( ?! U/ d9 P; Q% I, Y print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
, i7 Y; D" X1 g7 E* y. _$ b3 u
! {- w2 g, G& M# G' s3 G for word in segment.words:. X0 g5 t e6 ?8 t" @ ~/ |
# v( o9 `0 k7 N3 G8 A8 I5 ]----------------------------------------0 d9 i" |3 O( h8 N* f
: ?8 w$ r% ^! o( f3 m1 Z$ X- Q代码说明:' R0 N. Z: L L8 o. v* ]+ N! a
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
W- l5 P& i0 H! Y3 o- i但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
6 L( |2 U+ ~3 E6 d; G2,segment 本身是很粗糙的,做字幕勉强能用。6 m" r K9 a7 H
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。9 ^# |9 t; s: Q2 b/ _2 u
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中8 w* w( B- ^" y) \* _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
* S" {- ~) {3 n- v5,model.transcribe 中参数说明:
9 Q/ T' f# |! | X: N( R. e你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
$ J! u1 ~% C& O: e其中
' t$ \6 c; \1 j n, k word_timestamps=True,
6 \# v$ G9 Y0 F保证了你能拿到 word,否则是拿不到的4 K5 k2 z; m3 H7 D
initial_prompt = "Hello, welcome to my lecture.")
6 {4 J. P- d1 c/ b) x; y, i保证能尽可能准确的断句 punctuation,但是不是决定性的。! r/ |# i1 a/ a, N3 u4 W W- D
其他参数可参考源文件:& U" o6 _) u9 v' a) N6 |
https://github.com/guillaumekln/ ... isper/transcribe.py, H/ M; l: L+ E: t3 _
152 def transcribe(
1 o, M: E$ r5 p! Y从源文件你可以看到是支持中文的句号断句的。
5 u; F5 ]5 i. `) W7 g/ l# _( e6 G b/ ^8 R7 m/ s8 r
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。, ^4 }' Q& f5 N j3 Z
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
' _& w N: R0 D4 I* {. C8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& @: ?4 V" h$ l _( i2 H2 N$ m7 g$ h# V$ g7 p" R
# d r1 H% i7 O
, O0 ~- l& ^+ i( {2 B1 ]( p6 [! }
|
评分
-
查看全部评分
|