爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
# g# g/ \; T) m i9 a M- t
+ M5 a+ @. K* u6 f
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* Y9 J3 i0 w0 H9 h: O2 h( _
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ ]- }2 ^, e! ]' H: ?2 N
----------------------------------------
- J0 v; }5 `" b
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
* G3 X" e8 m1 d* L8 f( W @" S! A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; L0 z8 Y" S8 O$ ?$ u
----------------------------------------
3 a9 T- J; k% w: u$ P) C- G* A" W
https://github.com/guillaumekln/faster-whisper
- _+ H3 I% f7 v6 O2 X3 [
安装如下:
1 x- q$ g8 t% T: g9 {" W/ X
1, Windows 10
) A5 G) l" Q! [/ a' ~* s$ S( v
2, Python 3.10.11
) A( W- e8 S6 `+ f5 ]4 C9 f7 u8 h
3, CUDA 12.1
1 `+ {, R: ]3 X! z9 O( y& N8 W
4, 在python 3 中安装
3 m/ p+ d# V2 L. D
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
7 G8 g4 x( a6 N. M
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
6 g: y; q: [/ a$ B6 f
5,pip install -U openai-whisper
* @: u' o% E2 t
这是向whisper 致敬,可以不装
1 e! |( N0 k% T* k# I+ g5 U U( U
6,pip install faster-whisper
* d" k5 ?( n8 a. @ A. {
----------------------------------------
9 q: t3 s+ @4 }1 T
whisper 我用的命令行,faster-whisper 我用的是python。
a6 o" Z J N3 |2 h% V6 U$ Y, M9 Y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 l, b1 v. t8 A( ?4 B& t
' H! X# R- y7 N/ @. ?
----------------------------------------
, m5 I0 s4 g% ]& [9 L
6 t0 N1 h t4 O8 ^$ n
from faster_whisper import WhisperModel
/ [8 e* O+ {& h3 Z# w
2 T. k" C& p8 w2 J' m9 h: y1 P
model_size = "small"
( O q/ O/ P9 Y; f5 J) f
3 a0 F/ w0 _9 ?: v2 ~/ S9 u
model = WhisperModel(model_size, device="cuda", compute_type="int8")
/ j/ n) ]1 l( K6 W! v# G: I
, H% x3 [7 a- V' u3 j( U
segments, info = model.transcribe(
' p1 o: c" S0 M2 Z; I* X1 _% d
sourceFileName,
5 [5 }2 Z, v3 Y3 ]# s0 R _7 w5 L/ j2 Q
beam_size=5,
3 T1 j; n) n* p! M+ @
language="en",
# E! |% s' f* o9 A0 I
task="transcribe",
5 [- {8 s2 z r, j/ ~" A
word_timestamps=True,
* A' i' D Q6 E/ I6 A/ P/ H& t
initial_prompt = "Hello, welcome to my lecture.")
0 S6 f [" m8 P6 S( ?: S1 |) q
/ n. B6 |- c, V6 G, U7 d: T
for segment in segments:
. @0 j2 w9 |7 R* R; M5 A
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
; n4 |! y% D! h- W. S+ t8 f
3 H4 _+ a; p% t& u: S$ m
for word in segment.words:
( m; }9 d! g) J, o K/ p( ?& w6 q% d
/ `6 A- w5 y- Z* ^
----------------------------------------
1 h. h) ~1 T6 \1 h: |8 @3 ?" f
2 w9 A2 S p' I$ \5 @+ p, N e
代码说明:
, f9 t8 B! J; w& J, }8 U8 W/ V8 y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
' s* p, b5 r. u+ k+ a
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
% V$ W, ~$ E" ^3 o9 B: q' T
2,segment 本身是很粗糙的,做字幕勉强能用。
, R! B4 v9 F1 s' r/ p
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! U6 @6 M( Y# H
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
3 H* I! o1 Q0 r' S% q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: E* B* T& w. b3 s* y
5,model.transcribe 中参数说明:
: T0 B7 b! J: d3 J8 k$ {
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
6 [: w! R# y; f+ ]/ u
其中
l/ r4 r: c& W+ C/ g
word_timestamps=True,
4 L/ e8 W9 d/ v' m; ^9 h
保证了你能拿到 word,否则是拿不到的
i+ u' F9 }5 R& n1 I! O8 O% G; }7 G
initial_prompt = "Hello, welcome to my lecture.")
5 b9 @ t$ M L g7 P
保证能尽可能准确的断句 punctuation,但是不是决定性的。
$ h/ k! s) f$ Y0 r
其他参数可参考源文件:
: f0 t6 o' L z- U
https://github.com/guillaumekln/ ... isper/transcribe.py
) X% R: f( w+ X4 z* Y# K
152 def transcribe(
5 N5 z& J! R5 O& N" M, \/ U/ ~- B
从源文件你可以看到是支持中文的句号断句的。
; g& H/ k# u% c; R7 }: q
& _* }. v9 ]( E0 `3 k5 P
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
9 w, p+ {' f6 W
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
) } R( h) N' W4 T3 a \4 `" d) t
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 ^8 D6 I0 R, U4 H. X0 _/ c' |
9 \ Q9 O# U! G) ^) Z2 T
! r9 ]( [9 S$ c
; v' ^% b. A7 E3 G7 W: W
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2