爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( P/ A8 G' M' ^  Q$ I( f8 n
/ F2 W, H+ a  N* i- O9 R借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 q: F1 e6 Y) m9 B效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, C# K  i2 N+ t/ @----------------------------------------
$ U  b( r0 C; I$ O% d: a显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。* G1 u. I3 i( j( W! k2 _
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。$ r. @" C/ w6 V7 y$ G# ]1 t
----------------------------------------. G( V' t, @: i" ]; q
https://github.com/guillaumekln/faster-whisper
8 Y) ]+ o) ^2 I; N2 e; }安装如下:
4 t, g8 r. e, X: e/ L8 F1, Windows 10
9 V2 e, V7 d6 Q2, Python 3.10.117 {) L9 N* f9 d9 {4 T
3, CUDA 12.1! E% D2 G9 e$ q% ?
4, 在python 3 中安装
% S) {+ ~- g3 q) @/ ~pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* I1 d; v" _7 z6 }# [这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ R3 ^; L& E( D6 }) }% t5,pip install -U openai-whisper2 M9 Y$ p! g+ a1 j2 V
这是向whisper 致敬,可以不装
$ A9 y% S& a, V( }& _0 s1 i- a6,pip install faster-whisper- i" R, y/ ^4 }) v+ U5 V2 d
----------------------------------------7 N  P" T* w! l; M- W
whisper 我用的命令行,faster-whisper 我用的是python。
4 `6 g$ B& G4 j* f  u8 }. L3 n8 v下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:( I! a( t& I( ?7 c$ k$ P: K
0 x  N* v; g5 f" j( ~
----------------------------------------* h4 A: b& U4 \" {# i0 F' T
- }  e3 L# r! }# J: `* ^5 v
from faster_whisper import WhisperModel; R( J$ w5 q2 ?" p1 G, n  P7 B

5 Z) ^4 C0 R& B1 q* D! Ymodel_size = "small"
% t" _) O# L' ~5 ]  f
6 }* y$ p; a. t" s2 H% hmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
' U% h0 \: t% \% @1 K
  ~7 k* I, n( O, ~. k' }, psegments, info = model.transcribe() S/ a5 c$ ~& o2 r) l6 t6 N
    sourceFileName,
) x: Y. ^" @! S5 ^' Z/ h" U    beam_size=5,
1 Z. A$ w6 y8 X3 A; u    language="en",
/ ~% ^; x* \3 u! `& e* }, `    task="transcribe",
: G0 L3 o3 j" q    word_timestamps=True, 2 p3 \# [9 u  ]
    initial_prompt = "Hello, welcome to my lecture.")
8 U% [0 J9 ^/ {  v5 o0 S/ Q/ L4 S& G0 m# @2 L& E* J
for segment in segments:  n% K) q  ~7 L+ ^' @5 e4 M/ \$ b$ ~
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) J0 S2 [- L' ]# n, Y& P' r
0 g- ]! @" j8 H        for word in segment.words:
6 ~& L: g: f9 v4 g5 a( d" \                # }3 }5 |- ^; \$ H/ D
----------------------------------------
& f" R8 B$ V$ ~. y+ L* Z4 x- f8 g6 f7 w9 [; v7 Y) E! Z* f
代码说明:
. t& C4 X9 E6 Z9 M1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 E+ l2 G' j; b  I
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' G8 U3 h& Z. |$ k7 L2,segment 本身是很粗糙的,做字幕勉强能用。
' E: h3 F( h9 E5 P) P  k0 M! B3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- ^5 R( `; k4 C0 I4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 o1 q* q( k7 o* e
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。- G. V3 F( m! q$ U6 y) H' c, J
5,model.transcribe 中参数说明:4 H0 T  C, c! i! Z0 U9 W$ O
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
  l# t7 n; |- ~3 M9 N其中
& e2 E" w/ I7 Z. I  q8 b0 K    word_timestamps=True,
& B( ]8 K# c; p保证了你能拿到 word,否则是拿不到的
7 U. u) z' l# r' S/ d$ M    initial_prompt = "Hello, welcome to my lecture.")( C; F) O) c6 o  ^; F
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ n' J7 S  d( ]2 s其他参数可参考源文件:5 J/ f6 U1 ?* @( l% e
https://github.com/guillaumekln/ ... isper/transcribe.py
# p; |0 Z5 _% q6 ?; G152 def transcribe(, I1 c2 h% D6 X
从源文件你可以看到是支持中文的句号断句的。
% x+ }! P2 @: U3 ~3 t% i* b$ W9 E  p  i0 s
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。4 s5 ]: y7 P+ Z+ m4 w7 T" v
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。4 ~' q8 Z% u% d2 G; K( u" [
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: ~" l3 d: ^2 j- r+ b! h2 A" i- G5 p- k3 p
# c3 m; V# I" p
7 `0 n0 _$ J/ u

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




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