|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 % z4 J, {/ p) ^2 |2 D
9 z" p! [3 B' {% w) b借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- [" R" K0 [! T3 H/ Z* v效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ B, B% C; t' {- ~2 |----------------------------------------
% D# ?5 L( }2 [: \; W% c显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ P% a" \9 l* j& w在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
7 G: C4 R8 q; g0 D: d----------------------------------------
$ |" m: l M- e% _5 @/ d* Ihttps://github.com/guillaumekln/faster-whisper( W0 ?( ]; Q' o" q3 S
安装如下:6 X& [! f: ^. {4 U! p9 {
1, Windows 10+ \8 c- W: a9 `0 B0 } `8 `5 b# p
2, Python 3.10.11
8 ^ Z/ Y$ x# M3 ^; Q3, CUDA 12.1- O+ l; o8 z: \) ]8 Z
4, 在python 3 中安装
7 O& n- u3 L) u. y2 Y) ?1 e& y5 C, ~pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117) F+ E( |' | ~% |( s) h- G
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
0 S5 i$ X/ g3 M7 R. t" g5,pip install -U openai-whisper
# U7 _& s- T. i+ m这是向whisper 致敬,可以不装( x) ?) `* | K4 p5 ]5 W
6,pip install faster-whisper
0 a! S; U% l& C% E+ R# G----------------------------------------8 X1 g( k7 U' @( K* Z- ?6 D
whisper 我用的命令行,faster-whisper 我用的是python。
4 g: c+ C1 O% i; t! j下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ j' E7 N# V4 F( Z: T
" N4 ?: P! [1 d4 \1 y- c# @* l, L
----------------------------------------( n% G" n1 R3 W1 V7 z1 |
4 `+ l$ B7 u9 A1 w6 kfrom faster_whisper import WhisperModel
& f4 b; p% S# r3 c6 N6 C T1 Q+ }! K4 U0 _( ~7 E1 h( H
model_size = "small"
% D: t4 b* Z0 i9 n. G1 g+ |+ C3 E1 d( Q
model = WhisperModel(model_size, device="cuda", compute_type="int8")3 U7 ?! x3 A7 x. L, U
1 r8 R* i* T& H5 h7 |% |; fsegments, info = model.transcribe(' Y# [; ?# k# G5 \9 `# ]( D
sourceFileName,
. M* |9 J: t7 @7 p) e- E beam_size=5,
7 q" O+ h- L0 h0 v+ N' c language="en", ' |3 f; v" B, k/ q( B" ~; {
task="transcribe",
5 G# v+ j' X1 J/ Q0 D word_timestamps=True, 7 J5 t ?4 d% I8 ~
initial_prompt = "Hello, welcome to my lecture.")
2 u( E. M4 E7 L4 L, k! ~; e* A( z, `3 {
for segment in segments:5 w5 z4 f/ q. @' G$ d- v
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) [( U% u! r; p2 Y
: a: j+ f5 A; I8 D( H' v for word in segment.words:
; \' L1 Y8 N9 n% M, V
0 r# l) L3 }& J# i0 @; Y----------------------------------------
6 V5 { O- h" i1 D% A( |& J* W
' W% q8 _. o2 w; U代码说明:
+ {- ~) s' u: o9 ]1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ Z- Q+ T- S; D$ q" }8 n但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
& L9 S, J* K/ |' J* [2 i2,segment 本身是很粗糙的,做字幕勉强能用。
, h/ @* v# L/ m J/ N1 [7 M7 g0 @. p3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 a* A2 y8 h" ~( h" F9 o5 M0 X
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- x& q( o; `$ p4 i9 X
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
8 G1 ^% T/ ?% v; Q- }5,model.transcribe 中参数说明:
$ E+ L+ D) f5 W& C. g+ b你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数5 c" O6 P1 o/ B9 P
其中% D# \! D1 _6 f7 [1 z7 v
word_timestamps=True,
; y7 l9 o! u6 k: s保证了你能拿到 word,否则是拿不到的9 Z/ O u& X. h( u; d
initial_prompt = "Hello, welcome to my lecture.")5 _! _$ i0 W) c2 j4 l+ f
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ `, s! F9 i( I0 G2 m" h9 Z6 Q( m5 V其他参数可参考源文件:+ ?6 _+ h, ]/ Z; E
https://github.com/guillaumekln/ ... isper/transcribe.py' F+ P4 h. {8 X( S- e
152 def transcribe(+ w2 M+ ~# H; S7 B3 k g
从源文件你可以看到是支持中文的句号断句的。
, f, H6 Y8 |/ _" k3 i8 l7 h) n8 {3 l+ [+ `- ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
; J+ W" |; U/ g) r3 {0 h7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 G! o6 G! o5 O, m( u; N' U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- {3 S) {9 p1 X# P. M5 {, T2 g# }) L' Y; u9 T
! n7 i9 g7 u; S6 ]( E U8 A& A
* t7 G3 H. |0 `( i+ G |
评分
-
查看全部评分
|