爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 Y0 s6 Y! a( Z  M2 y0 f
% G) t# ~* R  }借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
  Z6 T7 B* i6 H  B3 r$ u8 O效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。5 M4 `* r' A1 ]4 C+ Y' K% f, ]
----------------------------------------$ w$ ^, L0 U* e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
8 s! p! _0 L8 s% R) ?6 A/ S& `在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; Z9 i1 A7 B% _----------------------------------------. s* o6 I2 y& A, o( N3 U
https://github.com/guillaumekln/faster-whisper+ G' D; J0 p! [
安装如下:
! P# g5 w# y7 U2 s1, Windows 10
, `7 r) |1 R9 N  i7 D2, Python 3.10.11
' i% E, [7 [/ ^' L* x' F3, CUDA 12.1. g) }& f& }. s* O& I
4, 在python 3 中安装. i' y: h; [+ [
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& i& U4 ~" |* A+ V! f
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。) f! Y9 C3 X- u. {* P( ]; w
5,pip install -U openai-whisper
% f$ K& f! H0 T  A" Y' ?8 G这是向whisper 致敬,可以不装  Y% Q) |( g8 w( P1 A' L# ^' Z; w
6,pip install faster-whisper$ }8 K- H4 \9 C5 B
----------------------------------------
: v' I) b% u) Hwhisper 我用的命令行,faster-whisper 我用的是python。
2 b& \, x) A" t; W0 M; z下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
, a* \2 v8 b& m; s: U# X: u( W1 T( K) i7 i0 G' C; D- T
----------------------------------------
; u. L* U+ s. O7 g0 H  F
& o; _9 T) O1 ?7 Y; wfrom faster_whisper import WhisperModel, r# Y$ E  w2 O! n( s  I# T! W

9 _$ O- a8 \" S! z; S$ Imodel_size = "small"% T( V8 J" V* c
$ @) N0 A/ H. m8 X' c: \
model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 P+ P, r- `  @4 o4 }' X1 O& e) J: C0 L( l
segments, info = model.transcribe(& d/ y1 ]4 n0 v
    sourceFileName,
# ?5 M# A. _+ t% Y7 y    beam_size=5, 9 T+ x3 i! g) s5 b0 q2 W7 |
    language="en", % @! \; I6 Z4 i% S6 F/ S  N6 d/ u
    task="transcribe",
1 S6 U+ I( o* i: [6 m! @: X    word_timestamps=True, ( Q8 B/ b* e$ i8 h
    initial_prompt = "Hello, welcome to my lecture.")4 m  E" ?  ~0 A! L, Z5 ~8 X
  G+ w- }! T: j% S2 z5 E! x' i6 D
for segment in segments:5 @9 v/ w, `6 B, z. @4 \
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
0 V: N: `4 ~1 \. M$ P' I+ T3 n' i4 [+ N0 H" v
        for word in segment.words:
% a$ W# F* p: E' w7 p               
" X  R4 T  Z0 Z----------------------------------------  m; I* y/ J$ |8 x% g+ J

. j' t+ {0 m' y# g( f. M* l4 I代码说明:
6 W; t  i& c/ T$ B4 `+ n1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# ^( v7 _0 f& o. C, ?0 p但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。7 {6 W% {0 d% G  ]- }9 _) J6 i" v8 F- a9 h
2,segment 本身是很粗糙的,做字幕勉强能用。; P$ ^- W& A9 `
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
% d( K5 o  d! \$ h+ X. p' v1 Z4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, G/ r3 z1 v% {( N# F比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。: t; `  @  f' D  H/ _, F, Q. N
5,model.transcribe 中参数说明:1 K5 w3 f+ m$ g2 c0 D
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
3 s' I+ O9 A* o; F2 f7 @其中& @9 E4 `: |+ l+ M' `
    word_timestamps=True,
  P2 o4 W& {) O8 Y% F2 H  K保证了你能拿到 word,否则是拿不到的
" [/ p1 G9 c9 ~    initial_prompt = "Hello, welcome to my lecture.")
1 S5 A0 e/ K2 G' p: k保证能尽可能准确的断句 punctuation,但是不是决定性的。/ |' @" s' ^/ ?7 ]' H
其他参数可参考源文件:
, h6 Y) x- W: q& mhttps://github.com/guillaumekln/ ... isper/transcribe.py
. p3 c) O. a8 M1 @+ V' Y+ @152 def transcribe(
5 h6 S* b! E4 ^& T8 a0 {+ U从源文件你可以看到是支持中文的句号断句的。
+ }" c2 e4 e* ~& I8 d$ z
5 [/ \+ a% a% m! G6 D; j) R6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。8 w" @4 ^5 L; E% i, p5 {# w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。5 e/ z+ O/ N* ?' |" U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。( W$ c; M" n( p# R8 u

$ Y# R. s8 H4 l+ q
7 U2 ?1 e& }% m! S" \- \9 q9 h# R

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




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