爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
) j# _$ P! l; e9 C( o
* y1 ~: y5 q9 ^
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
2 M9 G, d9 |3 h9 B0 i3 V
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) Y# a3 v5 R0 b* ^& o! k/ N
----------------------------------------
1 v: r! e% f( f9 O* Y; s
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: I) p/ G! X, O4 ?0 H% E4 s
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
. u$ Q2 ^* `: {' l" z5 k+ v4 O( y
----------------------------------------
2 X6 I9 g9 g- z
https://github.com/guillaumekln/faster-whisper
1 H: t2 y/ E# {3 P) k; [
安装如下:
x) V7 _/ T$ H }+ a/ F9 [
1, Windows 10
) |- `) x4 U4 }6 K
2, Python 3.10.11
m0 r Q7 @' E- }
3, CUDA 12.1
) K! } W. y* U& N* [, u6 e) e
4, 在python 3 中安装
, B5 f. E D, u7 s
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
! ?. |# O! T. {2 |# a
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: h# J/ p: N! y% B2 E% E
5,pip install -U openai-whisper
2 j- f r2 ~& h/ g
这是向whisper 致敬,可以不装
7 ]9 o9 a$ n) M. c V) d* m' q
6,pip install faster-whisper
5 N- d8 L1 c- j5 D7 w
----------------------------------------
! n: W2 I$ i2 @' G" y
whisper 我用的命令行,faster-whisper 我用的是python。
5 [9 f) k+ C4 x- G2 ^
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 e$ a- v) ?4 D: J) p* T8 ]
9 r% m- i7 P# J/ Z0 w
----------------------------------------
4 N2 A3 P z3 ~! t6 r
5 d! q( D+ X7 i' \" u
from faster_whisper import WhisperModel
- ~' y: \& K+ U {! \* x- k" g
0 |, S0 u$ t5 Y3 @/ N* K
model_size = "small"
4 ?/ K* G; L9 e+ a& C; U
9 {) W* g9 V( e I- _
model = WhisperModel(model_size, device="cuda", compute_type="int8")
% E" b; p& _: K i
/ @& }4 { `5 K A L0 X
segments, info = model.transcribe(
5 d: g+ q5 J0 U B0 t1 ^5 j1 i
sourceFileName,
$ p8 |) F/ U) o& d4 t3 O
beam_size=5,
: m" J; A# y" W8 v
language="en",
- |/ J) N) s; y2 `/ X8 K% [) s
task="transcribe",
# B, u2 \' x8 Q M t5 W* k
word_timestamps=True,
" M! M5 J" I* \2 o j% a
initial_prompt = "Hello, welcome to my lecture.")
: ~2 o! I1 \! z$ D' \2 I h' {
4 j, m( U/ Y) w7 k& q: S" g
for segment in segments:
& W' o9 R# y: Z: W1 _7 Y
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 C: S- j1 T8 J. a1 J; L9 P9 l
( t2 v9 ~5 j4 A5 Z# `
for word in segment.words:
$ Q/ f* |+ x7 b h
% H0 ] m4 f7 i0 e% I8 u
----------------------------------------
& Y4 [' M$ h! ~7 ?+ w" I3 j, Y
3 ]- J/ p& A. P4 X6 ?0 a
代码说明:
: W# q$ H0 R& [. b
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
! D6 d) J, T) k# B' }
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
) f& o: `% g6 \" Y+ g/ N3 o: D0 D
2,segment 本身是很粗糙的,做字幕勉强能用。
$ i8 n# u* k7 h1 U* s
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
3 K. g% A3 i# ]
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
5 F7 e: \3 f" d* L3 _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
2 G- j5 R, M# U3 G J
5,model.transcribe 中参数说明:
" X* w, E3 C' I* b& s3 W5 m; P
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 C& z3 ^+ {9 e7 a) [0 t5 M
其中
) h, b& j6 y$ _. Q1 D% i: u! @
word_timestamps=True,
5 J! i* }# g; t5 e
保证了你能拿到 word,否则是拿不到的
9 d4 I. y9 N& V- _
initial_prompt = "Hello, welcome to my lecture.")
; b2 j+ }, v# t! r4 b1 ], ]
保证能尽可能准确的断句 punctuation,但是不是决定性的。
, |" M' q/ i4 [' H- a
其他参数可参考源文件:
1 m0 i- v, g7 l' r
https://github.com/guillaumekln/ ... isper/transcribe.py
U% i: m3 B! E
152 def transcribe(
4 m1 ?; p2 r0 P1 d r/ \
从源文件你可以看到是支持中文的句号断句的。
6 K7 |" g. v- Z1 c( G! G2 _
* z- v7 a$ X5 s3 x6 |
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 J) f- x$ I. f
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
$ O' t* `* v3 h! q$ [
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
5 M5 {$ z+ w2 K% {6 ]- I2 U
! r& S; y1 _9 l, G9 r, ]5 V6 B
, p0 l" }7 l6 P. P9 Z
+ z4 A4 X) j" e' K, }, L' e5 m# S
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2