爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( L1 i3 u" r3 q( g1 m/ B) Y, A
8 p+ p/ q% t4 E& G
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 {$ h5 W7 k5 e% K) K) W( t9 c
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
W+ Y% I% E$ H' |' R' U5 V
----------------------------------------
1 |0 H @. N& U! m
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
! n. u) Z: H. z' a5 z l; @* k/ c) L
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ e8 D. K. @' L5 x
----------------------------------------
5 Q/ }4 r' _4 G4 e' w; U
https://github.com/guillaumekln/faster-whisper
; p! b& j1 `! E5 M3 r4 H# M
安装如下:
! P3 v6 j1 D% B' h* R& E
1, Windows 10
9 e# y+ [# p8 q2 a0 W* R
2, Python 3.10.11
0 R0 N( y; ?* Q( N% a q5 B
3, CUDA 12.1
' E, c% M: K3 |3 E& K
4, 在python 3 中安装
4 p9 S, ~+ d! I8 P
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
' b$ }% v" {! c6 Y: p X
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
1 l6 q* E+ I* \0 Z0 H
5,pip install -U openai-whisper
* p/ M2 i: a/ m# h4 G' K' U! h
这是向whisper 致敬,可以不装
' ]1 w. N# \) j
6,pip install faster-whisper
! N9 k3 t: x* P, l4 \# H5 _' ~! W
----------------------------------------
1 d t- Z1 k$ O/ g
whisper 我用的命令行,faster-whisper 我用的是python。
9 v2 r6 t- `" F" D- }
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
9 E5 P, `* V4 p; X, d6 j7 W
5 h2 H: ] Q' C+ R
----------------------------------------
3 n' H7 U% B3 X' V' z5 P
, n, J# t: W1 a5 f
from faster_whisper import WhisperModel
; C, @$ c5 j) v$ W6 i
! |' a: x3 t) T9 K6 ?
model_size = "small"
: g4 }9 L/ u# E
; g F9 Y0 ]/ l
model = WhisperModel(model_size, device="cuda", compute_type="int8")
! |- Y4 V) Q2 V% X- R# t
# B3 g7 e. s3 |1 |7 T
segments, info = model.transcribe(
! p6 |' K: u' t4 I! v
sourceFileName,
- Q& h4 X. r3 e% d
beam_size=5,
; H7 C9 r+ ?8 }8 l- P( y- @* y' L
language="en",
' N' q6 q# d+ O$ I8 Y
task="transcribe",
8 T* E7 R( X- f% O+ ]
word_timestamps=True,
: H8 W, ]+ v0 D% h' q. R
initial_prompt = "Hello, welcome to my lecture.")
) }. M( F" d. \
: P8 |7 M/ _, o' c) F1 J _0 r O( M- i
for segment in segments:
$ p; b. Y* H1 h7 Y" A5 `
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
2 | Y8 E v* V9 l
* i5 X2 C$ Y* U" a
for word in segment.words:
0 H x' M% H4 b* g
3 e0 e( ^- A+ F2 i" Q" Z/ @; x* B
----------------------------------------
; O) f5 D' v; z0 z" ]4 _
^- C! w2 B1 j# u% s5 J" O2 Z+ P
代码说明:
+ h1 k" f5 ]( w4 N9 h$ D# P
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
1 L2 p& ~9 L" o7 i2 r: }% P6 ?
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
, G8 \3 \7 Q9 a! @2 r. Y
2,segment 本身是很粗糙的,做字幕勉强能用。
H7 @$ {% d' V5 c) m T: O
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( z; c8 r% P4 |# s' ~" {# c9 B, \- K
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
+ S" Q: u! e" h0 H/ C
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% l0 ~5 r+ S6 L7 q- x- z
5,model.transcribe 中参数说明:
& p) `" `, i+ Z. `: k
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
! ~8 D2 y" L/ ?2 M2 G0 C
其中
& K7 `* \! r% X3 H4 k" |" N
word_timestamps=True,
" d2 e* f+ D; t6 \( ?
保证了你能拿到 word,否则是拿不到的
6 i3 O/ E/ V4 Q9 g3 F- [2 P* L
initial_prompt = "Hello, welcome to my lecture.")
3 J: g/ ^7 t7 v
保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 c0 v0 o2 w' c, H7 W i0 C6 H
其他参数可参考源文件:
$ ^0 w; V* w X; D$ H) }
https://github.com/guillaumekln/ ... isper/transcribe.py
9 J6 ]4 P. Q; P, r: `, K
152 def transcribe(
# V/ E( |* Z& y7 g. {; \ f P
从源文件你可以看到是支持中文的句号断句的。
) z. F' x3 u) G# ~. [% b& V) V
7 H, {2 C6 E3 d8 b# k# |
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. j% m2 Y# k2 B5 Q9 M f
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
. K2 D" A/ y6 J: O7 F/ e
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! Z3 f/ V- [# f+ b4 t
& A% \6 d4 o5 B+ J( r7 y6 U1 O8 U
% d; c- J7 O4 Q" e# ~* y
3 z, X+ z3 O3 N3 L, i' D0 R
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2