|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 8 T% n6 P+ Q# x3 D- j7 Q$ d! @# V
6 k- P2 B. @" I$ i* i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。2 N0 E7 s9 T. A
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。& b' b; O6 _! t
----------------------------------------4 k8 w1 y* ~) e$ U1 I# u7 p
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 g) l( o# \8 c在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
* z3 U% f0 o$ ~) c----------------------------------------
* D2 s$ R0 R' H; L& C( p: Yhttps://github.com/guillaumekln/faster-whisper; `1 K9 l1 o; `: }
安装如下:
& V- E4 N5 P& w/ X) k: W1, Windows 10
7 d+ v$ R' z. L( ]8 f' |+ \, E2, Python 3.10.11
' |# ]6 b$ r3 g+ ]; \3, CUDA 12.1
2 c" d3 d1 ^! Z% i9 k' Z& S4, 在python 3 中安装
: o9 q2 U9 p4 G4 c* p" F$ Lpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" b) N0 K- l k0 B8 h
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ o- E2 v# ~ ~8 f& ~ W# ~& d
5,pip install -U openai-whisper5 g% G& z) J$ i9 L h }
这是向whisper 致敬,可以不装
& e( M- {: y3 t7 b* E- i6,pip install faster-whisper4 Z5 W& {2 G+ `$ G3 L& K. b
----------------------------------------
1 P3 @9 E7 v5 Iwhisper 我用的命令行,faster-whisper 我用的是python。 m2 N5 D- ]$ O x+ \5 r: j2 a
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
6 N: ~+ D$ q" O$ h+ V: ?9 U! ]# I" H+ _0 d2 D! O3 q$ ~6 T$ ?
----------------------------------------
4 e$ e0 u: {; W' I6 {
9 u/ p; C( E- N7 @6 d. i' D* ]4 Mfrom faster_whisper import WhisperModel8 J) D- i3 W4 P' r% `' I" _
0 j( L' b/ }6 }7 i
model_size = "small"
* s. }0 `; q- ]5 c9 K$ m3 c) ]- }# j: q# z
model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 E$ t% ?- d7 _; s; e" u. S
# z. \. u) {, y6 |8 `; @segments, info = model.transcribe(: x" k/ v' p4 q& P/ E; h. _
sourceFileName, % h- p# U9 p$ @: d6 P9 _8 u. x
beam_size=5,
0 O; E5 P1 ~: ?* D \" } language="en", ) a( h# Y$ s/ [6 c( N ^
task="transcribe", 3 R$ L; V" g5 Y) P
word_timestamps=True,
' S3 Z& G# @" b) i5 B q) Q initial_prompt = "Hello, welcome to my lecture.")* t& N# \: g3 K( z/ H/ T& Q6 V
4 {7 }3 E2 e: A+ \for segment in segments:) l0 m( B" Q. x2 G) @
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" X5 E: i" G( B1 `! u5 u8 ^8 C: Z" ]$ d: b6 G5 y6 ]
for word in segment.words:
1 ^4 O+ f9 _, {3 f+ T
( g5 b( q2 [4 d% X- q3 e----------------------------------------3 C @5 w; O9 A3 J
]8 E0 g! W9 M1 V9 p" C' O; j代码说明:
& m5 U7 K* a7 q1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。8 [) q5 N1 |0 U0 X( h
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* N; C/ ^' F% @9 [/ f
2,segment 本身是很粗糙的,做字幕勉强能用。
- M, O, i9 d7 j& ?. y3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
?4 K+ Q x' Y1 [0 ^6 P, r: B T4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中, n$ @9 v! v0 x4 E1 g* c2 r
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。& [4 ~, g& l- O8 `5 N+ k F: n
5,model.transcribe 中参数说明:4 F/ K* W/ @8 h' H" D. u& V
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
# ]8 J, o" d D/ R% V8 n其中6 h- b: n9 ^+ j/ f2 m2 R
word_timestamps=True,
$ E$ D6 J! m7 c8 ]/ c保证了你能拿到 word,否则是拿不到的
7 S% d( X8 @" I- I' @8 u& v, P/ x3 ? initial_prompt = "Hello, welcome to my lecture."): L3 J0 J4 T5 _- m
保证能尽可能准确的断句 punctuation,但是不是决定性的。
. u& @4 R0 ` o4 Z! b其他参数可参考源文件:) Y" W+ Z& C% [) y) q+ e8 z& w
https://github.com/guillaumekln/ ... isper/transcribe.py% |3 Z1 @8 _0 ]
152 def transcribe(. X. `6 {) o2 c+ I
从源文件你可以看到是支持中文的句号断句的。9 _9 T9 X3 y3 o% ]4 v
9 w5 @ v6 O8 i6 @# S
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。" E* E1 x: E( S4 i
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。0 D' f- |" s8 m+ G, _, \; t
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! v$ z- _$ y* u$ o4 E) o
1 }0 |# o8 j9 H6 E, F : z! k1 K: V* l/ X5 D+ C
% z& y; m2 h) r$ l2 q |
评分
-
查看全部评分
|