爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 Q" f. w3 K4 h; G* ~( R- c
7 u: T- `$ K$ J5 J借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 ~- N9 g' P8 C+ O( c% g: t; f6 C- o效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
: ^: w/ g5 M% h3 o- G- |4 @7 Z3 k! T----------------------------------------
. y9 p9 B' g/ D, r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
0 n4 {6 M" X5 V$ r在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。  X, r/ y7 V2 v* ?, j
----------------------------------------$ r# d) ?, A! c3 H: V
https://github.com/guillaumekln/faster-whisper
6 c1 l8 c% g% c安装如下:
  N+ U5 n2 g: a5 z0 k7 J( D1, Windows 100 t* c! e1 i8 {4 C! f; J8 O( t
2, Python 3.10.113 i/ @: x4 q9 b, O! T( z
3, CUDA 12.1* W) U3 m5 S# k3 J. f
4, 在python 3 中安装
' u! T$ k0 w( h* m& }2 Epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117* x- e4 o( A8 f, Z( \- l
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。3 L4 n& ^( P5 Z1 I4 F
5,pip install -U openai-whisper! d& o1 c% @) w4 v1 p/ H- I
这是向whisper 致敬,可以不装
, l2 X7 N, b' Q, M/ G; `6,pip install faster-whisper
5 C' Z, I( e$ F5 v: ^0 i----------------------------------------
5 v4 o- e) E, e3 ?6 Nwhisper 我用的命令行,faster-whisper 我用的是python。
' y7 @0 c; H; a8 s1 D! K( `下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:4 t8 U9 r2 G4 _! a

/ O  V3 z$ Q" ]7 q/ h3 k----------------------------------------
$ Z+ Y, H+ \0 u9 u3 K8 u1 t6 I5 f, p! h5 T8 v+ C1 K% h' j
from faster_whisper import WhisperModel
* |9 S5 v: h. Y3 Z5 t* l# W( |- P  g
3 e% S0 R4 _1 c" a1 Xmodel_size = "small"
0 v1 x1 b% Z$ V- |  G/ T1 `! L8 t0 E% i( ?8 j& K
model = WhisperModel(model_size, device="cuda", compute_type="int8")
$ e& }' \- p8 k& _
3 ]4 Z+ j& d( c* Y5 Vsegments, info = model.transcribe($ c. J$ s; \; d: M' ?) x" d7 W$ T
    sourceFileName,
& \7 x6 i, B: n, A    beam_size=5,
/ l" b9 }& [9 W; ?    language="en",
: _- l& @8 F5 K. f& L; k' T    task="transcribe",
. q7 H; W& V% b    word_timestamps=True, & u, J. I: Q/ O! j) S7 d- h" a+ Z
    initial_prompt = "Hello, welcome to my lecture.")  Z' W; U. ]7 `+ q% w5 ^7 @  B
, [, s' x! X- _
for segment in segments:9 h! Z# L6 o& |1 j* G& j0 B8 t4 E
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
5 `( C% o+ O9 \; w' B& ^! o
! C7 S! Y6 n7 c; {! Q, r        for word in segment.words:6 B9 i* [( d! k  g4 v
                ( z! e5 M& x1 U2 c, d+ z+ F$ N
----------------------------------------, k9 P' k# S' g. A7 }# t
/ x# K' M1 X2 J2 F. M0 W! ]% T* h+ G
代码说明:
5 h4 B2 t1 t4 G/ ^9 _7 S$ |( K' c1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。* {6 k% H* M" v9 o/ `  k
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。, u' |! R% ^# Z0 q( h$ a4 M9 C( o
2,segment 本身是很粗糙的,做字幕勉强能用。
0 U+ `: }& a9 y& G3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
" J* m0 I0 D3 J8 [$ u4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中) b. n* ]9 t6 C! i7 f# s, o8 X
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。7 _9 ?- Z5 p! a: m  }
5,model.transcribe 中参数说明:. e7 x" \/ [2 j! T$ z1 `
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 _! q8 N# C" F$ Q' L其中; U3 `5 S" V* t% J" ?2 z
    word_timestamps=True,
/ c4 }0 L% T0 F, E& a& S: Q保证了你能拿到 word,否则是拿不到的$ b1 B; g1 v7 N  s5 a8 K
    initial_prompt = "Hello, welcome to my lecture.")
. Y3 x: m1 p* E, m保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 [$ v0 k" g. g, D其他参数可参考源文件:8 Q" C3 V2 y3 ]( B( T
https://github.com/guillaumekln/ ... isper/transcribe.py. m- |% Z+ M& J0 `# A' Y
152 def transcribe(3 h7 \3 X5 m- z) T6 s0 z/ c
从源文件你可以看到是支持中文的句号断句的。
1 ]8 _4 I. M5 Q% C- d- t% O8 }* {3 V& }5 `8 h
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
4 L# S  x, s, V/ {- n7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。  K- i1 v  m/ W; t' D, I- f
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。/ o, |) a7 B' w/ _
2 ~" E* K9 U0 C/ ?5 z& B

/ `& K9 k: t& n* f# f6 R2 y5 y5 ^% k8 \

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




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