爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * N) U+ a6 }" B* A1 K% e8 H# l% d5 |) T
, d# h$ T( ?7 D6 S! V4 r9 k  \
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& S; m3 F2 ?- t
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, G& s" x/ y. U$ k- ]7 \2 O----------------------------------------
) C" n2 I0 w  P9 w显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ p: ~; u! `; L在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& J# |. B5 n# B2 q1 H% R, x( }----------------------------------------* |) t; M5 ?! r  H
https://github.com/guillaumekln/faster-whisper
5 s& S% d, e! R3 z( |: Y  Y安装如下:
/ r1 S5 M$ r- v8 E7 J1 i1, Windows 103 p$ D4 D2 {- Z8 ~. @1 b/ S+ ~
2, Python 3.10.11
! D! j9 M( P/ n% O" W) k3, CUDA 12.1  t/ N1 B6 P1 K
4, 在python 3 中安装
5 ^2 I5 Z: h  H* w5 {. Ipip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
% V3 I  t5 P; G# c& k$ C这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
6 C2 }. M4 X6 w5,pip install -U openai-whisper
# V$ t5 d+ n. p, R( L8 C这是向whisper 致敬,可以不装( k) `1 j9 H; x) o# p
6,pip install faster-whisper
: a; g9 }/ R3 j0 }  }* Y3 F" [----------------------------------------
' O% ^9 k( i& I9 r" E% `whisper 我用的命令行,faster-whisper 我用的是python。8 W: B, M' d' q* d' M+ K% C
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:' }4 h" u% [% M' a/ W2 B' B

8 J- K5 k0 J# Q+ }  E----------------------------------------
3 H) y/ T; k( d* v: N) ]$ c" {# E$ Q' ~) i
from faster_whisper import WhisperModel6 k4 [+ V! L- Z  h* o2 V  D+ L/ x
; Z) B( S7 C5 _
model_size = "small"( t4 ^1 z8 t$ e( A% n! W
4 y& w/ S2 x# v
model = WhisperModel(model_size, device="cuda", compute_type="int8")
5 e% k3 }" J4 V+ W5 s$ u, _7 ]
7 d, `' Y: \# m0 o7 X- Csegments, info = model.transcribe(: I, u& K+ C$ V6 m$ ?% ?, x/ W  ^# c
    sourceFileName,
! D( `6 I  R% U/ K5 y2 Z  @- m    beam_size=5, 9 e/ a! N" T9 r- u! o. ]1 M
    language="en",
# C- l  D" V* n7 E+ }    task="transcribe",
/ g7 o( l3 I2 ~8 w& h& B    word_timestamps=True,
( P- h0 n* s/ g    initial_prompt = "Hello, welcome to my lecture.")
& D& m+ P: ?* _, N, a6 ]$ P* G0 j* V; K, G
for segment in segments:/ s  |9 M8 B8 k& n
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& Q) `9 F8 L" i% w3 F- {+ {
5 [  W) B& T/ X  e1 i3 k7 k# c% V        for word in segment.words:
. ~. Z6 R$ X* t7 W9 E0 p                " s( E3 c* [! B4 p0 T4 ^' h
----------------------------------------: w! Y# ^' f( V& D* Y" [6 v

3 ^( J4 W& ~" |: C7 G$ \代码说明:
- p: c2 k. M( M! B) L1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# {3 C( i, Y: J0 v4 D; m5 @7 n但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。3 o+ C& {3 t) ?  U
2,segment 本身是很粗糙的,做字幕勉强能用。# i2 V4 c8 L+ x
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。' g3 O, Z/ }& F$ F7 g$ X9 R4 ?
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中! ?! t' E: t7 @  S7 _; v
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。! a( B1 A& ^( Q6 l4 e
5,model.transcribe 中参数说明:
# n" U# S  s9 `/ |- f! `你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数+ b! u, I7 O3 x
其中8 S' m% h1 f+ d. ]$ e, j9 `- ?
    word_timestamps=True, 3 Z, L& H2 n5 Q6 `  M3 r+ r+ W1 ~
保证了你能拿到 word,否则是拿不到的2 h* o, O; W. F7 [
    initial_prompt = "Hello, welcome to my lecture.")/ A) x8 ^8 g/ M$ s. W3 o7 {! r* n
保证能尽可能准确的断句 punctuation,但是不是决定性的。
7 x$ W: n" |, Q, P其他参数可参考源文件:) `' |# p. k- M) Y
https://github.com/guillaumekln/ ... isper/transcribe.py
+ O3 W, M4 l, @152 def transcribe(" F0 A5 ^4 Q+ f( |) e8 C5 ~7 u
从源文件你可以看到是支持中文的句号断句的。
! Y" U3 Q  D# u- e! _) w! {4 g2 _/ D% g3 n5 ^
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。+ c. Y, U- I) ^, N% Y0 N
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。4 ]0 q1 ~: y: I2 q$ @# i
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 q  k& b$ l& B+ N) n1 l

3 I, a4 ^- D% ~, _. i1 r
) b# I# y6 I: i( m1 O. G1 }- ]4 ^7 i& {

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




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