|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 % T* u% y! ?# a# d+ N. r
( N" h% A" a( Y8 v& ?
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
( `7 a8 G# E! R( l) B& D效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
# O. L: C" c9 ] H: F5 y( [. Y/ U----------------------------------------5 k: C: X8 N. N0 Q7 w0 D
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% m. T" T+ W* k P: M5 C在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
* Q. T1 M$ q! r# P----------------------------------------5 P4 [$ A; w# j# F+ K
https://github.com/guillaumekln/faster-whisper
% w9 x' H" M6 G n5 w& T+ x$ Q安装如下:/ T5 `* F+ Z3 j; W# \+ ^. v+ V
1, Windows 10* J7 y# k/ d$ g/ Y
2, Python 3.10.11
- q7 [# k8 A A4 L0 d. u3, CUDA 12.1% L1 f4 ]1 |) G0 s
4, 在python 3 中安装
4 g0 {2 G4 f$ z4 ipip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117. M0 n5 c* \/ J p( Y3 x. x
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
! e2 C, P' q& q3 d; @" Z" M5,pip install -U openai-whisper
2 i$ R4 ~* ?+ K3 X: G2 D这是向whisper 致敬,可以不装
8 u1 L& m l9 u. S* B I6,pip install faster-whisper
1 N s8 v+ u( J6 R----------------------------------------* Q# d! C' b) D/ C
whisper 我用的命令行,faster-whisper 我用的是python。
! N* O& k7 W O8 g4 z2 m下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
+ b' Y3 y; V! b0 o% [# G. _
; _+ @/ K. z1 ]. _+ Z----------------------------------------) Q- O: ]& M4 {, ?! t* v3 r
4 K. {: `, o, u+ \0 }0 i# F7 K/ wfrom faster_whisper import WhisperModel
( S, o% W% i) o8 M' ? e( u1 |) Z& S+ X
model_size = "small"
0 C6 T1 t. u& @% e- Y: ~; X! A3 u9 m/ W$ l3 X
model = WhisperModel(model_size, device="cuda", compute_type="int8")$ e2 @2 }" \3 i2 Y% f
. D7 Q+ ^+ |& D; c m( Psegments, info = model.transcribe(/ K9 c. s- }# j
sourceFileName,
# ^% a( S1 j- ?" a beam_size=5,
0 i# ^% A5 T* F& r# q/ ? language="en",
# {4 n: ]$ O) [4 p$ @ z6 r task="transcribe",
! m# E+ v, G6 f; n, \# I word_timestamps=True, 1 `4 V; |' k e9 y7 b
initial_prompt = "Hello, welcome to my lecture.")
9 @8 H9 U/ v; Y. B) ~) ]$ U' b3 Z" q, M. L' Z& @' S2 C" T9 w
for segment in segments:
c6 ?- p6 f+ `6 |! m print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)); o5 d7 J+ b0 @+ S. Q7 l0 d |
) u& L( E; i! K( x* p9 z
for word in segment.words:
* J% e8 v M% H- h2 y$ _ 6 e0 U" @' |+ q6 |
----------------------------------------7 _& A7 G, s4 Y' L5 O6 X/ q
' c6 B" M! v8 A1 T' ]
代码说明:
* ~! y6 o( X1 q3 s4 s7 |1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: |' T0 p; i4 W$ `# A) I/ p但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。7 a3 `: Y8 R7 p# ~9 [* b
2,segment 本身是很粗糙的,做字幕勉强能用。2 u& P" p& r* E/ @2 ]" x% N
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
7 Q; w3 M6 n) I8 i4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中7 p8 t4 ]( ~2 t) [' M
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。7 a) n% m7 e2 }- R
5,model.transcribe 中参数说明:
" G* w# O- u8 W" F$ d$ J你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, `% y3 d8 c8 n: s, g- b其中, i; d; f/ H# K, l
word_timestamps=True,
9 \7 A1 z, E4 o/ @' n保证了你能拿到 word,否则是拿不到的" I5 A7 l9 M' @0 U z; D
initial_prompt = "Hello, welcome to my lecture.")
" o- Q5 X- Z/ ^ g8 h/ y3 p保证能尽可能准确的断句 punctuation,但是不是决定性的。/ b6 b2 ?) ?# ^- B; T
其他参数可参考源文件:
2 S- w# o) K8 ^# U7 A& B( N' mhttps://github.com/guillaumekln/ ... isper/transcribe.py
9 G, P: m: @* W152 def transcribe(* W, T g% \( R) z8 \
从源文件你可以看到是支持中文的句号断句的。
" G: Y" }/ o' J4 D; b
b2 N9 m" o C3 g4 ^6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
|/ S4 \! f6 L s' ~7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( C! L4 f) t' q8 @5 z6 s8 N2 q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ b n- a! v7 i, O/ a* U+ n
' i& q# Z0 k& F3 J
; x1 F) R3 f/ d! _) G% a1 P9 }1 B0 Q8 n6 l; W, s' V
|
评分
-
查看全部评分
|