|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
. L% u h) d! Z8 J# |' w" i- m+ X1 N: o! B, i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
. L9 h2 V1 v+ A: K+ ^6 t$ |效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。- S/ V n6 e* `* {* Y' _8 V8 H
----------------------------------------3 O* y6 l1 h; Y6 u
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。! p* ^7 J; _0 \* u
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! h4 ] n% K# @: @ v----------------------------------------
1 a7 [) p3 \! e% _https://github.com/guillaumekln/faster-whisper
3 H6 F( Y; d/ Q6 U0 b5 x+ Z安装如下:
: ~3 f9 h. X! V1 k1, Windows 103 A4 V/ C/ P+ A! m6 U6 h
2, Python 3.10.11
1 v+ `8 z: T7 j- ^! Z3, CUDA 12.1
2 O* H# D/ V6 q4, 在python 3 中安装
, C' e, o( j9 `( D3 H6 K- q' V7 I: bpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) s5 R0 f- h6 t- r7 G这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
* Z7 _. {0 }# q% C/ m7 o, }% ~5,pip install -U openai-whisper
% b* t' i2 n4 l! v这是向whisper 致敬,可以不装$ ]+ z! s- x( T3 x/ m, p/ ?
6,pip install faster-whisper
, J; |8 ~& K7 u3 I: _7 v& H----------------------------------------
5 a# N/ o' Q5 a7 Y8 h; {) y' @whisper 我用的命令行,faster-whisper 我用的是python。$ j) }9 J- l: T- j- A' i
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) ]. B4 E$ y; _8 ?& K, L( P7 M' [5 z+ x$ m! M! _' T
----------------------------------------8 G# Z9 ~, s! l+ S- b2 L
/ s( Q" y5 X6 ifrom faster_whisper import WhisperModel
* D" j' [ u$ C& l4 z4 j
! p, l4 {6 E7 U, l. K9 L8 Smodel_size = "small", \# e9 @; o9 N/ I! E, Y8 P
9 {" P0 _; q/ d6 O8 A& ?) x" |+ m$ x
model = WhisperModel(model_size, device="cuda", compute_type="int8")
# |; e0 R$ r( @$ t' ~7 _0 m4 H/ q3 a
segments, info = model.transcribe(3 W# L9 ~, c! a( ^4 d0 v
sourceFileName, 8 V3 s0 o; d- b7 C
beam_size=5, ) S T7 x2 ^) S ~3 {4 {
language="en", 0 ?. I8 ?- x* D! S2 z
task="transcribe",
* c0 a Q* V) v P, \ word_timestamps=True,
# M2 N( ]* j; t' L% `8 _& I initial_prompt = "Hello, welcome to my lecture.")
v Z1 c' g# ~- j9 W( }5 S. V6 |2 S% j6 L4 j* U6 u
for segment in segments:" r$ j5 A" C& }: f. Q
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))* X8 c1 ]$ T* D7 b" X
# |5 U; F0 ^; V3 s
for word in segment.words:
! ^0 w3 [( K& s, X9 a2 P # a- J( w6 z6 W/ H B$ o
----------------------------------------
, \! I% i3 Q2 y0 C% Q0 L5 v$ Z. [! [
. R h0 e- S0 o' q5 L代码说明:
+ g2 p, r' `2 s& Q! c, i1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。8 r$ K9 Z1 P8 E* T
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ l D% s% X9 g6 Y; C& W, E2,segment 本身是很粗糙的,做字幕勉强能用。
1 U. p; j, v" V7 X" P3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。$ O0 Q1 R! D1 e2 i% v4 b
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
+ z: b( O, |" C比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。# T; t/ R$ o9 V* t, f( `; ?; R
5,model.transcribe 中参数说明:2 q' X9 S4 X- H T* p( I O
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
! H( X( b3 z" C其中# Y3 S0 e+ V: v3 i: j, R/ ~, u
word_timestamps=True, 3 G6 e, L0 v8 d4 w5 O
保证了你能拿到 word,否则是拿不到的# k: m! h1 |; _# m
initial_prompt = "Hello, welcome to my lecture.")
" V/ e0 ~+ [, K6 u6 o; I0 o保证能尽可能准确的断句 punctuation,但是不是决定性的。& p3 u4 S) ?4 f; ]7 Z7 y% E: c! f
其他参数可参考源文件:3 E6 M; Y5 Y) a3 q( N; B
https://github.com/guillaumekln/ ... isper/transcribe.py4 c2 j, Q* M) p9 F0 M7 d
152 def transcribe(: B# _. h s* x$ s1 u. Q
从源文件你可以看到是支持中文的句号断句的。. q# ?; J! [9 e9 W
- k+ [& A F$ y- v% ^% ?$ Y6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
, j4 w8 N# C! s" B, T6 y+ r7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。4 E! a2 |5 p0 h- c% i
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。2 R3 m: u5 q0 x- Q1 O2 U
* O$ |6 {+ c. i' _7 B1 b ) n6 u% d" q4 x) R" K& R
1 F$ e! V# s% M: o0 J
|
评分
-
查看全部评分
|