爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ n$ i" p$ A( W6 \9 [
6 U( ?/ V5 j( _9 ?
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 A( C$ K. @6 Y, \7 }$ R1 D9 \ t
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
' h( W0 h2 c, U6 k
----------------------------------------
6 W- q! }, q( k. @; U
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
* r; Z5 l; G* |8 H
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 Q# ^) ~1 R# Z6 V
----------------------------------------
* v$ F9 K4 v; V2 C8 s% V
https://github.com/guillaumekln/faster-whisper
+ e9 z: c. p$ n& z2 i6 y
安装如下:
1 [# _ L: K3 s( c' I9 V
1, Windows 10
; h% `0 k$ m8 N/ b0 S! F0 I8 k, E
2, Python 3.10.11
, A2 d' D1 q- L: N# E5 @: ?
3, CUDA 12.1
- ]; G, d: S5 z* z$ d; x
4, 在python 3 中安装
; z( p8 X2 u: H: ?# t
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
$ i( j6 g; {9 F- ]5 n1 B
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
0 i4 @+ _8 ?, I! Z; P6 c9 o$ \( D
5,pip install -U openai-whisper
( M0 f( m+ \$ D! q0 a. q! N$ [
这是向whisper 致敬,可以不装
M6 K, ~. U) h
6,pip install faster-whisper
" M+ l5 E* R3 x
----------------------------------------
! O+ [4 \; X% `. C' |- r
whisper 我用的命令行,faster-whisper 我用的是python。
7 G0 |6 {* o" f. x
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
+ P5 E9 [) ^& `8 X5 s1 g
! p! A2 o9 w B5 W0 ?
----------------------------------------
7 J. a% ^' W. }) i6 G* D4 ^+ v
2 ]$ F! M7 V' {
from faster_whisper import WhisperModel
7 x1 x/ m6 t4 Y
# }) K0 i9 C- U/ Z3 C; I6 Y+ N1 z
model_size = "small"
4 B2 G% r, f" Q* j7 n
( D3 A6 Z& K9 _( ]
model = WhisperModel(model_size, device="cuda", compute_type="int8")
b' q3 V2 C% y' Q# C3 P
, @" [* I3 c# U
segments, info = model.transcribe(
1 l+ m' s1 D* H2 W% b
sourceFileName,
" h4 A- ?7 s9 i9 e, `; C
beam_size=5,
, A* [+ ]+ N6 m( T) B, R; X
language="en",
X; ?" H2 f3 W
task="transcribe",
! Z9 C& l0 K0 @, J9 \; M5 V, q t8 M
word_timestamps=True,
9 X. H9 S/ x" \ J
initial_prompt = "Hello, welcome to my lecture.")
1 _0 Z6 u+ O4 X3 P* N
) i3 _5 y0 M. C }, P9 g/ P% s7 a+ z$ B
for segment in segments:
4 H! a+ {6 S% I- @ R
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
2 _0 _1 J5 F K: V" T
( g( ?1 f$ ?4 ], R6 _, y; d
for word in segment.words:
5 N1 X5 ?( |% l( l7 C: D
" J2 Z5 I4 b2 ?, a; S, @
----------------------------------------
0 y# h% U5 p8 M' h2 \
2 w: }, a5 j/ _7 G2 g- r
代码说明:
?$ l2 q& |4 u1 y1 ^) _$ z' w/ B
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
6 L1 _2 `, i. i2 V! L7 ^0 |* c
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 C; n0 z' A0 k+ C
2,segment 本身是很粗糙的,做字幕勉强能用。
1 C. D/ Z: M, q# n) s! s2 G) A' z9 J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; o/ p, D! b5 P. l3 y# h8 P5 r
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 @9 }, P( g! [7 m; E3 |
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
2 D$ q2 f# w D2 }0 p6 ]% J
5,model.transcribe 中参数说明:
, x9 L- S3 n6 t3 S2 w/ ]4 b
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
l) |( E2 D5 C. p% g
其中
) Q- u6 g% W5 G3 [; l. j! b* P& F
word_timestamps=True,
5 [( f# V t. G; x; W; c
保证了你能拿到 word,否则是拿不到的
6 G. _0 G& R* I9 W- ^; _
initial_prompt = "Hello, welcome to my lecture.")
! M+ L1 y, i& w- A; ?) a2 M& t
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 S. O1 B f, N& S
其他参数可参考源文件:
/ C) X6 G% S$ C
https://github.com/guillaumekln/ ... isper/transcribe.py
; q/ e, z+ Z0 g8 n
152 def transcribe(
* g8 A3 V. R4 A5 y" r, R: @( H, O
从源文件你可以看到是支持中文的句号断句的。
# ^9 C7 Z- S" _- c) K
$ F, T( q2 T L" _+ x
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
, u: X# k; X; Q) i
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
) t8 d& G/ G; g, |( C0 P8 A2 G
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
o) \$ e+ d( K2 W
F5 w4 C4 m* q5 Y9 h& V
7 q/ B5 Q5 G8 }
2 |) {0 H1 p6 N# a
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2