|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& s' o/ K2 o& q% B7 O( o
& A# _7 {1 s/ `, _/ j( z借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
0 O3 y! D9 S! Z/ X* y. c2 M9 P效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, z/ R& F% P0 S' v4 b----------------------------------------
) g3 t/ L' K! p R& g显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
0 v# W- ~8 @: X' s2 z在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。4 J: T, h1 H6 m# B2 a
----------------------------------------
5 @ |, }+ B' X7 g" C v, m3 hhttps://github.com/guillaumekln/faster-whisper
) `9 b* h0 o* \) _, |* P# V安装如下:! ?# z; V8 z( @! R# c
1, Windows 10
( c1 {* t1 @7 y2, Python 3.10.11" o; A/ I: M% \7 x4 a; {
3, CUDA 12.1
" A3 K+ h3 ^! B$ e: T4, 在python 3 中安装
) R$ X, @1 Q& @# J* t. `% ypip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
l$ j/ ]4 R2 @* l0 p这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 d$ ~! F. t, X: n8 [5,pip install -U openai-whisper& Z% s1 j x2 S; w+ B7 _" B* V
这是向whisper 致敬,可以不装
5 V( k# ^' F" b( R; _2 B6,pip install faster-whisper5 i- X/ _" u0 L/ i9 D
----------------------------------------
9 t @. ]" p2 }/ }$ swhisper 我用的命令行,faster-whisper 我用的是python。& W9 H8 K$ ?, T R
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% w0 g( ]" \, P1 ~
# ?8 t. |# C4 h& _2 v4 L----------------------------------------
. f! _9 _( \. _0 g
3 c: C7 \3 a" Y5 ]+ P3 mfrom faster_whisper import WhisperModel
+ b" @! o% h- N- J6 W! j" u/ D" ?6 `8 f" n x
model_size = "small"; o/ F7 `5 f4 ^7 D; S" B
5 q% h1 y* k! H0 U" ^
model = WhisperModel(model_size, device="cuda", compute_type="int8")& ?- j4 [$ ~1 P: u, v
' T( e. h# l6 K; B% Jsegments, info = model.transcribe(
- q4 N$ G8 \- e sourceFileName,
% u4 e: [( u9 v2 L8 X) t, E0 c S beam_size=5,
4 r' e) y- w8 ?( y4 f language="en", # X# X; U6 {$ F7 ?* X; l# a A
task="transcribe", # Y& D) @* s0 l9 T( W% K' _/ [
word_timestamps=True,
* v1 l2 C- i& o0 j$ f6 h# `, W initial_prompt = "Hello, welcome to my lecture.")& s( I# e1 k2 ?+ G
; P5 \+ ]& N& s% X
for segment in segments:( d% {6 o, D# ^$ n
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
+ ]4 J# I1 [$ p! m. F' R
- C$ ~2 i6 i. d/ ? for word in segment.words:' }, k& B U" w7 {1 [ F
: {; @* z! {2 J" r% e* \6 ]----------------------------------------
, o. e. _5 B, n7 q& v1 `1 N; M2 Z+ w* J- p
代码说明:
3 y# ~5 h" d M' ~1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。& L( D1 `8 h6 u7 r p
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
3 Z1 z* w5 m7 G( a$ k2,segment 本身是很粗糙的,做字幕勉强能用。5 X+ ]/ D* ]% L0 h$ a
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 L/ A- K3 ^& |' C7 y; K4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中/ z4 ~9 y, `" P1 b% z o3 _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! C( [7 e7 k+ |& _, N' O2 |5,model.transcribe 中参数说明:( w# X0 h9 _0 I* H% G6 n9 I
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
6 q _0 x' x: v5 |7 z% m5 c1 c5 N其中
3 M6 i% m1 O$ J word_timestamps=True, 7 q; r: u, A$ q3 W0 V7 V
保证了你能拿到 word,否则是拿不到的
" J! w- w8 @( m2 _6 [3 |. l( R initial_prompt = "Hello, welcome to my lecture.")
1 R! I! ? `' U+ d2 f* s1 u( g. b保证能尽可能准确的断句 punctuation,但是不是决定性的。/ f( t# R: s# e1 T- B
其他参数可参考源文件:
: X2 u, s3 I( L: P/ Jhttps://github.com/guillaumekln/ ... isper/transcribe.py
" g, X- G R, l2 y5 m# ~& T+ ?) Z7 {: n+ K) J152 def transcribe(
( a+ ?; ^) ~3 ?, N& K( @. ^从源文件你可以看到是支持中文的句号断句的。
7 W/ n- t. n; J* ~, ^+ |
2 A; p! f. J& X' c3 v6 |6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。! d; n/ L7 d+ ^: j2 o
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
: t( }: R1 }- f0 X8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ Q3 J4 o, l/ v$ G7 g; G5 b
7 u8 T' m0 e# }2 j4 a . y) s4 l/ Y% B# a0 j7 T! E y
' ]" {9 x& ~; m0 h# q8 P
|
评分
-
查看全部评分
|