|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! p( ], K4 e) b: N
4 [1 Q* x6 [* j x7 t' A$ ~4 b# v& {借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
$ v4 |& c7 F. Z6 w2 x效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 P# K$ z* a- L9 g" l7 D# o; b----------------------------------------
: m4 y: i3 ]& t显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。1 p/ z, N0 m) _; o
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# Z( l9 P6 \6 W, K----------------------------------------/ d7 a7 K) V8 {6 I) I6 E
https://github.com/guillaumekln/faster-whisper
Y- S- u/ ~9 V( _9 K安装如下:
* I3 M+ x5 ]- [$ ?& d8 A1, Windows 10
! B B' S9 a' W3 O2 c# Y# I+ h- x2, Python 3.10.111 g8 U" n3 | K$ Y* H, d# o! D
3, CUDA 12.1
3 s7 c5 H- w- g4, 在python 3 中安装
1 w, G' a! [; ^ c+ Fpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 k @6 K4 v# x8 y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ \' G: l8 n) z$ u5,pip install -U openai-whisper
4 x$ k' |8 s( I这是向whisper 致敬,可以不装
0 A8 f2 j N7 e) @ b3 D6,pip install faster-whisper* K/ @/ a, J. q P
----------------------------------------8 u" y8 }9 E5 F
whisper 我用的命令行,faster-whisper 我用的是python。
( r% ~4 m% P/ w( V/ s下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
& r z) T3 ]% g N7 ?# O: S6 h1 N8 g& `+ s$ |+ |" p% e. r- i
----------------------------------------
- V1 |. A- x* _+ i2 Y8 z/ C" n
% k' {* U% g% [; C( afrom faster_whisper import WhisperModel
* n. \8 M2 K) ]9 M& [" {9 G, u3 r& y
model_size = "small"
+ ~0 V6 |5 j* k. c8 p8 p" i
" z4 ~. `; _0 M3 f3 m& i& pmodel = WhisperModel(model_size, device="cuda", compute_type="int8")) r' p7 G, m5 O4 q' ~# w
[& k0 O4 }# L
segments, info = model.transcribe(
: t# @; y! y6 f* x$ |, P sourceFileName,
1 S9 s( ?0 h& k: R4 N7 G. M beam_size=5, 6 ]: C0 v, @7 H9 B+ Z
language="en",
% \/ Y" v1 a5 m task="transcribe", 9 F* |% k' S" @( \: L2 _4 q7 Q
word_timestamps=True,
9 \' M: `8 }, [2 K- t- `; y( U2 j3 ^ initial_prompt = "Hello, welcome to my lecture.")
8 r* h0 t* Y8 ?2 k6 v, i
, H; ~8 y0 Z7 A. s# I, G6 `$ zfor segment in segments:. z' G7 i; r5 z: n6 j& {3 G
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))2 P/ g1 p, `+ v0 V
( l! q6 m; ~% B: R# }/ ?& F) B& a for word in segment.words:
' J+ L2 w0 n9 t, M, a 3 [3 X& C, v% G& n( l
----------------------------------------# l1 e- x: O( ]& a
8 t1 r. V7 g( A2 v代码说明:' H5 ~$ L% e# i2 }/ j% p5 X
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ ?0 ]% p4 c7 M4 w5 \' C; b8 W但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" R& R, d: x- @- g2,segment 本身是很粗糙的,做字幕勉强能用。7 i [6 X1 ]9 n. ^
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
: g5 e" @- r8 m+ y& O4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; f: _# f" {8 V$ b9 Q! ~( z比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。; y: |: t# B- G9 B" z
5,model.transcribe 中参数说明:
/ S' y/ M t" e你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
4 c9 Q) ^/ i0 [9 p L# \; W其中0 [. S# X3 y) L' ?1 m
word_timestamps=True,
: A% I2 D5 d( i: S( w保证了你能拿到 word,否则是拿不到的' A# b o/ Z/ O- }! J, z& t1 z
initial_prompt = "Hello, welcome to my lecture.")
6 R3 F5 Y& ^0 p1 Q8 ^6 s( ^保证能尽可能准确的断句 punctuation,但是不是决定性的。/ p) W9 |' e3 Y6 v, V
其他参数可参考源文件:' d- w+ ~ V' l
https://github.com/guillaumekln/ ... isper/transcribe.py, y0 [ ~1 g3 h; J1 B- E
152 def transcribe(: q4 `( u' \" D
从源文件你可以看到是支持中文的句号断句的。
+ o9 U4 V4 S; m* E/ a$ `8 ^% n% d q% u' G
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 q7 W. W& K) w$ `
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
- D5 |: D( R. L: R9 X- B8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
7 O) P" o5 l, `1 B
0 ]( K2 q3 s" R
5 d8 t) S% T# }1 G7 I6 x4 o9 y- ]1 L5 f+ i# d3 g+ B% A/ {5 ~2 C
|
评分
-
查看全部评分
|