爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
# ?. R" g, [# X0 Z6 M9 v4 s/ E
z/ \+ |7 w2 P7 D' w' b. R# i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) P1 W8 O J2 s3 C" @
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ j; m- h. s: q
----------------------------------------
* J1 W- ~0 B1 C6 v
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 [/ y! b; f6 I" L- w2 H
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
5 f: z6 v" a+ Q* j5 i
----------------------------------------
2 W4 [/ D& P' z8 G$ V
https://github.com/guillaumekln/faster-whisper
8 _6 V3 ^1 _- b1 e0 Q
安装如下:
9 ]2 D% J$ y& P3 b. z" x
1, Windows 10
9 w/ u1 N& v. l' b
2, Python 3.10.11
2 {( L2 F- }: F8 h1 V1 A; g
3, CUDA 12.1
) T2 H% _7 o7 b5 F; q6 i, T- f
4, 在python 3 中安装
0 }1 A) U; z) g# d
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
/ r# ]% |: [3 W4 f9 Q& C2 A& x: z
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. | l' s! ^2 j+ D: K
5,pip install -U openai-whisper
6 n {( f! s* l; P; _
这是向whisper 致敬,可以不装
& r" i" Y$ {0 N1 [
6,pip install faster-whisper
; _4 m6 X! ?) t3 V* q. e, i( K* n3 h
----------------------------------------
1 V; N# u: z- X s* F E
whisper 我用的命令行,faster-whisper 我用的是python。
" a( o m$ _2 }2 N. Y* }" y- q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
1 J, }# W& r6 n$ i+ D( s e9 E
0 J& _# W! N1 F) W$ T* S( l" t% W
----------------------------------------
2 s& N. m3 z5 i2 H
" o* C3 Q. m0 G' o& N1 Y
from faster_whisper import WhisperModel
, c) }) \) j& ~
3 n" e; {2 d- k r
model_size = "small"
) Q1 M3 }3 l% v6 Z/ c
M/ y5 m# c' }
model = WhisperModel(model_size, device="cuda", compute_type="int8")
+ ^. k6 q; y- \ a8 w* x9 R
8 V) e% H" y m4 S6 |3 a
segments, info = model.transcribe(
4 {$ |6 ]0 ?# D3 e
sourceFileName,
* r* b2 m4 U# l8 D! G4 s. W- m+ L
beam_size=5,
7 l& m' g9 D: ?1 D
language="en",
3 l) w; Q v8 Q! i' k+ n
task="transcribe",
$ l8 P6 E2 w1 g8 K6 x: `; c( i* F
word_timestamps=True,
1 @. n7 L/ j: R! _- z
initial_prompt = "Hello, welcome to my lecture.")
, o% i& q+ Q/ J" U8 Q
( P% Q$ d# j9 U4 i ~
for segment in segments:
7 Y0 _1 F6 x* E# O( u8 B
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
0 a4 B; T9 _( w
8 ~3 ? t" R- ?+ y
for word in segment.words:
# S1 L7 p. B8 S
' x! c3 C' r. m+ ^
----------------------------------------
# u+ B$ I5 E" t2 Z+ ~! [+ \
/ ]+ B2 m8 W+ s$ i* g, {
代码说明:
" ~# o( i, [9 t% N5 W
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
" Y0 Z# q0 V7 U! }. Z* G6 R$ n
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* l- z. I$ u& `' B0 |
2,segment 本身是很粗糙的,做字幕勉强能用。
5 V9 @+ |; v' F% ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
3 W$ J2 N; s6 _* u* | s
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, f- h! c, G6 W- w6 Y
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
. }8 k5 T& g9 U; S
5,model.transcribe 中参数说明:
& Y0 e% A/ d; y% n! `) b0 D3 f" t
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& T/ {+ c0 K0 C( H) T( q5 O; m/ G
其中
6 q$ Z' O) w! i, l
word_timestamps=True,
6 z: ?9 C) a1 o! O) y' N u @
保证了你能拿到 word,否则是拿不到的
$ x8 O* R) N2 K6 | C
initial_prompt = "Hello, welcome to my lecture.")
( Z" a1 K( |8 ~ z
保证能尽可能准确的断句 punctuation,但是不是决定性的。
0 w {5 e$ w" @/ {9 S
其他参数可参考源文件:
/ V5 P& z. m# G& z) w+ n
https://github.com/guillaumekln/ ... isper/transcribe.py
" }4 R8 V9 f7 `& r2 X9 d9 r7 v
152 def transcribe(
, D$ V& ^# h$ V8 m9 v- O
从源文件你可以看到是支持中文的句号断句的。
9 ]8 u- M+ ?8 i L/ {2 H
) [ C' P- W; L U9 z) Q0 v0 {
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
6 ?" F: d& s; U! ]
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, Q) L s0 n3 r1 @6 ~
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
C$ c$ b- I$ p: p$ l
3 N E( W3 P7 a$ K1 ?8 u3 p
1 Z' X8 U& Z5 w; T, U" [
: c: }# X0 I" Q5 w4 l. t% ~
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2