爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
1 j: G$ A6 m3 f; H; B$ Z s
, s! l" T3 g% S: }' V% \+ d
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 X. q* ^ I( E. A
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
. ~2 L r/ F- U; e
----------------------------------------
2 Q9 z1 N' T: } D9 Y. X' e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( F$ ^* {# h2 o
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% `, `6 Y* m, T
----------------------------------------
! P4 Z+ i0 c/ i* C' L
https://github.com/guillaumekln/faster-whisper
- X, S) g9 W b: u* ~; J4 A$ L
安装如下:
6 @" Q+ |& @1 P" q0 P5 V
1, Windows 10
$ h4 I- U) h/ S) C8 Q1 D8 V! H4 `1 {
2, Python 3.10.11
# G, |% G" i: w t0 Q; U# z# o
3, CUDA 12.1
: m: w8 a7 j$ k* B& Q2 [
4, 在python 3 中安装
5 i5 Y: R0 w3 y! Z; e# z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
# A( w. ^/ S' V+ \
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
w j5 o- L! s1 p: {2 i& @
5,pip install -U openai-whisper
+ b( f c4 `. C# W. z
这是向whisper 致敬,可以不装
% r( Z0 g% z: h8 p6 V8 _
6,pip install faster-whisper
( b, p5 t4 D( l4 `# E4 x2 b) K% O
----------------------------------------
7 v( I/ ?+ Q! m8 g0 v8 ?- X
whisper 我用的命令行,faster-whisper 我用的是python。
( {' R$ X) f' v$ S+ u5 ?. G6 e" [. F
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
. `0 C; ?. y! r! W
9 t3 U' u8 M8 a5 P4 X4 D4 E
----------------------------------------
5 ~! e7 ^7 Z' e. F1 C% `, H( k
( u; k0 p5 P& }- {, M
from faster_whisper import WhisperModel
( j3 i# e/ v/ C7 D
4 B5 w' `0 b0 M7 P
model_size = "small"
, p( k$ H& ~! K
& L( ^) M# T: ~: Z/ R
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' F3 y# S& w" Z+ ?' H" H
9 W$ ~+ ?& j# i: U$ O- R$ u% }
segments, info = model.transcribe(
6 W+ ]/ I; R, w' s) ^
sourceFileName,
, I' Q. v# b7 P' u. ]: n
beam_size=5,
& e+ |3 {, x& I6 K/ p
language="en",
5 l' N( n( Y7 S; H
task="transcribe",
3 L, @4 U; |1 _$ q1 z7 a
word_timestamps=True,
4 q1 Z9 J C" X" E7 X
initial_prompt = "Hello, welcome to my lecture.")
) g8 \ g4 ]. g9 @
9 r2 r u9 }" {
for segment in segments:
$ M3 ]: }' i8 {/ _: D, C
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
5 @3 }! b; | g( e7 d9 k9 F
; q; V6 q1 s( L2 u
for word in segment.words:
$ v! V5 X% l3 s3 W: \
2 g* L5 w/ L; o2 c S8 G
----------------------------------------
9 I3 C- \9 i- W
8 B6 L1 m* d* @7 {/ S; q. j9 } w
代码说明:
' s, |! R U8 Z; s% P
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; |& }7 K$ M: P
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
: x0 v' {- y! p7 g4 l' b, w
2,segment 本身是很粗糙的,做字幕勉强能用。
* R- F4 S" z: G
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ A! s% Q1 T' x5 Z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
\! A5 ^6 F: ~& l8 \
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( q5 e; N* M+ G( q5 L" \4 N& u
5,model.transcribe 中参数说明:
3 z% u* S# ] W+ [" h! S
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
8 ^ ^$ h9 F- a, U5 @0 }
其中
# Q2 ?; {" r% ]3 C
word_timestamps=True,
( |+ c$ @, [' l
保证了你能拿到 word,否则是拿不到的
9 v( H' m# z, x( m" S
initial_prompt = "Hello, welcome to my lecture.")
: A9 }2 R+ A: }, O- N
保证能尽可能准确的断句 punctuation,但是不是决定性的。
& K8 H/ V) ]9 b# M/ j
其他参数可参考源文件:
4 {" \( Q) `3 O7 G) F
https://github.com/guillaumekln/ ... isper/transcribe.py
5 q( @" {4 d4 _ D# B+ A
152 def transcribe(
( F- |8 X! N7 F9 k
从源文件你可以看到是支持中文的句号断句的。
! d) H5 L4 t2 h
6 w: w9 j( b# s: j0 s* ~1 s
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
5 y9 s! b, d8 Q; x, K1 e6 C) E
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
}& U1 K5 M, \ L; \/ E
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( L/ k+ o, \) D" Z+ T
8 ]# o0 G( X+ ]* ]% s6 i
, V, E. n9 ?2 ]8 V& \! J
# j# p! X( `1 d
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2