|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
1 t8 d9 o o1 F& ]; f( A' s' z8 _, w) w& V
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) Z2 S2 w6 ?& h) t& ^ L效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。) S9 r* ~* H8 L
----------------------------------------
2 E5 a7 T% {, H' k/ g6 D; W显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。6 b3 j7 x' J( r A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 u" |4 t9 ^, Q& D0 U7 Y----------------------------------------
4 |( l8 P4 D# h; `) e' U- K: Ihttps://github.com/guillaumekln/faster-whisper+ `7 y2 T! ^3 l7 E8 \9 E
安装如下:: q# K2 ^; S% ?$ D; V+ l$ D. J
1, Windows 10
% _9 b4 k( @2 D# @- } s4 _2, Python 3.10.11
) H, r3 h) W4 Y, l3, CUDA 12.1
$ c+ ?& F- [% k4, 在python 3 中安装
8 i9 Z2 m/ h9 o5 }! d( ~. Dpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
0 G: J6 k9 u5 `5 U这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
% u1 l% s- w7 O. s" e. Y5,pip install -U openai-whisper
" g6 e: Z: j1 Y2 G这是向whisper 致敬,可以不装/ K( }. i2 O: \, ]+ U8 m/ V
6,pip install faster-whisper
4 o3 G b2 r' `. y* I+ i5 ^, C- @----------------------------------------
8 P- c; N* K% f4 a: y+ uwhisper 我用的命令行,faster-whisper 我用的是python。$ S+ q4 U2 y8 W; L' i
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 Y6 `; ~$ v, ~* p' Q$ i" n
& M: \4 h+ v3 e6 _
----------------------------------------1 E9 @8 P' A: x3 m' v4 g4 M% Q" E
; ?5 L' z, U. F4 ~& G* G, Y
from faster_whisper import WhisperModel# @( h" W" \( ]& }
- @7 ~' Q7 m n; ]2 u5 X) Q" V
model_size = "small"
s' m. l- Q2 M8 E' y- i5 X) h' b& W) [/ C9 Y+ M
model = WhisperModel(model_size, device="cuda", compute_type="int8")$ H4 A% O2 S# Y
' G7 D9 i) _: u: p+ Isegments, info = model.transcribe(- A! k( V! `* S- p1 b
sourceFileName,
9 ? Y8 |, @, f j2 j beam_size=5,
6 m. q. X! l, T% S, b c language="en", 4 Q1 s( o' `6 a5 ]# x. |% R% ]: E
task="transcribe", ; r$ b3 E0 } l* p
word_timestamps=True, . a, M( Z- b; y" D* S' s8 U
initial_prompt = "Hello, welcome to my lecture.")& G; h/ T; `" Q9 h
( e1 N. ?% h- O7 H, lfor segment in segments:; Z5 L' N; S' D" c4 X: u8 U6 ?" i; {8 \
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ @/ \! q# a4 |, Y% t( L+ |
# z- z; [# T: M: T/ n9 I5 E! P
for word in segment.words:
' ]0 |; R* m9 P( U! D 3 C5 V, Z0 {; ?
----------------------------------------
) n% S) y) v5 M d2 T% R' }+ S: W V( O a$ ]
代码说明:
; ^. ^. J$ f3 a1 q1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, m' s; g/ H* t! V2 k) V但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 f. B4 u( V$ `: v- f8 n& R: E
2,segment 本身是很粗糙的,做字幕勉强能用。" T7 ~- e% F" n2 w+ x# \
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。 G) t) h* n/ z! {/ O: e
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 e9 |% w* f- V7 a$ | m0 |比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
3 f; V* c. {9 ^* Y2 o5 r0 v5,model.transcribe 中参数说明:
- _- J/ @0 [0 r- p% i6 y6 s1 O: ^, _你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数( X, ^! X7 r& e# \$ t- d
其中
% ^- X2 Y1 h9 [6 P word_timestamps=True, * ~2 D/ `& z; ?4 B* n9 ~
保证了你能拿到 word,否则是拿不到的& I, D0 ?# b) z% [9 m
initial_prompt = "Hello, welcome to my lecture.")3 `, }, [) B8 n' ]2 n) J1 B; o. _
保证能尽可能准确的断句 punctuation,但是不是决定性的。5 d& f* W$ w! n6 t% f
其他参数可参考源文件:
+ g8 B5 F. k* u( V" Dhttps://github.com/guillaumekln/ ... isper/transcribe.py# Z* m- k F6 ?2 g( j. x
152 def transcribe($ A0 B5 \/ R% c; a5 U
从源文件你可以看到是支持中文的句号断句的。" d" U) s% F) a
a- v* {& ?' L# A6 O
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。6 `+ G% u( i) P; q
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, _( r( o3 q$ j/ b. }5 B8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。6 m9 e+ M) m5 v* f* ^
. X7 e( A- d0 |6 O5 Y ( `* B/ E: y# G: g% P* f
( A4 M8 \; m" R6 o
|
评分
-
查看全部评分
|