爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( T4 S, v7 s, |9 B5 b2 b/ g% U4 D- o. l4 p* O7 S9 m
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
  z; d, b: ~% E8 H0 |+ Z$ U效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( r9 }0 u/ ?8 w6 e9 o; x% V9 }: E----------------------------------------
% a$ P( K& `% _- r/ I6 S显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。. g  d* C" _/ g  O; ?
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# {/ ~' \' ?% m" x) f----------------------------------------
9 F; y$ C% o# R" h+ p" T! {https://github.com/guillaumekln/faster-whisper$ B6 d2 m8 P5 k/ W2 p$ D. p0 m% \
安装如下:
! S( n) l0 m1 q5 B1 k) P# V1, Windows 10/ D3 @. [4 m, w5 s; {  s% a
2, Python 3.10.11
+ ?7 P+ H; d7 R$ [$ x3, CUDA 12.18 ^6 s" ?& L3 ]" a: M5 s
4, 在python 3 中安装
- E. v5 C8 t5 r( w9 {9 [pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1177 d2 s( A0 d/ V/ j* S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 ~# P! C9 R6 V/ i$ E7 [5 h, k
5,pip install -U openai-whisper6 _7 l% D0 I+ D
这是向whisper 致敬,可以不装; n2 C9 k9 o" `
6,pip install faster-whisper  h. r) |( V" D8 z4 y
----------------------------------------" d: C  P3 G' h. a6 c
whisper 我用的命令行,faster-whisper 我用的是python。
) l' N8 Y9 ~+ g; [  E- q2 D下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
9 |3 E9 y+ g" Y" w/ I
. `0 O' p) w6 @* w+ [. Q----------------------------------------) G4 y. w1 y  y: U( Q% X1 c- J( b
* N; U8 k9 L9 o' I
from faster_whisper import WhisperModel# K9 f' e9 }& o& {- f" _+ d
: Y- Q  e& a4 _! c1 \5 k2 Y
model_size = "small"! s' O3 z, T& S. {* e5 i4 a
0 r; _6 v6 A; D/ ]
model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 o; b7 k6 q7 M2 ^2 c
; T2 S9 ]$ h% m0 k% A  `segments, info = model.transcribe(8 q9 @9 U+ j+ X2 v# G
    sourceFileName, . j2 @7 `5 j; c6 a$ a3 w4 K
    beam_size=5, # s' G4 A, G7 J# K1 {
    language="en",
" x) x2 H9 [- ^0 E5 L: ]    task="transcribe", ) `+ N& a. }6 Q6 b, U0 B) ?
    word_timestamps=True,
+ Y9 a7 a# e6 j5 Y( h- U  q9 ]$ A    initial_prompt = "Hello, welcome to my lecture.")
( r* J" s1 I( U; v+ s$ c& D5 P2 `, `' Q. \! }8 {' n
for segment in segments:
4 l% O! z0 H+ w    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
/ M7 p/ p) B* w" B, s+ P( z: Y. `; v: n2 e* H
        for word in segment.words:
) Z6 w4 L( z, @9 l% ~               
- ]+ t; {( ~: H. X2 f1 R( ^+ i2 @----------------------------------------$ _. {1 P0 q, B

* @5 w8 D& c: ^1 l  S代码说明:
& S" G- \/ m% u3 _6 t7 v1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。1 f/ c( x# M6 c/ k! z
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. V; ]6 e$ j: ?! s
2,segment 本身是很粗糙的,做字幕勉强能用。
2 S' I6 F7 M6 R1 g/ k0 O3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 X- f- ~4 ^9 ?
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: E6 c$ j2 L7 g& q1 d比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。) y$ a) [, `& E! ]0 y2 e$ X3 l! P
5,model.transcribe 中参数说明:
& x, D( X4 k/ r$ Z) Q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
4 w7 W7 b/ Y8 o& V- |5 [* @7 I0 s) |其中
& k; p6 j3 M$ z& E" f) N/ l    word_timestamps=True,
$ A) w* b+ s* I% @0 I2 Y保证了你能拿到 word,否则是拿不到的3 k$ \1 R1 \( a9 h7 Y4 H0 N! @$ D& L
    initial_prompt = "Hello, welcome to my lecture.")
( C1 H+ Z, F7 i8 `保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 p+ i4 R- _/ f& J; G& b) K其他参数可参考源文件:
! P" @: k2 S9 p+ k* Xhttps://github.com/guillaumekln/ ... isper/transcribe.py
. }* e: p$ ]& U$ a. P" R152 def transcribe(7 f. b( g3 K$ x2 h: p
从源文件你可以看到是支持中文的句号断句的。1 Q) F1 {' `' W! B+ M/ U5 n3 d# |

! u9 ?/ a% X: h: V6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
6 _! b& O1 O7 O5 m( O  e7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 V# T. m5 A% Y9 D8 b8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。. P# l- N6 Z- m# D" n5 Y7 x

/ ^/ u  F3 q4 m! F1 j! E6 ] " _0 o9 }* R4 I$ F8 m: L4 N2 t
1 J! z& E8 z5 t; E+ ]

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




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