爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
% e# i; \' U0 F; }9 B p/ ^
1 e) k! U3 ]4 o: {
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 J% q d$ z& Z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( u! y/ m) [- L
----------------------------------------
( g6 Y) }1 N. D3 Q/ x4 E1 h
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
/ |/ v( L# {) z% c2 J
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
- ~2 u: M; ?. d8 ]( r
----------------------------------------
; d W J& z$ n) V
https://github.com/guillaumekln/faster-whisper
9 C0 V" J' t) x, }- z5 H, F
安装如下:
' E* O$ G" `+ I a6 V
1, Windows 10
3 z4 U9 U6 E# h: |+ M3 d
2, Python 3.10.11
% b' q! h1 l& O8 E. K( d* c: [! a
3, CUDA 12.1
0 ^& z6 b* ?) y7 R/ R. h1 X, O- p
4, 在python 3 中安装
+ B6 G$ f. J) s* l7 h: F4 y, r
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
+ o) |5 X- T7 _( a: Y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
l8 C: ^" E# z( _
5,pip install -U openai-whisper
% b. k# }% |0 n- ?, E, d
这是向whisper 致敬,可以不装
+ z0 m* l6 r7 }! h( ^( q
6,pip install faster-whisper
* e5 J8 }9 h8 K' \$ G% N4 q1 t1 ?
----------------------------------------
4 m; C5 K8 S- }2 ^* l
whisper 我用的命令行,faster-whisper 我用的是python。
c5 T4 ]% k* Z$ \
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
F& {# N( }3 U: m3 E% L- L
4 ]- N1 n4 F3 s( y0 s0 F1 @0 o
----------------------------------------
2 A9 F- g9 y' H* ^- k* H: W
, @4 k; T) ]5 W. p, [+ u9 ^. h% n2 I
from faster_whisper import WhisperModel
8 N l6 D. R- X1 k" c9 K% B
: q7 X5 a+ a8 n. \/ K' r, E; S
model_size = "small"
. \0 ]8 u( X& A* l' b3 Z% ]
( n+ w/ ]7 y. I: L1 \
model = WhisperModel(model_size, device="cuda", compute_type="int8")
7 h7 x0 J' y; O0 u- T( ~
. ~/ M; F, V8 {* ]) y; M( s
segments, info = model.transcribe(
% o# y. z2 I) @: V1 p
sourceFileName,
5 G3 B f) J# l/ B6 s
beam_size=5,
" n( }5 u/ \2 Z. v
language="en",
. z4 v% T$ f8 a* I; F
task="transcribe",
5 a% w b* x" E* b) j) R V/ Z
word_timestamps=True,
4 t' e2 d$ ?* Z. x0 F$ C# d
initial_prompt = "Hello, welcome to my lecture.")
1 _4 @% I+ c: T! h. k* S
+ G9 y( Z8 m& X4 }% e
for segment in segments:
* r. A5 ?% c; V4 ?0 ?
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) @9 u+ t. j. V! c9 X
1 H0 b* r# R( N, k' }
for word in segment.words:
3 B& s! y7 a; A+ V9 A# Y4 A
e5 ^& Z/ B+ j! c
----------------------------------------
7 z2 A/ X+ D+ m+ |% R
+ I$ z0 o* ?* y O# z* U7 x
代码说明:
) A! U" b$ L, c* j" c' j
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ T! {# F; M- r8 p" _
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
8 d6 [0 e+ v3 T& f/ p
2,segment 本身是很粗糙的,做字幕勉强能用。
6 B5 b! C! Q% C5 T. U) D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
$ h' r4 n$ F9 `0 J7 t4 R/ y
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
2 ?: _6 g; a% E4 x
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
1 ^8 r1 }: o# v
5,model.transcribe 中参数说明:
) R3 `' P$ ]5 C5 I5 v* o% u
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
. g/ \9 T7 _$ \; s2 ]$ A
其中
. @, t9 g( \/ \6 M% n
word_timestamps=True,
4 Q! v: K7 J. i" Y% |) g. Q( c' T5 r4 ^
保证了你能拿到 word,否则是拿不到的
3 T8 {- ?6 ^. z Z1 h! H! C( [
initial_prompt = "Hello, welcome to my lecture.")
- N0 `, s; r7 I! C- Y: S
保证能尽可能准确的断句 punctuation,但是不是决定性的。
7 j- w) c- h4 r% _7 A
其他参数可参考源文件:
" a% B; t3 H3 N& s: g- J7 a8 O
https://github.com/guillaumekln/ ... isper/transcribe.py
8 U# w2 P1 C0 W+ |! M% B4 V
152 def transcribe(
. A6 d% t/ f3 h5 N2 D7 G# ?
从源文件你可以看到是支持中文的句号断句的。
2 S1 E3 E$ w* E# [1 y) h* h0 Y- X5 ^
0 @. ~# ?, ?0 o
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. f/ O- R6 U4 ?& g
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% y) E6 Z4 |9 [7 k3 U: @: A
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
5 V1 `5 S$ a z2 a+ p
" z1 E! d- B( g- ~" d1 k/ H8 C' V
' ]0 |1 W: `9 K J
1 G3 Z; A* X5 Y7 y6 t) R" o
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2