爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ [& v! \8 A4 |$ O' ?% ]
0 J5 o% K i9 f# t" o" F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
$ }% f3 L S* y7 f$ e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
. i1 z( k( \* R+ h" k. t4 R
----------------------------------------
8 f7 O6 C' t* `8 ^7 q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
2 C: k0 R1 V7 e8 ^6 u4 |. x8 r
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
V3 h2 O' `3 R# i" ]# v
----------------------------------------
& I* _: D$ ?4 b# | S5 c
https://github.com/guillaumekln/faster-whisper
5 f* v/ k7 T7 M/ e. X
安装如下:
' G1 f- R4 |1 j2 R
1, Windows 10
5 q, N( B% _# J) P2 s, J
2, Python 3.10.11
0 s r' K5 [4 Y8 d
3, CUDA 12.1
/ T, w" E. f( ?1 U" H3 M
4, 在python 3 中安装
1 {9 j; ]" ^8 d
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
% |$ c: E) @3 N4 H* ?! o7 z4 N, m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
" [+ c5 F- o* c {
5,pip install -U openai-whisper
( D5 ^! j9 b. x% d
这是向whisper 致敬,可以不装
9 s! u) p/ A5 D' G- S" Q. L
6,pip install faster-whisper
6 u0 L( E( B# b7 D& x, e5 m5 T
----------------------------------------
& ^: n7 c6 e! U
whisper 我用的命令行,faster-whisper 我用的是python。
; G8 l) p3 m2 N
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
. T, c' i: o/ b+ v
( E9 a9 {3 s* P
----------------------------------------
4 F4 D$ J' N1 c3 c* L
5 Z* m' ^. \6 R% m @
from faster_whisper import WhisperModel
9 n7 O! r3 h) d- q0 O
: _9 ^% c. R( Y5 N+ S
model_size = "small"
; f. Z$ a2 r0 S" O9 G
0 F# [# x4 w- t5 O0 V
model = WhisperModel(model_size, device="cuda", compute_type="int8")
5 ]0 b N- |! Q$ l' Z
% Q8 a) q0 N6 G; I3 d
segments, info = model.transcribe(
! `' C6 l R2 H% W: f
sourceFileName,
* ?3 } P& h4 e, f4 f r0 @! |
beam_size=5,
: P4 B+ b8 V( r& ~
language="en",
# M4 E- m6 _! b# L8 C& F: p
task="transcribe",
9 b6 o# T( l4 N( B9 }8 f- a/ }
word_timestamps=True,
$ m/ n- l' [( J9 w& m, o
initial_prompt = "Hello, welcome to my lecture.")
3 N- L* p/ J5 `
5 O, r1 L" ~1 W+ x- J y) z6 p
for segment in segments:
9 W: q* l6 U$ F, h3 |
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
* c/ M5 q: { @9 E* ^
8 s2 O% {: n0 S% k7 r- v8 C% s# s
for word in segment.words:
! p8 j3 I' l, v! F+ d; M" x
3 ]6 t; z% L/ `4 ~9 N
----------------------------------------
0 X! [; H# h3 H4 B* m& `# }( s
# Q7 [% M. S. o A, r
代码说明:
( X l, E7 `8 ~) G5 W( P* E- ~
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
2 q9 k/ f3 k9 D; q {( D" \
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
, P% c; t, |$ D
2,segment 本身是很粗糙的,做字幕勉强能用。
2 H7 H% ^* @2 X& ?
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
: e G5 C3 W% ~/ G! ~8 z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
& { P' V$ i/ ]% ^
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
' i+ E. f( L( V+ g8 W' K
5,model.transcribe 中参数说明:
* }: v5 \4 n6 z' P, j
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 \4 ~3 d' g, _( a6 a
其中
# b. I6 Q% c e
word_timestamps=True,
/ W' I7 o4 j( D, p2 D5 U7 o
保证了你能拿到 word,否则是拿不到的
, Y* n$ }' i( n0 {
initial_prompt = "Hello, welcome to my lecture.")
( d$ c+ D6 I: r$ I
保证能尽可能准确的断句 punctuation,但是不是决定性的。
- o* E7 f6 q/ L: C2 Y% N; ^
其他参数可参考源文件:
! N1 U1 k: ~$ z. Y# v
https://github.com/guillaumekln/ ... isper/transcribe.py
* t9 K. U0 x- \0 Y
152 def transcribe(
- q8 @) w! D# J/ E. _
从源文件你可以看到是支持中文的句号断句的。
6 }" m; V$ [$ o, d! Q/ ?
3 P7 M/ ~5 J; o
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
: u3 g5 R7 L& Z5 { r& r6 U
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% |5 E# _1 ^5 ?/ }& }
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( g' S4 W1 }) \4 k
4 O) X2 w: f9 n/ z) A: r
# B F+ @/ E0 \, N/ l) P
& x& ^. c1 j$ V9 j
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2