爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
4 ~1 {+ d# q* {
. ~7 ^; p3 s& ^+ P: K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& d  T) J' |4 [4 I7 P
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。4 y. l3 {# @1 y9 U6 n8 Z' s
----------------------------------------& E9 F0 @& k5 R+ O  U" @
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
$ O7 y) T6 F: m6 D* g5 `在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
* {2 w# n! K4 n( V! G5 c! F----------------------------------------
. @# v  Z  }3 q5 T% Z3 Bhttps://github.com/guillaumekln/faster-whisper
+ p" S$ q9 |  m! l  k( M8 H/ W安装如下:" ~& O1 S1 g- T$ m& |
1, Windows 10
) w2 t  ]3 d1 y0 B* h; T2 U8 v2, Python 3.10.11# M5 l. `# v2 L& P2 a7 V3 S, f
3, CUDA 12.1
% b5 J6 c( I3 p: F" z4, 在python 3 中安装+ g  H1 C8 x: T6 i
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1170 w3 c' G+ _3 `# k
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
+ t6 I5 V2 V$ X2 K0 B- y5,pip install -U openai-whisper- W" d7 u  M2 S
这是向whisper 致敬,可以不装* R/ n7 ]; M$ V, n% Y
6,pip install faster-whisper
$ E. d' E# `" L$ M. B, K  K7 c$ C  \. o----------------------------------------
- Y3 i, V5 C1 x% q0 ?) q! I' qwhisper 我用的命令行,faster-whisper 我用的是python。0 k# f( q8 e/ w7 e# d% I
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:" k1 B% b5 O# x: l6 N* |, j
6 M4 Z7 c2 N" k- G9 @' z: q% R
----------------------------------------
$ ~/ J* L+ }* `5 p6 X. `5 o
: ?$ w( V; D- @1 M& Hfrom faster_whisper import WhisperModel
9 x, }. `3 _: _% F8 `/ x" h! E9 U0 K* e+ g
model_size = "small"
8 J3 g% W3 ~) ?
/ h% \) `; X. l% z$ O3 q. Lmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
, ]" t, D4 C. R- l9 W: Q
+ r1 P. e- f7 M$ k  Q) B  ~segments, info = model.transcribe(% Q. s# Z$ c0 K1 |4 ^
    sourceFileName,
* l+ Y) i# t$ g3 H! q- O    beam_size=5,
4 b" E- ^9 A7 F, _1 K    language="en",
) p5 I, ]9 \9 i0 c! h  k5 _    task="transcribe", ' ~; s/ s9 B" S; D' W$ @# ~
    word_timestamps=True,
; k* d0 _/ G& V1 n- n    initial_prompt = "Hello, welcome to my lecture.")* f& L% `: Y# k5 m% q+ p

! ~7 g7 `2 v, @8 J5 O/ j; s0 `$ ]for segment in segments:
5 }; T' R9 ?8 I    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))- c# Z" I- e0 P

7 |  x( q& p" O: X6 D" d        for word in segment.words:! }! S% T; L5 A, K) ]9 f1 r7 Y
               
, k$ ?2 a% X, W/ I1 g  ^2 E----------------------------------------  r* d3 n8 O+ y& o% V  y7 x: C% V7 f

# N6 S$ ^  d8 f3 z8 e$ T* K代码说明:6 I) a' _, q, {8 i8 E% `, @0 q
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
( M1 i4 }$ d% @6 x但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* H( O, K* Z- l/ J7 d$ r: _2,segment 本身是很粗糙的,做字幕勉强能用。
. k, ?3 m+ Z# P0 ~! A+ e( }3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! P8 k5 A7 b9 a9 @4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中! [/ m+ d2 S' k) Q- c$ ]
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。0 n* A+ U$ J" j2 V
5,model.transcribe 中参数说明:/ }% a" E& j/ x1 h( G  t
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
* N* K/ W# N. d& a8 W8 q9 w其中5 @- |8 x$ N' J+ Z2 R# |
    word_timestamps=True,
- Y9 B& ?& n: z保证了你能拿到 word,否则是拿不到的+ U5 }6 }' x# S& j$ k
    initial_prompt = "Hello, welcome to my lecture.")- H" Y# ^9 U! ~
保证能尽可能准确的断句 punctuation,但是不是决定性的。
$ ]7 F: L- x6 d" b% l' C3 k其他参数可参考源文件:
$ _' A* o0 b* H$ \https://github.com/guillaumekln/ ... isper/transcribe.py
/ H' u! }2 n6 s) P* O152 def transcribe(
$ f" O/ [8 {/ D, t' w. @; U从源文件你可以看到是支持中文的句号断句的。
/ m3 |- R0 ~* H- r" E" ?; w
! s* @& K$ {8 f3 o  e1 K7 Z% x( B6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。+ T2 j! v) t1 f5 o# i! m4 g
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。/ I7 U( E6 L& Q% @/ R. }  w2 T
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* b, W: ?8 d/ x3 x; [' h

9 s" l7 W& S1 ~" U# l5 u# R) ~
% S: @1 W  U- S  T' Z
/ x: E* Z$ H; U- ^8 G& H3 s* s
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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