爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 P- N3 i2 P1 Y5 b4 I; v; n" V3 w, C& f
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。! m1 Q7 E/ A( q+ S- i
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( y2 I. m7 b, Y0 \
----------------------------------------
1 {& Q/ m4 X, p3 ~: Y显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。6 y( g% V' G3 q8 ]& i' V
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- H4 l7 v; H6 p- D
----------------------------------------
: o( D. u; @4 J- j* \https://github.com/guillaumekln/faster-whisper8 |/ ^" z" E5 B) I7 V
安装如下:. d8 C$ C/ n1 r: Z3 L) F
1, Windows 10
9 Q4 }# z4 A6 i' P2, Python 3.10.118 C' U1 n( M' P' k2 W
3, CUDA 12.14 L1 @2 u3 G" V; s# K4 w
4, 在python 3 中安装
& x) J& i) \1 z: m3 c1 l; `% kpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
6 r+ g& }& p; J6 w9 p7 T+ j3 D这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。8 t# {1 N* ^' ^8 T' h+ Q5 A1 v
5,pip install -U openai-whisper0 P( a3 F5 J6 N& K, U- {
这是向whisper 致敬,可以不装+ A! m4 r; D- V
6,pip install faster-whisper) R: @( C6 a" K7 `5 }$ S$ w/ V
----------------------------------------  v& ?. \# g0 K* G4 E$ ?& i5 t
whisper 我用的命令行,faster-whisper 我用的是python。
7 Y6 j# @2 \, P# Y6 c/ C$ r9 C下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:5 q; h' r& `" K4 a6 @$ x

% N8 V& F: n& V. l$ D0 g----------------------------------------
7 O# I! F+ f7 ]( Y- V# D
% n( e4 Z3 f1 s+ Q) |from faster_whisper import WhisperModel5 o* k9 ]) Z* G3 c3 n

* e* E7 S" c* F5 c- h/ i! Cmodel_size = "small"& c4 X3 [+ X7 e! v5 h" f
6 I0 b- I& {! `7 t8 M* \
model = WhisperModel(model_size, device="cuda", compute_type="int8"). m4 |0 O  x) L! t
" D( q; `8 o1 a8 o  b) o
segments, info = model.transcribe(/ S: K6 F. C/ ^+ O1 _2 Y% l3 }/ N0 W
    sourceFileName, # H* L+ K5 D% B' U+ V+ W" M
    beam_size=5, : \, ^+ m9 i+ b$ r! {4 ]- C& `
    language="en", 4 t8 c! p1 W* K' `( o9 t
    task="transcribe", , f# [& Q4 t) o" O$ K
    word_timestamps=True,   T! Y7 C" j7 e* T5 `; c
    initial_prompt = "Hello, welcome to my lecture.")2 j- Q7 o& r( c7 P! @
8 p; W6 n1 k# X* k1 V/ G
for segment in segments:4 A/ y8 I; R9 ~0 f) S$ l# \
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
( f: u6 M/ p, O2 s# }/ z( X4 l% J& H; R6 I1 l+ y
        for word in segment.words:& x# w+ F' @2 D; M5 t1 i2 L
               
* r3 v1 F' w- c4 m9 T- d7 p----------------------------------------
) t. K) W1 Z! Q. ~+ Z7 ]: B; M- y& G
代码说明:5 p; c1 f4 Y! u
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: Z/ s4 Y, ~  ]( e; p- T但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ i* t- y: l; T: N7 e2,segment 本身是很粗糙的,做字幕勉强能用。: u+ ~# u* w' o, V! D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。  U/ W5 o3 N9 f$ f% h7 E
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中8 Q7 N1 Q5 y2 ~4 x3 o' i
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。& S. X, @" x: l- h1 ?2 @
5,model.transcribe 中参数说明:. x* k& u( T4 i+ z* M" q+ k- M
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数& w# [+ }9 s2 ?7 o( K% Q6 `6 f) h
其中
8 r% r4 P# q  P- X, `) o    word_timestamps=True,
  C; k$ a, F  L+ F9 F( w0 b! J0 I( R保证了你能拿到 word,否则是拿不到的
" t* x0 }0 q7 H4 }    initial_prompt = "Hello, welcome to my lecture.")
& h1 S, x0 Q# U5 ^# w0 r4 h保证能尽可能准确的断句 punctuation,但是不是决定性的。
- `  i7 U: S5 @* H1 V& L: Z7 H其他参数可参考源文件:
9 s9 n+ S8 G( {0 S! mhttps://github.com/guillaumekln/ ... isper/transcribe.py
8 _; T1 @! @9 ]& B, r  X' a2 G152 def transcribe(
( g$ }% ~5 N1 w0 z$ C5 v/ R$ a3 W从源文件你可以看到是支持中文的句号断句的。
! i2 r- s2 x$ X# y+ d
/ w4 e$ E# C  x, C, @3 q+ p6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
3 n: N( w8 g; w5 F7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
5 x$ G6 m- f* D; A: S- T8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。7 M! Z. A% J  |  J* x
, T  M" f+ ^( d9 K  d
* G4 q' R' k, n: G5 t

4 _* J! H3 y- @6 h0 P
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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