爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ p1 ]0 M# Q* M& _* A7 y7 q5 V0 C3 B
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
; R$ Q/ v" o: e效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ g  j* [* e  i) ^% s# Y; K% d
----------------------------------------
* M! z- |$ b1 d: H; b# k显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( s1 l* f) u+ N% E0 U  ?' i在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
  O, N* i# A; V" F& N9 i----------------------------------------
: |/ X+ A5 K! Y3 T, s, V) y' B) jhttps://github.com/guillaumekln/faster-whisper$ B. L7 p, z+ e$ B. p
安装如下:# K. ]( `) Q. R, t' f- \
1, Windows 10
1 r1 ?8 a4 o/ l2 A4 a# g7 b* E# |2, Python 3.10.11
8 B3 Y" Y* Q; t' T3, CUDA 12.1
: F# c' X# N' f: j: ?  a$ C; R4, 在python 3 中安装$ T! Y9 z6 K( ^/ Y' X& ^  c
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1171 ?# u$ R  A' ]- p2 Y$ }2 O
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ s3 Q! a; B' c  `5 Q. J0 n7 T1 e
5,pip install -U openai-whisper
# }2 a6 Y( [1 g  ]& {, Q* E这是向whisper 致敬,可以不装
5 A1 j5 ?  L8 x4 \8 B$ t6,pip install faster-whisper' y. i% T( Z5 c" S- }8 k$ B
----------------------------------------
% v  _& E. ^' d2 ~  Twhisper 我用的命令行,faster-whisper 我用的是python。; Q0 D, F$ I# d
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ T% L7 L* w4 s, K& P9 x" E8 }: D9 c: Z9 U7 }0 c$ q5 E
----------------------------------------
3 Z8 r1 z2 y0 ~. K$ r$ o: ^$ G( T/ ~( Y2 n7 Y* [& Y
from faster_whisper import WhisperModel4 k& `* y; m; J" E7 Y' Y4 w9 Y
+ Y4 q  B9 U9 x+ Y
model_size = "small"
8 O0 i( U9 ^5 p) O$ I- ~0 L1 \
+ J8 K1 b9 \; S" ]3 \' umodel = WhisperModel(model_size, device="cuda", compute_type="int8")
- Z. M2 J1 m! I  x. `8 T' n& @
, z3 A1 G0 Q* z$ B" G3 @segments, info = model.transcribe(
) _+ o$ \( x& |$ G    sourceFileName,
& d# a, L; R; X6 y% f6 X$ Y    beam_size=5,
- \5 O3 \( S' n/ b" P- `    language="en",
) F( j3 Y( r+ ]    task="transcribe",
& V4 I# t( v" q9 ]; Y    word_timestamps=True,
% T9 s& _- l0 r! z    initial_prompt = "Hello, welcome to my lecture.")& b! }# d6 O& f; Q: E: N* |5 ~

& A; f$ {$ f& Z1 K9 w9 bfor segment in segments:8 b) b9 \; p4 i" I# o! X8 L$ ]% D. D# I
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))* `4 N- z5 c; y  l( U) @0 R

# V# j! `4 p  Q, m6 t        for word in segment.words:
; k' G) r7 @2 [, F6 }$ S" F) c, Y                6 i# Y2 ?' |8 D9 P2 G8 _
----------------------------------------
3 x: J" [2 W6 {0 |8 F& Z
0 b- r5 a$ I! ]8 ]代码说明:
! B8 ]0 X, ]1 @9 n/ }% p1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; Q) z& H, O* R& H1 R! X但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。$ Z: E3 V/ }8 E- O1 u
2,segment 本身是很粗糙的,做字幕勉强能用。# K+ Y! T) N$ g! Z* }9 v4 s( J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。$ s6 ~" q2 T4 @
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中: I; {# F* x( w& t! g* u: E
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。% |% P4 @( u! Y7 Y1 K- P
5,model.transcribe 中参数说明:
1 D( @2 |' y, S你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 K+ p0 C) [* s- h# L6 m2 C  F
其中
- x* Z& M) F1 j) ~2 e    word_timestamps=True, ; X0 `1 I- p  ^( v/ F: M
保证了你能拿到 word,否则是拿不到的& ]& d+ h8 K* C8 p4 p
    initial_prompt = "Hello, welcome to my lecture.")
' m( E) T2 w0 F. o4 Y- |4 j保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ `, k8 f' n4 S! u  C1 d, i' S其他参数可参考源文件:
/ e4 S+ E4 V1 G: i+ n" jhttps://github.com/guillaumekln/ ... isper/transcribe.py
% O1 t* l6 d! G/ }* b8 Z0 x0 w" O152 def transcribe(5 o8 G! Z( [" f- j6 f( Y2 Y' u
从源文件你可以看到是支持中文的句号断句的。4 w4 d& v; n/ x

3 Y2 R4 e, d% N. ?6 }7 N! @7 j6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。. c" \& n# |& @$ U# c2 g$ c
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
" j7 |' t. W# c. x7 |" M6 `8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* \6 G9 {6 s8 u2 Q7 e
: u# U+ J; I  Y
) J/ @: j! a* t8 \" y9 h8 D
7 B4 A% O/ s7 [8 O  W
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://aswetalk.net/bbs/) Powered by Discuz! X3.2