|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ ]/ P' o( n0 f/ I; S5 I2 [5 P* W+ m
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
5 \$ m. e+ C, x效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ g9 s" |; h" ]+ I0 O. u5 f5 Z----------------------------------------
: m* C' @3 |- h, d8 u0 m# V7 }显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 d9 g3 K* o" T3 s- {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 [6 r ]4 }" s3 q5 N3 g8 r( G----------------------------------------
( o7 ?5 M- u* ?, Vhttps://github.com/guillaumekln/faster-whisper, R$ h* {* b" J0 _( @
安装如下:" `9 z& J+ n6 a5 b& z( d6 Q M
1, Windows 10
* d" i* F& ^2 U! l+ Q2, Python 3.10.11. S1 l5 l' h* Q; D" |" B
3, CUDA 12.1
8 F3 W# [6 [8 t L4, 在python 3 中安装# @: M$ B# N) S [( D& P
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
% N" _% ^. D# [3 ^) | G* z4 N这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ j/ U- e$ b8 u/ x1 M9 t& q; y1 m5,pip install -U openai-whisper
3 z. l1 Q) b b: K5 M这是向whisper 致敬,可以不装' _% k+ K! q4 `+ n7 H2 P7 l
6,pip install faster-whisper4 n8 |8 I9 U4 A
----------------------------------------
+ R6 [( z! l( _4 j! j1 V$ _whisper 我用的命令行,faster-whisper 我用的是python。" k; }3 S: T' r% R# l) i+ n
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 f$ ]: d/ `0 K4 R
\% B4 E& O, |) Q----------------------------------------
, B l o5 h( p# _
* d' s3 j$ D5 c7 s/ ]3 R1 gfrom faster_whisper import WhisperModel
4 U4 q# R: R. i/ D1 Z9 ]% V% O& w. |
model_size = "small"
' M! P8 k1 `# F4 e; [6 W: O* I) N4 {+ V: N
model = WhisperModel(model_size, device="cuda", compute_type="int8")* F! Y5 b$ q, q3 t6 G4 @$ o( m
( S) \$ H, ]. n. a: ?! F
segments, info = model.transcribe(
; i r: e9 j( D! s% L% N( E+ [ sourceFileName, 7 c1 l/ x0 v8 }, {- y
beam_size=5,
7 _& Q) j; t }/ {8 S- U' F language="en",
' ]9 T) X. j% [9 `$ | task="transcribe", & I+ c; P& g/ c4 Z& c; j
word_timestamps=True, , r% K! E: I3 g; g1 T% {' c
initial_prompt = "Hello, welcome to my lecture.")
( ]6 k1 G* l6 r# V) B5 W* q; X8 b) n% H& _% ~% N
for segment in segments:3 ?. n Z, s7 |
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 W2 I! M& ^5 M k$ ]2 j7 B, B; n% c* b9 f& h+ i G% u3 {
for word in segment.words:; n- l! g/ m @' N R
( M! R: u6 L6 Q----------------------------------------4 ]) o* L5 N! `! P
8 t1 E' ]: M" M# t. V+ O7 N2 f代码说明:" A) _. c- W8 R2 a+ U) y' G0 a% S
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
* i/ F! h, t! D) I% |8 ? h- J5 Y0 Q但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
8 B0 q+ X) c; ]' R ]: b+ _2,segment 本身是很粗糙的,做字幕勉强能用。
( ~: g# i8 L6 Z+ Q0 {% X( L; K3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。% v& _6 W4 n- e3 O- A9 ` K
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中, N, d2 i9 A2 d7 I5 a, D9 W
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
+ F. j3 j' n! M5,model.transcribe 中参数说明:
7 Q {! \9 q+ u; V3 H+ a. P你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 V! c4 {$ q. a5 [# Y0 Z8 D其中; q5 T- i$ Z5 u4 U% A
word_timestamps=True, 4 ]; D4 H- d' U( Y7 n# K6 C
保证了你能拿到 word,否则是拿不到的5 K% ^9 T0 o3 f; v
initial_prompt = "Hello, welcome to my lecture.")
7 A! N% O. a9 L/ I; \保证能尽可能准确的断句 punctuation,但是不是决定性的。
2 i4 T" p W/ P5 K5 V& m其他参数可参考源文件:4 o( M; B' P6 ]$ W
https://github.com/guillaumekln/ ... isper/transcribe.py. u/ X& f2 P: w, s
152 def transcribe(
4 \7 M7 y$ ~0 _ D从源文件你可以看到是支持中文的句号断句的。- X% K' y2 x4 L# Z- ~+ J$ ~
! a$ ^3 @% X$ [1 M0 \6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" ^: ]1 a( @( g8 A9 R5 G" f/ o7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 w3 P3 h7 _% i3 Z3 [4 B8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。3 D4 o9 x# {# o5 R, E) e) p3 `
E8 r9 y" x/ e4 |5 ]8 f
' d. S7 _( w- q: a/ G' c
+ h4 |3 h# X0 O3 }* W& m, j |
评分
-
查看全部评分
|