爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑   r9 q! C. W' Q5 i# R+ Y" F9 n1 Y
% [7 Q4 P6 z7 a  l) T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% h  |4 e6 o( L9 q& h6 C# }; O效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
, O& |  j. ]" R' k& w----------------------------------------! `- @9 k, j+ b. y$ _7 ?
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。8 ]+ \3 V- H9 x4 e  A7 e1 e" {, _- `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
' l2 C: q: _8 |+ B0 ~----------------------------------------
4 B* N. L( q4 I/ }5 E" _+ Y+ @' v: Qhttps://github.com/guillaumekln/faster-whisper
  D3 ?  E- n* s. X: p+ C3 r, |. J$ @安装如下:
% {1 D2 e% p, w. K1, Windows 106 c! m% z5 K  {' b
2, Python 3.10.11* t5 l3 O- D* _/ Q8 _
3, CUDA 12.1
4 E- u1 ?3 `; P4, 在python 3 中安装2 X1 y3 k, M2 P( S/ S+ u( U
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
  c+ E5 g2 V/ L& ]  W) E4 v+ C这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 b7 o! p# l+ U! K5,pip install -U openai-whisper2 M! e1 @2 q- K9 m* n; I
这是向whisper 致敬,可以不装
. n1 R/ g9 D- I. E! p8 O6 k6,pip install faster-whisper1 R0 K  S; @% B4 C. \' W+ ?8 h
----------------------------------------
5 r% K' T) h3 M: l1 {% `whisper 我用的命令行,faster-whisper 我用的是python。
6 _- r& V% U6 M下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
9 q$ A8 x7 d% O( w% e1 ]
" U: K& d( U* z( s1 R' A----------------------------------------
4 Q, s" t; [6 N% g1 w% {/ Q8 s( j6 h4 W4 ?
from faster_whisper import WhisperModel& X. t+ N0 x% ~

' \1 o  `, z* }) N, Jmodel_size = "small"( F1 D2 j9 ~; u; A4 \
; k; N, s+ t9 u+ I: f6 @
model = WhisperModel(model_size, device="cuda", compute_type="int8")
+ V; _, N' R) a$ `0 o% P$ {1 Z4 E' P4 G0 p
segments, info = model.transcribe(& U3 m! U  P& [
    sourceFileName, / G% U) Z" [5 P
    beam_size=5, / t5 s8 G: Y; S3 \7 O' }8 i
    language="en",
: ^) z6 ^( `; |$ R    task="transcribe", - A3 W+ N) ~3 G& \  S1 j) n% p
    word_timestamps=True, 5 |* Z' u6 K. V* z. E& M6 E
    initial_prompt = "Hello, welcome to my lecture.")
0 z3 v' F: Z: H
% {% S4 W# D- n( sfor segment in segments:& s* w: W% F! ~  ]. j# D
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))1 l# k6 B# e, R: L5 Y: \' m
! q2 q1 a' Y! A( }  ^
        for word in segment.words:
) Q$ G, C( K3 |               
0 o2 P- N* H, `0 R3 r$ Q: E* J$ s----------------------------------------) C; M6 ^, D5 K0 P9 T
6 E* M  ~, }6 o9 n  I+ @8 ]. P
代码说明:
5 S+ \, h2 W, F3 w; a: k1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。  X( l+ [; d6 i9 O. P8 m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。1 C% @- Z+ F4 l8 X8 ^2 t" T
2,segment 本身是很粗糙的,做字幕勉强能用。( \2 {0 L$ L5 e
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。# a4 c$ \5 Z% H; }( |) T, l$ b) h
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
0 f7 `, Z6 N) \6 K/ S6 {比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
8 N; W* n( l+ t# d4 m5,model.transcribe 中参数说明:2 V& [/ n* g. v7 d* J
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 K" |* }, s( s$ }其中
$ Z, ~9 k  J. h/ j- V5 \4 l- A    word_timestamps=True, 4 x0 a5 \: n' \5 M) C) E
保证了你能拿到 word,否则是拿不到的4 |( @8 a4 ]- p' y( N  ~
    initial_prompt = "Hello, welcome to my lecture.")  i% b0 v& W) C2 J
保证能尽可能准确的断句 punctuation,但是不是决定性的。" d. C% I3 k4 U/ x5 Q
其他参数可参考源文件:
3 d8 R* E# k: ~7 Qhttps://github.com/guillaumekln/ ... isper/transcribe.py4 q. W! E% S- a- N
152 def transcribe(
' ^5 _. [" ]! h  v4 {9 c从源文件你可以看到是支持中文的句号断句的。5 r3 [7 O" l% F

7 t6 [  _8 A) t& Q1 U+ \6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
/ ?- Y3 s: [. S& b- |! [7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。, z0 k5 D( r; ~# p0 ^6 u8 s
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。0 k4 R% _- r4 B, v% P4 r# I

) A& i) |, X: u: O6 @- T 2 k( @$ `  i( \/ q& t

* L" g5 C0 q7 `
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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