爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 `+ W, }1 Z7 Y& H8 g4 w- x
- k: c- i3 n/ @- M! i借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 @* A, [8 Q  \2 ?: ^
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 q' o% }4 I) S9 u----------------------------------------
" [. ?1 P: k8 |: w! e. w8 f显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
" N% a, B- ~  O: {' U  I7 Q在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
9 g% L0 b7 g7 I" F' w/ f----------------------------------------
# e* V- r! m+ \9 g* whttps://github.com/guillaumekln/faster-whisper) Z. r' ~/ [% s7 q, \
安装如下:
" B8 E) b3 |/ a$ S  K1, Windows 101 F6 ]- U) N% w3 b) E
2, Python 3.10.11! T% {" ]2 C9 K$ X+ X& J5 A
3, CUDA 12.11 T. \0 A) n1 g
4, 在python 3 中安装+ M" ]& b& e5 N9 m! b- {0 X0 ?/ ?: p
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
5 c" l+ m( b7 l- d这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
5 l1 Z$ _  |$ \5,pip install -U openai-whisper
+ u. k  Q5 y' p这是向whisper 致敬,可以不装4 O/ m  O- [( G# Y# ]: a$ i
6,pip install faster-whisper
# f' C# B$ G* a- J7 E9 ]----------------------------------------/ q! ~4 U% b# }" k
whisper 我用的命令行,faster-whisper 我用的是python。: D2 b  r$ m5 p
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
, B7 ^& q# e/ m9 H' X. c
4 W* a) A1 z" o+ g% Y, d- P----------------------------------------; ]3 w! W. W0 P0 I

: M% c. e3 V3 x6 Ifrom faster_whisper import WhisperModel$ J5 |! U/ H5 s0 w4 P8 a. X' o8 i

, k% g8 m; ~+ Z  ]) mmodel_size = "small"
* B) W# J( d% L5 d+ b1 X/ O& H& C6 G; i
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* R( A1 x2 ~1 z  Q! w9 u1 }) X8 w/ {1 Z4 _7 ?% A
segments, info = model.transcribe(& Y! y& }# X1 m3 x* Y! \* E
    sourceFileName, . e; p/ z' A2 A# m3 F
    beam_size=5,
% h! e! U2 \. |% v    language="en",
. h+ B3 G" D! x7 \/ b1 z5 d1 I+ X    task="transcribe", 9 M8 a6 o! c' X& o+ P+ M
    word_timestamps=True, 5 @5 E1 r& Q; h' M/ \
    initial_prompt = "Hello, welcome to my lecture."). w8 G. a# Q: f7 t7 m0 W3 V4 C+ T

- `( R: B4 M2 u4 u. D( Cfor segment in segments:
7 x5 k7 `' G" y9 R- ?0 P; s; o  f    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) Y* k/ a! p3 [' a

! ^$ v, A# a$ d4 D' F        for word in segment.words:  X2 t( S+ g8 [' |. g
               
7 D7 Z/ T9 s5 t$ B6 t  q----------------------------------------
0 D9 `/ `% ^% x" }
" [+ n8 c/ \  Y, k) g1 q代码说明:4 b  Q- c0 n$ A" B" n
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。" G0 j; B. j4 ?7 ]  A5 o" i
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。' V  G+ v6 {0 E/ R' X0 l+ T( b4 y
2,segment 本身是很粗糙的,做字幕勉强能用。
6 [' e  z2 ^# j) q! i3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。. n) O/ s7 h3 s, z0 r
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
$ J5 @' U5 `. [* u' h- y+ w比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
+ h5 I, e1 @% D3 f  k, Q# S5,model.transcribe 中参数说明:
$ I) a/ _0 h" l$ ]# a3 K; l2 M你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
. P" |( P0 ~3 d: y7 C; @0 K其中  P6 @: e2 ?6 S
    word_timestamps=True, % Y# o, c5 Q. @" o
保证了你能拿到 word,否则是拿不到的
8 Q8 J4 b) ^3 J4 D& B1 q    initial_prompt = "Hello, welcome to my lecture.")
! O# g/ e  l& t$ Z8 W保证能尽可能准确的断句 punctuation,但是不是决定性的。
; g6 H/ U1 H% R5 I# T# J其他参数可参考源文件:
7 ^! U6 Y& S* W6 T* N. ~! Chttps://github.com/guillaumekln/ ... isper/transcribe.py1 |% K6 B. z4 H0 Q
152 def transcribe(
0 W: V) T1 w3 B4 R* L4 ^% I4 R从源文件你可以看到是支持中文的句号断句的。0 m4 y( p- Y+ v% j6 R  v

- j1 {: n' v% t. a6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 Y2 h3 X. r" o& H7 h7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
6 `1 L$ x. @  h1 M; l( h7 E* }8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 v% j5 W& L0 r) h6 `* _
  L7 ^% F. l& J) Q, ?5 |0 ^# y8 q
9 S8 [2 C3 z; i2 B& u' f

8 v( u& `! m* x. u2 G
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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