|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
) i5 X) `$ b! Q& M8 f& u8 p1 O# w7 i1 ]8 ?* ~' \- L: l
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ |' q& z3 q J' n0 A1 n; i效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ K4 V: C6 Y0 [. Q& I4 ?0 T4 W----------------------------------------
7 a9 U m" B* k* j8 q% |显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。( w! ?/ @0 b/ R: ?( X1 Z* |" g
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
9 j" c: P+ F. [- k' c1 E----------------------------------------) f2 |- l* d) E$ {2 P" _
https://github.com/guillaumekln/faster-whisper6 R: k1 D' V$ h) a: \2 A$ U7 a
安装如下:* ^, }& m" z5 ?- _8 W v
1, Windows 10
+ M% G" i( ^0 X+ j- T. z2, Python 3.10.11
( R+ C( d& {7 Y- o, }* A& m3, CUDA 12.1
s+ a' c& u7 q* y5 X, ?" r4, 在python 3 中安装
. q! x9 A* k2 r7 `4 ~, `0 W# |+ cpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117/ J7 n- p- e: V- J& {6 _
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. `4 n$ k+ h1 h& r5,pip install -U openai-whisper
) M& H9 f1 v4 c$ s这是向whisper 致敬,可以不装+ E, N) ^- ]$ s! g# S4 K& k! S
6,pip install faster-whisper
. ?! @, {7 p) s5 ]----------------------------------------& l/ B9 b$ G: c" D7 Q: T" t
whisper 我用的命令行,faster-whisper 我用的是python。
" z1 j# Q" @# Q L下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码: K# V8 n h" T' h( Q& F2 y! E/ K
% I( g; N. @+ t* g9 O- T, @----------------------------------------% c+ n, [4 c( H4 I
$ p; J. ?- D- n5 N! R0 Y. zfrom faster_whisper import WhisperModel* y, S0 G$ ^; X5 E7 S8 _
! v0 |5 x" E- T- J
model_size = "small"& h( A. z- c# R9 c4 [! `6 A7 G* I
1 i5 g' Q, h, ]) T* c3 c' h
model = WhisperModel(model_size, device="cuda", compute_type="int8")( g. `& A4 Z( x7 I
/ R) f8 S1 B+ H0 u3 U8 l
segments, info = model.transcribe(
2 U" B% n! T! B- q& ^) | sourceFileName,
1 k A2 Q/ C M2 g! R4 A9 J beam_size=5,
$ p8 }, H6 n! A7 ]" J language="en",
: }. w1 @5 w2 l( F8 r task="transcribe", 6 e- w9 T: ]3 n! a" |) Z
word_timestamps=True, 0 N6 n! @ \ C$ h
initial_prompt = "Hello, welcome to my lecture.")
7 |/ X3 J* [8 O+ O4 ~! L. J& H; q, s. L' ^! C' y) B% C
for segment in segments:
- h& X8 P; z; b7 r0 E! s print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))' I- H( q9 C% q+ J2 K
1 s% D' y% M) |* v, ?$ K: ` for word in segment.words:
* u G6 o# O$ [0 M. R5 k& k
& }8 \- t! b' T( h+ a) p----------------------------------------; A3 T4 }6 m8 K3 Q' C
2 U- ]( K! B8 Y9 P, f @" y代码说明:
7 _) {1 ~/ ?+ ` \1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
& L) g+ ?/ i- R. W" ~9 O但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 Y' r; p# O6 A% E' Z2,segment 本身是很粗糙的,做字幕勉强能用。
& J/ J; ]4 J- Y/ U& v3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
# r: p2 @$ S8 e4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中3 o+ U5 i1 \0 {' G
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
7 l: Q' j/ ]7 T* V0 e W5,model.transcribe 中参数说明:
2 |9 `6 z; ]' N0 N; ~; u你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
( D2 O% ^. E+ i- D3 v6 f9 T其中
/ g4 A2 p; X F# | E! i1 t8 ?* r word_timestamps=True, 8 }9 h+ E0 E/ ?8 ?3 X6 u6 V
保证了你能拿到 word,否则是拿不到的
7 l. v, C# V! Q" k$ b initial_prompt = "Hello, welcome to my lecture.")
$ y- a; @; H, N' H' L, Z9 O+ _' G保证能尽可能准确的断句 punctuation,但是不是决定性的。
0 Z- s0 ?) z8 v& A# K其他参数可参考源文件:
: o9 F3 s; v; h6 j1 q/ xhttps://github.com/guillaumekln/ ... isper/transcribe.py# v( X: ^( E y# X; V! u
152 def transcribe(
1 k3 h0 K4 l- Y+ A$ ~: F0 o从源文件你可以看到是支持中文的句号断句的。4 x/ S& Y9 l5 J% D: v# P5 ~/ }5 Z
3 r& {' I; U3 B& U4 U! ^' p) k4 {' @
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。" ^( S: [3 O0 F9 y. ]; c% R& \2 `7 E' C* A
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
- K$ |3 @; C, K5 p `3 s8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
; x6 a2 e* c; w3 i) L- O3 p! j9 I* X5 w. _/ O5 y7 ]( u5 |, w0 @
, W+ T- `: O" G) Z% L: P5 ~) i9 V, _
|
评分
-
查看全部评分
|