|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 D% ?5 [( ]( T# s N1 N' B% c, |5 I# f1 _9 q1 i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# J! g' r5 g9 v, r( n效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。: ?: |( m* o2 H' ~
----------------------------------------
+ v1 R: b) K0 G. H6 j9 L0 Y: M显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。* ]6 m- m* ~; P7 r" e, W7 l
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; Q( j* a- }' M+ I, o* o
----------------------------------------
1 O1 }( `# V, o6 t( Q" P0 Khttps://github.com/guillaumekln/faster-whisper0 k8 `5 R. z ?
安装如下:: Q9 L7 ]- ^1 V4 O2 R
1, Windows 10
3 X! n) x( U7 d- S Q2, Python 3.10.11
% s; t" N/ b3 z3 E) M3, CUDA 12.1
- f7 P& B; O1 K4, 在python 3 中安装3 L4 W% M% P* R
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
" i; i$ o1 m3 Q; o这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 \5 Y* i! g: g N) S! b5,pip install -U openai-whisper
. S6 M& M: m) ~% W+ {这是向whisper 致敬,可以不装
+ J2 s$ N( f" J; j v Y( h6,pip install faster-whisper
3 C, G1 W5 P& ?7 v. D0 k+ s* R6 c3 p----------------------------------------$ Y l8 ~, f) |4 I
whisper 我用的命令行,faster-whisper 我用的是python。
% E5 b5 y* W6 n7 ]9 m7 i4 w$ B' m% y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 k. ]: o: v9 E
2 h, n# ^# H( j% W( H8 e z----------------------------------------8 K/ @7 [) B4 k/ g B
9 _. S* [7 B d7 f1 E! Gfrom faster_whisper import WhisperModel+ o7 I; }/ \0 t
1 v3 ?8 `# Q C; emodel_size = "small"
* o$ h% X# b. G# C; r/ n' B
6 [4 D; s9 Q- k/ [model = WhisperModel(model_size, device="cuda", compute_type="int8")- r6 J, B z O
% m7 s# E" \' U! o
segments, info = model.transcribe(
7 |, G" L& }* Q- n: [$ A3 x+ n sourceFileName,
9 m& C* [) g- g7 L9 g7 ? beam_size=5,
' J/ G& t# ^% g- e language="en",
8 g% t! S0 o/ \( E task="transcribe",
$ s! ]. J9 \3 J/ v( d word_timestamps=True, 0 g: v, R1 z# G& m8 k1 Y
initial_prompt = "Hello, welcome to my lecture.")9 Q5 J0 h' Z$ |5 j7 M% P- N- e
9 j0 e- C0 x1 c1 ?. |for segment in segments:. N8 }* O. g b' o+ R% H
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))" @ b. B) C' o* S
5 a+ I: E3 q9 K& `, T7 S for word in segment.words:
( c- H1 [4 R( S v, t4 e$ y4 g9 g# o( }4 Y
----------------------------------------3 n0 L, K3 h1 ?# t
0 `0 i& y+ R! J6 U/ |5 M4 e代码说明:
7 H/ v! V! P7 c* O. r( M$ P1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
8 h% y( l* ]% k" R+ u5 P但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
0 W* i9 z( P0 E' ]) J2,segment 本身是很粗糙的,做字幕勉强能用。
: _; [! I R: R+ I9 N" F3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。5 I" M% Q- H/ n+ a* I5 p
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中* {- N, h8 F4 G9 r
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
" w- u- \9 W: U* q5,model.transcribe 中参数说明:
K! Q& G' C0 F: G你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 [. }+ H* ~7 B/ }其中
* F5 M* p5 e3 U* K word_timestamps=True, 1 P& g4 X: W+ G( Q
保证了你能拿到 word,否则是拿不到的% C& D% `5 ^6 P; |: g7 z) d
initial_prompt = "Hello, welcome to my lecture.")' t0 q( v+ p) h! \. I2 g: u8 B b
保证能尽可能准确的断句 punctuation,但是不是决定性的。% {; ^6 i8 S- g' c. {
其他参数可参考源文件:) `. w/ t. z' E6 O1 w! u0 |
https://github.com/guillaumekln/ ... isper/transcribe.py/ ~' m/ _) T2 y1 Q9 B
152 def transcribe(0 L! n0 H0 y& k5 D; D# P# Z
从源文件你可以看到是支持中文的句号断句的。
! W% D: g- @- \3 V. {; ~% X# d: h& B: Q8 @( Q
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。: g. D' `: s; w1 ?) w+ F2 _8 b. H4 G5 a
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
) w& \, _) U2 y; O [4 h8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。; W6 y: ]1 a2 m: p/ C
% ]5 e3 r, k2 G/ q
2 D6 j* ]5 k1 O; x* X2 r
1 ~7 n% L% m2 O- R |
评分
-
查看全部评分
|