爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( H, d) m2 o& S4 F% K; Z+ B2 n
0 h4 X1 b, V. k4 |$ ?
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ @) Z# ] o/ P5 A0 j, F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, |+ R2 P$ z: o6 J2 k- \; g) S
----------------------------------------
% O c( f& x. ^& \, M- A
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
' D6 p! ?( W- G' z3 `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
+ b1 H* D3 r1 K) {) H( V8 Y
----------------------------------------
. [* e! [$ ]4 E7 g/ L: n! s
https://github.com/guillaumekln/faster-whisper
. L- T2 [4 u6 p
安装如下:
1 G6 S* I3 f/ `3 {/ X
1, Windows 10
0 W6 |# Z% x; Q7 N
2, Python 3.10.11
, j; D& o) Y5 D& n, {1 w) \
3, CUDA 12.1
' C* E; S9 H6 @# C! ?: K# g% U
4, 在python 3 中安装
6 i1 b% Y: j. C6 O' a+ E
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
$ A& [4 ~' V! J# t$ [) o4 r, l
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( b' E1 z5 X7 H
5,pip install -U openai-whisper
& @5 N: x$ Y0 c" b( v& s
这是向whisper 致敬,可以不装
; _) y2 [' H0 A! B8 u. V2 O
6,pip install faster-whisper
6 D# D# B7 r8 K) i- G! k
----------------------------------------
7 Y( I' [7 T- f# S8 V3 \
whisper 我用的命令行,faster-whisper 我用的是python。
0 n' [! g% J f, t
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
/ B v- Q2 z& `
' k/ {& ~' h- o1 Z$ L1 l8 c
----------------------------------------
% f0 Q% n c) U
" ?. W$ a6 A/ ^6 n
from faster_whisper import WhisperModel
: g& Q; U i/ d
/ }9 o* l$ p4 T! c p$ f6 n
model_size = "small"
) a l) {) T' b
4 P, Z' K* E4 d" ^. m, _( @
model = WhisperModel(model_size, device="cuda", compute_type="int8")
( w' T0 ^( r5 o6 p; d
; g$ |0 T9 m3 I
segments, info = model.transcribe(
! ~" `' V* x" k5 _# y( R. c; P
sourceFileName,
' ` o' u/ w' u& x. s
beam_size=5,
/ E" @3 A: g$ I$ E' [) h |% }* K
language="en",
. L; x/ W t* a6 B4 L% j6 q
task="transcribe",
: ?! G" z7 G+ d4 o2 L3 B
word_timestamps=True,
- D" D6 |+ |2 @* w, q3 A _
initial_prompt = "Hello, welcome to my lecture.")
8 K# P/ G: y ]) I0 A2 ~
* C4 |0 C( N( h
for segment in segments:
' a, r4 T! y6 \6 R
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
9 A- g' Q' |3 h$ b: I" B
/ F8 X" u; ]! r p
for word in segment.words:
, v+ M+ \3 h) \9 V
) U9 J% Z* P) n2 _, ~9 R0 E
----------------------------------------
0 W @! o( r! h' e- k& O
6 T& X: [8 v& i' H; N
代码说明:
- o. e% V! E# A4 `4 I7 w/ E: u
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
3 j" ?: T1 q* ~: `7 R0 k* s# |
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 D% v! A ?, v8 h6 P
2,segment 本身是很粗糙的,做字幕勉强能用。
- k2 }5 k' c ~; x$ M% O* Q4 o
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
: ^/ i& H) }/ \$ w
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
( S$ M: c8 I2 D ?8 Q/ s5 u5 m: q* G
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% o& _1 Z1 b9 Q( Z
5,model.transcribe 中参数说明:
% h) O9 T6 |; o9 V. T; ~! S' Y, @
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
9 M5 X+ y% |& p( y% w. A0 I
其中
8 M& p; \; K f( J
word_timestamps=True,
7 n% l/ ]" A, x3 n% [5 p
保证了你能拿到 word,否则是拿不到的
. a/ X3 P; `/ q% W
initial_prompt = "Hello, welcome to my lecture.")
, t7 D K4 D0 u' @; A
保证能尽可能准确的断句 punctuation,但是不是决定性的。
L' Q/ u& x8 r a- q4 n5 V, r
其他参数可参考源文件:
% l: a' D3 m, v- H+ p/ w6 @& }
https://github.com/guillaumekln/ ... isper/transcribe.py
4 P, w& U5 Y8 \1 Y: b9 f0 [% B2 J
152 def transcribe(
' {) Q- p& T8 l& L
从源文件你可以看到是支持中文的句号断句的。
/ b! s# t8 v. h- l* @* D% g1 @
, G" [# [( r# Q4 D9 L
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
' [3 [$ b! z) i7 U6 R0 @
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
: G5 C$ z1 g7 o* q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
0 ]& @% w* k" X. S+ }! X
+ |* N$ O4 T/ ?5 T( r* g
' E4 b$ ^# d, A) x* j
) c' d( Y% E: u# z5 V! S; E/ Y
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2