爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& {" V- }$ M  f# b8 [, N, V# ^8 ~7 [' }0 @
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。" e" w! A0 o# Z- e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 @! {# o5 K; U0 J  |3 u: B----------------------------------------+ r/ I! v: H! r2 f% Q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。. U6 R2 E) R/ B* F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 H  H5 A( }" H! n  ^# l
----------------------------------------: O# M% m6 |4 S" ?# ]' p
https://github.com/guillaumekln/faster-whisper' Y& s3 k( }1 `
安装如下:$ }3 s1 r9 x+ @' @8 R* ~
1, Windows 10
& @/ d! g- c- P% e& }( f2, Python 3.10.11& u# t: |9 s+ k
3, CUDA 12.11 H/ F# a' p  u& u: D7 c
4, 在python 3 中安装& y5 |1 T: n9 t" t  m
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117+ y  ?1 t) E+ K
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
5 K, i5 K! h# D# v5 r7 _0 e5,pip install -U openai-whisper" J% s1 ]$ M  G$ F) x7 c! d
这是向whisper 致敬,可以不装
1 S- r: p) e8 O$ V& G  L: U6,pip install faster-whisper* y9 S! p' I" u- v& d, |
----------------------------------------
2 T) a, j) f* i9 Z4 m. Dwhisper 我用的命令行,faster-whisper 我用的是python。4 E4 `+ R5 v( x1 U3 q( I/ {2 i/ c$ ]
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
8 M8 c, Y( ^9 n7 F1 T1 W+ Q* m! h
6 o# }1 K& T. _0 }----------------------------------------
/ W7 ~0 u& p, _* T4 n- A9 e
- u  M7 a2 L# }! qfrom faster_whisper import WhisperModel
9 w; f- |# T. Z( c8 Y* D6 ^* E5 X- j/ m3 f2 s- H$ v: E; [
model_size = "small"
- r% j* J- {' j; `3 R1 T0 Q6 x; w) }: l' k
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' B1 q  K$ Q/ \% ~) l8 {( a& ?; N( k5 W7 ~, X4 W7 c7 I" P3 M
segments, info = model.transcribe(
- q$ `7 S) M# u) D1 @" ?    sourceFileName,
! U/ o5 |$ k3 P: V8 m    beam_size=5, ' F  a0 D" T" H/ v+ |, o
    language="en", 8 s5 Z0 W, t9 w( H/ M& Q
    task="transcribe",
9 K4 d% [- ]. I" V7 L    word_timestamps=True,
; p  [/ V3 `8 v/ v. j    initial_prompt = "Hello, welcome to my lecture."): {$ l4 S; e1 [3 {1 ?' b

2 [1 m- b+ E. l# zfor segment in segments:2 O. m8 A! ^9 M( n+ e" a. |% k
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: _& l6 x6 t/ \$ T1 W, W3 q8 L, S  G7 f
        for word in segment.words:
0 ]- }3 d. R3 h4 b               
1 a% j* u, c) W. t# E----------------------------------------
: Q2 J3 ]6 ]  u8 ^+ M5 q8 B1 `" t( P! ]: V7 K% |6 j3 Y9 R  f
代码说明:0 E  d" M( D7 f* a2 n
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 O* Y! R: Q! V
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。1 O" z; K* B( N5 e1 |! S
2,segment 本身是很粗糙的,做字幕勉强能用。9 U' m1 x& n% t) t( r
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 i2 ?& g- f1 `3 k/ B5 a
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# Z( m- g! a% H6 v- G5 Y( K比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ W) U# w" J, U3 `
5,model.transcribe 中参数说明:
7 @5 k$ o4 p. }' J你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 I$ K' B# M2 R* }8 {
其中
% f7 J9 p$ N4 [& Q3 k0 B    word_timestamps=True, 8 ], d2 M* J% \5 m
保证了你能拿到 word,否则是拿不到的. K0 o1 C+ f: ^$ q
    initial_prompt = "Hello, welcome to my lecture.")4 B& P6 q- |! `- C/ f* a
保证能尽可能准确的断句 punctuation,但是不是决定性的。; p* W' F! s: D  P9 a! F
其他参数可参考源文件:$ B) g( Z9 f! J' C+ {" D
https://github.com/guillaumekln/ ... isper/transcribe.py: a8 W& e8 a% [
152 def transcribe(
7 A! e- J8 S4 D6 V  o. \3 ]1 C从源文件你可以看到是支持中文的句号断句的。. k+ U# ^8 i! R! n; r

9 L, h  X/ |8 \  z/ s! u6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。( x/ l# H% F9 Z
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。. ?( s4 N, v( S& C
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。& J$ q8 U1 L+ u- X6 K

$ a1 D3 }) T9 `, x' J3 L8 S % e/ R9 e5 Q6 r  G1 L* v

0 j7 [: F: T& C1 z/ d
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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