|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( O: [) C: V, O% `( P
8 ?- M1 z; [8 s5 ^借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% p ?. L- b3 y4 n3 D) U效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( \0 l8 G' T, J- v; I7 T; g
----------------------------------------( J( j7 ~' ~7 R) W" T9 U6 I
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
- b) Y6 L$ k) R; c/ Z% q' v4 {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: W1 @* D) h% V/ F/ E: s----------------------------------------0 [4 \: y8 j0 L
https://github.com/guillaumekln/faster-whisper) j9 r. F# H& y7 C/ n& e8 D/ E( N
安装如下:
6 ]5 d! D& ~0 y0 W d1, Windows 10
+ u4 K9 ~, Z7 p0 _+ K+ ]- Z2, Python 3.10.11, y0 v2 p9 r, Y6 H/ d( @, q* w
3, CUDA 12.1
* c. k. i$ R" F. w. M( Q q4, 在python 3 中安装& ?: X1 O& O/ ^) N8 K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
5 ^4 \ \5 u8 e. G- a& N% o这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
' ^2 q: P/ g a* B% y5,pip install -U openai-whisper
. N3 z+ `4 Y6 `6 ]% Y5 @5 N) {: J这是向whisper 致敬,可以不装
% t0 Q3 F9 ~4 y2 S6,pip install faster-whisper
, U4 _( C" B8 ~1 c" E----------------------------------------
( O$ k4 x" E. {. t) e7 Mwhisper 我用的命令行,faster-whisper 我用的是python。
' ?4 V7 Z o! o4 x下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; h* H& l8 n% ~7 @: F, h
: M& {7 I- b1 L- B% h----------------------------------------; `& b7 d( o- R: ~/ z. j# P/ K
% L+ a: o8 j# q' ^4 `( afrom faster_whisper import WhisperModel
* ?, B9 u( N3 d
1 j4 Y1 h W( ^. Y+ {! amodel_size = "small"" ]' j, G! \2 t
* N0 e$ W9 G5 D" I# t, B
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- k, Q+ W2 r5 v1 l( a# { e- C$ I: j0 ?7 d! K! u
segments, info = model.transcribe(
3 R5 { {0 @! B& ~6 t1 i) \ Y9 K sourceFileName,
+ y, ?9 h, p* z6 p1 _ beam_size=5,
1 N4 H, Y/ J0 ]6 u language="en",
6 N5 ?: e, |; v. D8 Y! N [ task="transcribe", ( J! o* b- F0 ]9 N' B! `
word_timestamps=True, ! M: L% W- r, x1 v3 X8 m; b
initial_prompt = "Hello, welcome to my lecture.")
+ w5 M2 E7 x8 G& ^( Z7 ?1 m$ `. w4 w0 B3 f! Q
for segment in segments:! K+ Q6 G5 M# G* o2 H+ R
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ _; `6 A3 p6 T5 y: \8 C' Y
3 d/ x2 \, M$ _9 P1 s for word in segment.words:
v% e) g- H8 J) r2 D
9 {+ F* `' S' ~8 ], n----------------------------------------
, U0 W8 N, o( x. T9 q$ A P+ K4 j$ k J0 S g4 U3 y
代码说明:: @1 Y& I) Y% F
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ b/ h0 u, t; a8 D/ F! N
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. i- d4 u G# {# e; U; x F
2,segment 本身是很粗糙的,做字幕勉强能用。# s! b: Z0 }; P
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。, V% y" z) H/ G* N9 S1 L
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
' b9 | I0 R: N. h比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! J& g4 A5 D, q# I- |( a5,model.transcribe 中参数说明:( P% y( c2 K5 [" ~
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数4 C2 S: v7 N! S+ X4 {- P
其中# H# G( P2 V4 |8 h% W0 O: f
word_timestamps=True, - [; j; f( r# `& O% T6 W
保证了你能拿到 word,否则是拿不到的
: n/ T! c5 y+ T3 F initial_prompt = "Hello, welcome to my lecture.")) F! A g9 y- P4 Y& ^$ [5 `) j7 t
保证能尽可能准确的断句 punctuation,但是不是决定性的。) q. b0 h8 Z& n
其他参数可参考源文件:
0 F B( L9 e# D/ _% g9 ~& e. Fhttps://github.com/guillaumekln/ ... isper/transcribe.py
' E6 o% _2 m6 W152 def transcribe(/ H2 E- ? S5 Q3 I! |2 o+ r
从源文件你可以看到是支持中文的句号断句的。+ A) c; h% q3 U9 n x8 Y
) c# \6 P0 K, i2 K `& H
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。9 c, w8 H1 c- e) O6 U+ V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( H/ m$ w0 P5 A# J$ K7 z2 F, ~
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! `! G0 b1 |# U& h' G& k8 f. }" K: ]1 a0 x! S0 H+ H
5 [( P. y* W: B. ?% X# ^* ~# A
0 C" ~- P, B9 E/ X# k. G5 [* n
|
评分
-
查看全部评分
|