爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
. a# Z2 r; q$ F* ^+ Q5 g" D1 b) ^) d# S+ M0 T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 S5 C6 _, \* E效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. q- D% E7 U/ d4 S8 g% @
----------------------------------------$ G' i+ Z4 L; Q. ], `) }4 Q9 t
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。) ^& i, P$ N2 }2 R; j/ L
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。! v& @5 O3 Q  g! v& V/ H
----------------------------------------  D7 e# A: C+ C6 k# P
https://github.com/guillaumekln/faster-whisper! J8 w2 t! K+ e+ u
安装如下:
4 l8 ]2 d5 ]# |8 \3 m! i1, Windows 10
( o- K6 z* J" h  o) G1 y2, Python 3.10.11
' N# d2 K9 U: A3 K3, CUDA 12.1
# I: {  |4 g7 n4, 在python 3 中安装# `' y, J* |" x' U
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1171 D/ c  n% n: \) T
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。2 m; Y: l6 u* N9 T0 h' e6 j; S# O  h
5,pip install -U openai-whisper5 Z+ }* j  B: k1 `! Z
这是向whisper 致敬,可以不装" d; `% b& ?7 H" h. L5 U; U
6,pip install faster-whisper2 |' {+ D: _2 E9 l
----------------------------------------
' w. _$ X( T4 D! Bwhisper 我用的命令行,faster-whisper 我用的是python。9 F9 H+ @: I3 r- ~
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
# V" p5 a9 s6 o! c( A2 h; L/ s" D
----------------------------------------
6 m- N) J- @/ a5 f* l$ X) x2 C
% g; c: M6 f# i3 D/ Ffrom faster_whisper import WhisperModel
1 }9 w5 n- \: g5 O* j) m' \% v' _5 b
model_size = "small"- y* k' [) Q$ H% W% p- |
3 i8 O. f0 x* c/ {6 d
model = WhisperModel(model_size, device="cuda", compute_type="int8")' j( y* p6 }- j! f

. H4 a1 N' Z5 j0 Rsegments, info = model.transcribe() l. Y6 g% b7 O5 ]9 R- ^
    sourceFileName, 3 d* v. D$ V6 F& o0 V5 ~# o+ k# G
    beam_size=5,
: U% F; @8 V9 Q, d/ I' N' [    language="en",
: ?  M% ~+ q* l    task="transcribe", 8 N4 k) J- s' ]2 K$ P4 J/ H' X
    word_timestamps=True,
/ z# U" h4 \2 f2 d! \$ [    initial_prompt = "Hello, welcome to my lecture.")
* l; z3 ]3 S4 Q. X/ \8 W9 [- e# i' m( v! R/ Y
for segment in segments:
. c2 `* E0 O+ `" p2 r' R    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 ^& Z: D" }( B1 ^' \# p8 X
( b- o0 Z# D7 k+ h: V/ a# y        for word in segment.words:( @! w* a' d! E- n' E* L" P8 }
               
9 q* k& `0 ]0 m0 C----------------------------------------
4 w$ M  w. l! r, {! w% Y7 W4 \  G& `! o" S
代码说明:
" W& [! ~. Y+ v& {7 o$ [2 |) E1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
9 l. d+ z4 f- @但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。) M. E; d7 `. u2 r7 s
2,segment 本身是很粗糙的,做字幕勉强能用。
9 |# O9 J( e) S. b# d5 T& G3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 l) ]0 G; U" ]/ d$ K4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
+ t; b+ X  n5 v* U! ~比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。( B/ L% ?! w1 z7 ?( @
5,model.transcribe 中参数说明:8 `8 x* U. P3 d
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数$ @' h2 m5 ?# V# i' E
其中
1 E6 c$ {0 N# e) [7 Z0 K4 K4 W    word_timestamps=True, $ o; R7 l) d, E
保证了你能拿到 word,否则是拿不到的
. _- N. v; i! O4 c    initial_prompt = "Hello, welcome to my lecture.")4 Z4 ~8 Q$ v1 U* b
保证能尽可能准确的断句 punctuation,但是不是决定性的。+ [' f9 O3 R: \- K4 Q) t% v& e( {
其他参数可参考源文件:
( o7 b+ k, j9 a; b  x8 mhttps://github.com/guillaumekln/ ... isper/transcribe.py
# x/ b  ?3 d3 I4 N$ a  v152 def transcribe(
0 i/ H6 i7 l: m7 n* U从源文件你可以看到是支持中文的句号断句的。9 x/ c8 `# f- A" L: }8 `

# m$ z+ n6 K. f% l6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。* B$ `) T; B' ~; B7 K: s
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
! U& i$ Q, \+ M* A  Z8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
0 n2 I1 G) s7 v( Q. Q* q% Y9 F
& g: D+ b' M0 P8 h * `) b' h0 Q4 F$ Q" ]6 i) H

  F# g7 m, G2 B# |. V8 u
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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