爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ( f+ G* T' e' D  \7 R

* S( E, n- F3 t! M借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。2 p6 T( {0 x9 U5 _& s& T7 Y( V: |
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; h+ y$ z! u& |----------------------------------------; _! g: ~8 u' H0 S
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。* |- i& M3 K" @+ O# g: u* Q9 I
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。* ^: D5 l( x: @; y6 m
----------------------------------------* w' E* f6 P) t
https://github.com/guillaumekln/faster-whisper4 K- a0 Z/ P3 q: X. {
安装如下:
- R8 r( _8 Z% @8 q3 o1, Windows 10
) s. G: z% y; ?2, Python 3.10.11
' [: a$ p3 @/ H* V4 p% x5 y$ o3, CUDA 12.1
) U: f' ?9 a! S8 J4, 在python 3 中安装
! [- q* N) z8 Lpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117+ z7 }9 a6 ^" {" p
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
, M9 G, X+ U/ B3 S, ~5,pip install -U openai-whisper
4 O7 \$ X3 e; o2 _+ q% `1 y这是向whisper 致敬,可以不装" K/ K: q0 p1 J. c, Z
6,pip install faster-whisper6 g+ t/ S$ l# c7 N! z+ }
----------------------------------------  F6 I2 A" q$ v# [7 V- A" O% W' B
whisper 我用的命令行,faster-whisper 我用的是python。3 g( \8 f& k. ]% K+ F0 J
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- M& R5 o4 p% o, L: z6 ]0 I& J0 W' I
3 l$ d9 z) c- \& [. H' r
----------------------------------------* T& C; _4 g5 r9 x1 a/ ~. O
3 D% S9 z% d! \8 e8 }
from faster_whisper import WhisperModel7 O+ f+ G, b$ w0 H2 o2 {1 K+ t
& \- K) x. E0 x* c+ [  \
model_size = "small"
, d, d8 y- B7 O0 Q' k* c: r0 \# R; a/ c' F* M) H
model = WhisperModel(model_size, device="cuda", compute_type="int8"): E' z& H7 ~8 \8 O3 `  h$ U8 y

- Y" m* l& @2 b" l$ Zsegments, info = model.transcribe(, G2 C$ c9 M$ a* C7 f8 u
    sourceFileName, ( `1 ^* D' Q4 V; Q
    beam_size=5,
+ Z6 p3 B1 Z. m3 T, o, U    language="en",
1 t, |9 d" ^8 q6 _" r    task="transcribe", 6 D6 ^8 x6 Y0 ~  s7 S/ e
    word_timestamps=True,
- f! e1 J* b( C" I- v+ q    initial_prompt = "Hello, welcome to my lecture.")
* v. g8 u  M4 W. w" M, Q+ g& _
. [- m( [& u( |( X! `for segment in segments:
( R3 j. P( t0 \& ^* m4 w5 ]    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))7 s9 C7 c% F+ m( B! G  a

( _! Z% M$ ?) |' N8 B' _        for word in segment.words:
6 [9 m: Z# v' C# a! k% N                - l) u8 r  f7 h( G" C. x
----------------------------------------9 h  O2 O) z7 t

* @" t- a" j$ i  Y% @& t代码说明:
; P3 d/ S6 H1 h$ r$ Y9 A% a3 n1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。) i# @/ C1 E9 c3 C4 c  G
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。' o: E8 Y6 Y8 b; Q* l3 l! v9 ]/ A- {
2,segment 本身是很粗糙的,做字幕勉强能用。! P' e: J6 v: _0 j
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。5 V$ U1 {" u: r4 l) P6 k
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中9 }; l7 L- Q% h
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
' a5 v; O. K% q" h4 a  h5,model.transcribe 中参数说明:
" q! i* E. j" f; f1 [8 Q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
$ M+ Z1 O2 e! `  }; {0 E- C! ^# L. H其中
: R5 f( K) V( O3 k" @: R) A; ]    word_timestamps=True, ! U% t1 ~0 ?% {/ o3 \  I4 ?" e& ]/ y
保证了你能拿到 word,否则是拿不到的
& i& Y9 ]8 C6 a. H+ d) L, n    initial_prompt = "Hello, welcome to my lecture.")1 {8 ^4 ?4 r  }- o  O5 e* p
保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 n7 }8 f0 I6 p4 @2 O% m0 j  b% v3 X其他参数可参考源文件:1 d# u) n! A4 O: Z
https://github.com/guillaumekln/ ... isper/transcribe.py
! h7 z7 g" a4 B152 def transcribe(
  `- a$ w/ W# B! G. }从源文件你可以看到是支持中文的句号断句的。$ h/ E$ _7 x5 S: a( ?

- O" S% `- |% m2 U6 k4 V8 Q6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
; s% D2 I' C3 _3 ]7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 D8 `. N  l, `: C+ H8 X8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。: A3 A8 W8 x% r! ?- ^! ^( v* f

1 n! }& g3 H6 o+ ^" I
9 p- j; P/ y& {/ O. P6 E/ L
7 N! s/ ?" G, {# S" P/ R) i; T. k/ q
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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