爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 [, V- P, b) O) i
% g1 o& H3 ?+ C- L' D8 m# t借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, }5 U2 N' f! N4 R$ Y) s效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。: c3 h( M8 b' j! O
----------------------------------------
1 Y9 I3 R% m2 Y6 o. R显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。! C! P  o% \& j
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 v" v; x! K6 k0 o9 Z9 K----------------------------------------
+ m: o" M4 y* r% X2 `6 t) dhttps://github.com/guillaumekln/faster-whisper
+ V, d3 J1 [+ |& m5 S9 m/ |安装如下:
2 p' D6 g. [% x, L1, Windows 10; o$ r& g# L! s, D% |
2, Python 3.10.11) c+ {$ ^3 W' z% ^  V- k: ~3 p
3, CUDA 12.1, |$ _0 Z0 x* V7 i# i
4, 在python 3 中安装
8 G- @4 H, |& x# ^& ?0 s% Epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
& y* D+ p. K4 w/ `5 b这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。, B# H2 T& ^) L+ a) L
5,pip install -U openai-whisper
3 N) j! ?. n4 D8 C这是向whisper 致敬,可以不装
  s/ I" F  u* O: N% v7 y8 U6,pip install faster-whisper* R3 R, H! M7 ?+ g  l- W
----------------------------------------( @; P' Z7 P$ e" }
whisper 我用的命令行,faster-whisper 我用的是python。; I1 d) G: J. A% o6 A
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:' c. a7 g  _- s( ]0 E% l0 t; L% Q

- F4 s& L3 Z: Z5 T# x' W----------------------------------------& ]/ C) m; G4 {: }! _

. z1 [$ M/ _' Vfrom faster_whisper import WhisperModel
' i+ a: Y# k# E) ~' L5 s; _# M$ I) e& G4 @8 p8 N
model_size = "small"
" @0 A" _1 F& a: _! e- X* d4 @# {. `* `8 \  q. G
model = WhisperModel(model_size, device="cuda", compute_type="int8")" ~. G! [" S' ?$ h0 [2 V
3 D9 Y- N. t$ G& ^8 Q
segments, info = model.transcribe(9 _7 Q; @, {! L7 U8 s. N. T
    sourceFileName,
  f  v$ i% f8 F4 w- T# p4 `    beam_size=5,
* H1 C3 E8 c8 t/ {    language="en",
/ c0 _7 l3 |3 {( N    task="transcribe",
( B- f" H, _7 O; z8 C9 Y    word_timestamps=True, * ]2 s7 L- @$ T- C
    initial_prompt = "Hello, welcome to my lecture.")
- N0 `" K/ c$ W, W! p/ \4 u# k
6 A( s) N$ d( ]' K) B8 sfor segment in segments:
1 H3 A; m5 q( O( o/ Z    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) [& ?( f  F4 U, u) N! m( z, {+ g
- R. j. D* Z4 o
        for word in segment.words:
1 U3 y* t  o/ h" i* ^                : ^1 C( R/ H; k: X4 t
----------------------------------------( t2 H7 R2 Q+ G8 h# \
( h  |2 }' B8 L# c7 |
代码说明:: b' x$ Q! V8 R+ c* y" \
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, _+ f; A/ J4 w" Q2 T' W6 @但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 Y6 L8 J# q8 t! u$ K( V5 ~9 Z% A" z2,segment 本身是很粗糙的,做字幕勉强能用。
+ A- A; c5 M1 d, J& ~3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。) ]/ b, l9 X) `+ p
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中( D3 n( q* Q( p; s% m$ w  t1 U( R
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: u! ^! y: u, C/ Z. ~. n7 [' Q5,model.transcribe 中参数说明:
2 Z2 d$ |+ f( Q9 Z你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; d( i& i+ E( f2 X" j# k) }其中
1 B6 `- N/ |3 j    word_timestamps=True, 9 R0 u- I5 m, Q3 k3 i# s
保证了你能拿到 word,否则是拿不到的: F% o& o8 ]3 D. `1 l
    initial_prompt = "Hello, welcome to my lecture.")1 y; A: y( t" a6 W
保证能尽可能准确的断句 punctuation,但是不是决定性的。3 O4 C% a4 R% M' P2 Y5 O
其他参数可参考源文件:& [( ^* `' E7 {) V/ t" ?( [1 r4 y
https://github.com/guillaumekln/ ... isper/transcribe.py
/ u6 k8 g2 \/ R" T( @; o" T152 def transcribe(
2 m( i) r6 p- @5 R: p; x2 Y从源文件你可以看到是支持中文的句号断句的。% j. z9 [3 ^; x1 n
0 L  C4 V2 o& d) _: T
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. x0 @0 a( S2 x7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。; b( J* T" J) {; W9 s3 P$ n1 D+ a! n+ O
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- Y$ a/ ^, e0 @7 u  P4 I' v; Z2 |8 M: [4 b6 h
3 x- i! f! x9 k1 M, [: H
. G+ Q. V9 P; Y4 i9 ^1 U

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




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