爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 Y0 s6 Y! a( Z M2 y0 f
% G) t# ~* R }
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
Z6 T7 B* i6 H B3 r$ u8 O
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 M4 `* r' A1 ]4 C+ Y' K% f, ]
----------------------------------------
$ w$ ^, L0 U* e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
8 s! p! _0 L8 s% R) ?6 A/ S& `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; Z9 i1 A7 B% _
----------------------------------------
. s* o6 I2 y& A, o( N3 U
https://github.com/guillaumekln/faster-whisper
+ G' D; J0 p! [
安装如下:
! P# g5 w# y7 U2 s
1, Windows 10
, `7 r) |1 R9 N i7 D
2, Python 3.10.11
' i% E, [7 [/ ^' L* x' F
3, CUDA 12.1
. g) }& f& }. s* O& I
4, 在python 3 中安装
. i' y: h; [+ [
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
& i& U4 ~" |* A+ V! f
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) f! Y9 C3 X- u. {* P( ]; w
5,pip install -U openai-whisper
% f$ K& f! H0 T A" Y' ?8 G
这是向whisper 致敬,可以不装
Y% Q) |( g8 w( P1 A' L# ^' Z; w
6,pip install faster-whisper
$ }8 K- H4 \9 C5 B
----------------------------------------
: v' I) b% u) H
whisper 我用的命令行,faster-whisper 我用的是python。
2 b& \, x) A" t; W0 M; z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
, a* \2 v8 b& m; s: U# X: u( W1 T( K) i
7 i0 G' C; D- T
----------------------------------------
; u. L* U+ s. O7 g0 H F
& o; _9 T) O1 ?7 Y; w
from faster_whisper import WhisperModel
, r# Y$ E w2 O! n( s I# T! W
9 _$ O- a8 \" S! z; S$ I
model_size = "small"
% T( V8 J" V* c
$ @) N0 A/ H. m8 X' c: \
model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 P+ P, r- ` @4 o4 }
' X1 O& e) J: C0 L( l
segments, info = model.transcribe(
& d/ y1 ]4 n0 v
sourceFileName,
# ?5 M# A. _+ t% Y7 y
beam_size=5,
9 T+ x3 i! g) s5 b0 q2 W7 |
language="en",
% @! \; I6 Z4 i% S6 F/ S N6 d/ u
task="transcribe",
1 S6 U+ I( o* i: [6 m! @: X
word_timestamps=True,
( Q8 B/ b* e$ i8 h
initial_prompt = "Hello, welcome to my lecture.")
4 m E" ? ~0 A! L, Z5 ~8 X
G+ w- }! T: j% S2 z5 E! x' i6 D
for segment in segments:
5 @9 v/ w, `6 B, z. @4 \
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
0 V: N: `4 ~1 \. M
$ P' I+ T3 n' i4 [+ N0 H" v
for word in segment.words:
% a$ W# F* p: E' w7 p
" X R4 T Z0 Z
----------------------------------------
m; I* y/ J$ |8 x% g+ J
. j' t+ {0 m' y# g( f. M* l4 I
代码说明:
6 W; t i& c/ T$ B4 `+ n
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# ^( v7 _0 f& o. C, ?0 p
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 {6 W% {0 d% G ]- }9 _) J6 i" v8 F- a9 h
2,segment 本身是很粗糙的,做字幕勉强能用。
; P$ ^- W& A9 `
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
% d( K5 o d! \$ h+ X. p' v1 Z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, G/ r3 z1 v% {( N# F
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: t; ` @ f' D H/ _, F, Q. N
5,model.transcribe 中参数说明:
1 K5 w3 f+ m$ g2 c0 D
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
3 s' I+ O9 A* o; F2 f7 @
其中
& @9 E4 `: |+ l+ M' `
word_timestamps=True,
P2 o4 W& {) O8 Y% F2 H K
保证了你能拿到 word,否则是拿不到的
" [/ p1 G9 c9 ~
initial_prompt = "Hello, welcome to my lecture.")
1 S5 A0 e/ K2 G' p: k
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ |' @" s' ^/ ?7 ]' H
其他参数可参考源文件:
, h6 Y) x- W: q& m
https://github.com/guillaumekln/ ... isper/transcribe.py
. p3 c) O. a8 M1 @+ V' Y+ @
152 def transcribe(
5 h6 S* b! E4 ^& T8 a0 {+ U
从源文件你可以看到是支持中文的句号断句的。
+ }" c2 e4 e* ~& I8 d$ z
5 [/ \+ a% a% m! G6 D; j) R
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
8 w" @4 ^5 L; E% i, p5 {# w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
5 e/ z+ O/ N* ?' |" U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( W$ c; M" n( p# R8 u
$ Y# R. s8 H4 l+ q
7 U2 ?1 e& }% m
! S" \- \9 q9 h# R
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2