爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
H0 E$ P3 u8 ~+ n1 a- }; |5 n3 d* m
7 U; _* l4 L) Q, ~
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
" u4 j. u. ?9 U0 \) V ^
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ @% d+ m, n, l2 T. m
----------------------------------------
! ^7 m; Z8 K% k& }* f/ A# d; _. _! q+ Q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ f0 K0 B* k8 \) |
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" `& z; l8 F, A
----------------------------------------
! f7 d4 D6 C$ U7 V% D* e. m( r
https://github.com/guillaumekln/faster-whisper
) R7 j! @+ F, a7 `
安装如下:
" x; q& q" K" m. e$ w" C# X! u
1, Windows 10
; ^5 E2 H- {, j, Q1 g, J, `
2, Python 3.10.11
' R4 r. s# [3 w2 R# h" g, n% Z0 w
3, CUDA 12.1
r, A: V# a# R0 S9 g+ N
4, 在python 3 中安装
8 w1 _# p+ k2 x% u6 ]* m
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
2 N m! L5 E2 e! F3 t
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
3 r$ P( s$ D* j2 m8 ]
5,pip install -U openai-whisper
0 p1 |+ z6 x$ t! I7 \) A
这是向whisper 致敬,可以不装
6 a# K" Y! D) h6 S
6,pip install faster-whisper
! w8 o: I- a( b! J& k' N ]
----------------------------------------
6 n9 n6 e# G. r# \
whisper 我用的命令行,faster-whisper 我用的是python。
* o& I) {/ N- k! L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% b% |5 d0 k6 F8 C- w2 x
& `2 ^) Q1 l3 |" {* L( h. R
----------------------------------------
% _( V+ Q# K4 } b5 @% x" h
0 u6 B( F" k7 e: X( @4 S+ \3 }
from faster_whisper import WhisperModel
K1 a7 X% d6 ?8 v1 ?4 Y. |5 S
( t% U+ v0 }# c" |
model_size = "small"
) T% P2 P2 l# F% _: l
! z# g2 |4 i3 R. Y* y( X8 R
model = WhisperModel(model_size, device="cuda", compute_type="int8")
: M3 G+ c0 O. D5 b1 b V; g
/ d! B5 W+ e+ p
segments, info = model.transcribe(
. ^- I* j1 x0 V) I" b
sourceFileName,
; }( ]3 w( {) v
beam_size=5,
& l2 \1 Z+ P0 F! b! I( z
language="en",
: C- Y" v: f& n; w
task="transcribe",
$ w4 y& Z& ^5 B) ^
word_timestamps=True,
7 E- G/ J8 J' |8 ^4 {! q+ }
initial_prompt = "Hello, welcome to my lecture.")
) U& x5 k( r4 X1 [+ {* c4 t
) t7 G1 }- H, ]0 B! E
for segment in segments:
" E/ o# y1 q S2 M8 C
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& e! l: v: a; n( }
* b2 f5 [+ Z( O2 ]1 `7 w
for word in segment.words:
/ Z' J4 y6 E% _3 Y; r
9 S, z+ m6 R6 e; t" |
----------------------------------------
# r# R6 C' } r
% n; w+ s3 ^# b( p
代码说明:
# Z* D# j6 v4 O, t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, C( f8 \; \- x$ M6 D0 a
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
+ s, j4 R- f/ L& S3 {4 W
2,segment 本身是很粗糙的,做字幕勉强能用。
- h' H4 W) }0 ]& ~" s
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
0 g' n9 x% s1 f* Q+ D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
$ {, [8 P4 Z" |. l0 \
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- p4 f7 B# W9 j/ j
5,model.transcribe 中参数说明:
5 z) d( e9 S" d( ]7 R
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 n% g' x% g8 {4 X% s
其中
% _3 }7 C1 B4 M+ u0 W. |
word_timestamps=True,
6 o9 H. c1 Y# M7 ~ [/ F- V
保证了你能拿到 word,否则是拿不到的
4 q) b3 ]. t& @3 e
initial_prompt = "Hello, welcome to my lecture.")
D5 V n3 q4 V& w& A* p( W
保证能尽可能准确的断句 punctuation,但是不是决定性的。
% X: @7 J0 K6 P# |
其他参数可参考源文件:
: @6 _9 ~. Q3 p! F5 s+ ^
https://github.com/guillaumekln/ ... isper/transcribe.py
9 Q) U- O- \: O7 O, p, H0 v
152 def transcribe(
/ O8 Q2 ^) `: d; }9 U
从源文件你可以看到是支持中文的句号断句的。
: S5 {9 U- T! l" P: e
" h( j5 W# ~ N& a
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
# J! n+ O4 h+ {' W/ o& k
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
+ G7 T4 n$ l# o' e
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. U8 \* x- A7 w7 }. |
" O7 h) Q+ ^' v! R; `9 T0 {9 h
9 [0 r! M) d a
' a$ \$ i) [# h! i- O
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2