爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
1 v& z% G$ E: M! ~6 @0 [4 y
- t2 O6 c/ |5 J* u8 ^2 f0 N4 d8 b. d借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& ]. k4 G$ f8 v+ S2 |- m
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。7 |* L7 @9 m$ |: l  n* t  G
----------------------------------------
, B  D3 V3 f0 }( f/ t3 W  v7 {( {显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。" u0 j; t; M. M2 J9 I
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
- X, e2 S% P8 J% y0 x  H3 o6 m& Y----------------------------------------6 @% A! [0 H/ k/ W3 u
https://github.com/guillaumekln/faster-whisper
0 U. q4 ?2 N0 T" R0 p9 g安装如下:
( P9 c) i7 f/ Q0 W; A8 ^1, Windows 10- J" E0 Q5 Y( ^( G, t7 M) d
2, Python 3.10.112 C5 L' B8 C+ |& T
3, CUDA 12.1
& l8 a* P" w- M( G3 f4 B4, 在python 3 中安装" \3 l% q* |7 K; V- O
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117; z3 H' S  \0 E" b+ P
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
* J+ ~6 X; W& F% K; F3 Z1 W3 Z0 s3 f5,pip install -U openai-whisper
, _, k8 G/ j$ H8 b# p1 J& h+ Y这是向whisper 致敬,可以不装; T. d' G% |9 G" D# {) i5 q4 d
6,pip install faster-whisper* e3 M2 s6 M/ ~' T' }4 |6 k
----------------------------------------5 K, e- d. }5 `+ B5 B( F
whisper 我用的命令行,faster-whisper 我用的是python。
0 n; e/ n9 Q! D9 ?& N# k0 I下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:0 m, O# N6 H& t" B3 o

7 r( b! H& d; l; s9 L9 Z* @----------------------------------------: `% `& Z5 n3 }4 r+ e/ y& n

# }/ G/ k7 @8 I+ `7 o$ Lfrom faster_whisper import WhisperModel! t# [1 z1 r  W6 ?. z9 D2 r* X! n

3 F) p  y+ ?1 Cmodel_size = "small"9 q3 U4 T9 [5 N; z4 ]
4 C* Y2 H9 Z. _/ I4 s6 P
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* g) J( i" P% D( Y. N7 A, m3 b  k+ \9 o( ~
segments, info = model.transcribe(
! m" W+ ~" O8 K" h1 x    sourceFileName,
8 b/ d& V! r! q    beam_size=5,
/ n- i8 U6 y& s6 W% T    language="en",
+ m& p2 R& C& |- y, U9 Q) U    task="transcribe", 2 J9 q1 O# R; m8 G% a* E( [5 W
    word_timestamps=True,
7 I! g# o' j' r. R6 ]# t4 I    initial_prompt = "Hello, welcome to my lecture.")
& F& q, T) s5 T2 h8 k+ u, Z
4 Z/ J" g1 i, u% M  Ufor segment in segments:
" L. _$ h; u8 n8 b; \5 H  s* T    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)), u) ^" M( K0 X9 M  P! B" x2 N
" g$ \+ r2 q5 ]: g* C, d/ l5 w
        for word in segment.words:7 f$ N. T' w: H
               
  t" l4 r3 ~, d' i4 {$ C% D----------------------------------------9 U( X8 t4 d$ m
- m* h/ P6 \8 i3 W$ S
代码说明:/ n: P6 K- T+ w8 e
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。1 Q& c. S% ^( R' K, Z& `
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
2 y, @( n) H; f; s+ F9 \+ R2 N0 j2,segment 本身是很粗糙的,做字幕勉强能用。
0 R" X- t1 Z. o' m$ R3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( o2 V# a. C0 |/ z! B9 t+ H4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
- _, M; U$ M+ _* a  |7 s比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。2 t8 n& e2 J( T( l  P
5,model.transcribe 中参数说明:  P1 L$ w8 N" l3 D8 B
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数6 ~* O; ^5 t6 u* ^& {7 t
其中- s1 V7 k+ P% n& c, R2 a3 o/ E; w% i4 j
    word_timestamps=True, 2 [) e: a. ]6 S2 a$ g5 R
保证了你能拿到 word,否则是拿不到的6 w. o5 ]% A2 b0 D
    initial_prompt = "Hello, welcome to my lecture.")
, f, G# N7 Y+ D+ o: n. K% u9 n保证能尽可能准确的断句 punctuation,但是不是决定性的。
. H' h/ }, D9 ~- x' \0 u% Q$ D其他参数可参考源文件:
" _. Z% D9 ~  B: b5 H. D6 s) t* {https://github.com/guillaumekln/ ... isper/transcribe.py7 O8 c: c+ r9 ?
152 def transcribe(
$ U" z9 K1 ^$ S! v# _% u从源文件你可以看到是支持中文的句号断句的。+ P$ h( Z$ u- w" I1 M  l

1 W" X. Y9 B, ^6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
: F& P2 a$ M+ b# g5 a# ~+ ~% A7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。% z7 Z! m) F' u- N7 R7 s
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
  N6 {& }6 p6 t
/ p6 V2 M) z/ e( E 9 S9 m) [" s& o5 Q4 ^1 M, k/ }
# G& r3 {% f9 S1 e4 [& L/ }  [* X

作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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