爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
4 }/ d+ B  C9 x6 F0 W. d' k/ y* K# r4 e/ {: S! c; |1 A( H
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) k; d, |% a+ {6 W/ J效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。5 T$ l0 e4 R" n& x6 e6 e% |
----------------------------------------
  W, A3 U, r0 ~) `2 K1 e显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 m$ b& a& {! x" N" R- Z在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
. b& n0 e" O# V8 x( x----------------------------------------6 R! H& Z9 @1 d/ Y$ I
https://github.com/guillaumekln/faster-whisper# m/ ?* \( }, `. U
安装如下:9 ]) t  _% b7 {5 p6 j4 n2 D( @/ G
1, Windows 10
* Z0 p+ u; p4 J& J7 }0 h2, Python 3.10.11
8 \" r# u2 b& E5 Z$ {. r3, CUDA 12.1) O( w7 j. P% Z" \3 t; y
4, 在python 3 中安装
. O+ p- x( |- ~' S  P' k: vpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
, r5 x4 D; o  z3 a& n* Q! s# |这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。- ]: u5 W; J; N1 d2 _) \
5,pip install -U openai-whisper+ O- l; X4 N4 _# o3 z$ F0 E2 P: {
这是向whisper 致敬,可以不装
! a  O" a% ?6 r4 @+ \6,pip install faster-whisper
1 a' ~0 r3 B% L# p----------------------------------------" U1 `+ E5 Q& }
whisper 我用的命令行,faster-whisper 我用的是python。* t3 o/ E6 K$ ?. U6 d7 P+ t8 x9 D
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:" r7 }/ _! D! y2 F7 j! x+ B

2 e% T% Q/ q& z; `2 e1 b9 W/ r* g----------------------------------------9 T& r1 Z2 C: ]! j) |* S' g! C, `

( T5 F; b: f0 k' J6 e2 _from faster_whisper import WhisperModel
& _' b* r/ j! e( b0 K$ ~
! f5 K: X% s1 r( P' j( O6 G. r1 lmodel_size = "small"5 J! O' y$ }& ]' Y. `& j
+ z, H* |  b$ ]
model = WhisperModel(model_size, device="cuda", compute_type="int8")
. N) p# z) b. D$ J+ R- V9 l1 M5 q) p, ]  o1 h* J6 w8 K7 r% h
segments, info = model.transcribe(1 |2 o: }. v$ U) Y& {+ r2 ]: g( @
    sourceFileName, ; M2 u9 E3 f3 S
    beam_size=5, 0 h6 J5 t$ `- }( W! \
    language="en", 3 f& Q; u+ p2 U' W/ E& h
    task="transcribe", 8 O2 d" [0 e$ U7 g- Q0 @( J
    word_timestamps=True,
$ m0 R. O: [7 [2 ]! U8 G6 v- L    initial_prompt = "Hello, welcome to my lecture.")
. C; ^& ], `  N! E4 o2 M
+ c5 q0 h+ u7 {' K3 L7 D8 Hfor segment in segments:; Y$ t6 z! i, `4 i0 m2 J; q' W
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' D' O/ U! `$ Z6 `, V% `8 @+ B6 ~8 L, T+ d6 p0 Q
        for word in segment.words:
: n% i( w# R# T               
* b" k7 n$ G/ M. S( j8 {  l8 ^% F6 E: }* B----------------------------------------
( O! j! [- [9 F) J8 \. [! o  |* k, W. R8 ^
代码说明:
" R+ I/ Q% T( Q5 q7 H1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
" k" x1 q5 A+ i& P5 }' f但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
: @1 V" D6 O5 n$ @* j" }2,segment 本身是很粗糙的,做字幕勉强能用。, I$ n$ k1 v  j7 n* M0 A
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。8 x. i4 Z# Q4 _2 F9 G
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中/ m  R9 g1 n- f. }8 A
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。0 \8 t# U! v. s3 T( Z# g* e0 J
5,model.transcribe 中参数说明:' e% W4 j; M4 T
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 }% L  M$ j6 U$ a9 N& R其中; J0 F7 ?* n# P' ]1 \! }
    word_timestamps=True, 4 I! ?4 R  A3 Y
保证了你能拿到 word,否则是拿不到的4 A* k, C/ {( w5 ^+ D! q  S: N
    initial_prompt = "Hello, welcome to my lecture.")
0 y" K4 U0 F$ v: u7 W. o: t保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 X% c) z; G+ u0 ?4 d其他参数可参考源文件:+ u4 L9 v0 e4 S' \
https://github.com/guillaumekln/ ... isper/transcribe.py
: L: F2 C  k/ g  g152 def transcribe(
5 j' i8 p6 l# A! E6 i从源文件你可以看到是支持中文的句号断句的。
& l5 @4 r6 O1 h+ {$ w0 Z/ i
! b6 q5 Y/ s! P/ l) ?5 p6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
! R* x# u" A: U0 ]9 E8 S* E/ D  M% G7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% `8 \. u3 f8 [# T1 [7 H8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- j( W; S$ ^8 m, w3 s$ A( b) b  V& V5 @& N6 W9 ]4 a; O  B% |

2 N5 k. q0 a9 d( Z9 {# p& g+ j& v. b$ h, h7 I5 Q1 C2 ?

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




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