爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, D$ D9 C2 A9 F+ g4 G
% j) ]! N* o. n& o借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- n$ s5 a, a5 r2 F/ u0 j/ t效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
7 F6 P# d5 }) W- p# I4 x; p----------------------------------------
) m8 e! C" B/ j. G显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。& G: ~# G2 J9 c) v4 H  ^7 q+ f
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。1 B% I: m( ~+ k* B
----------------------------------------
$ L7 |& M% N, p1 O7 t: Q' Ahttps://github.com/guillaumekln/faster-whisper
# i1 d# T5 a7 L7 j4 n! q  a6 ?/ S安装如下:6 P* `3 e" _$ i6 {  y5 \
1, Windows 10
( k6 n: d2 Z$ J: X' n7 o0 J. _2, Python 3.10.11& _4 q7 M1 C9 n, n8 y* p
3, CUDA 12.1
. a# x0 ]. g2 x% L7 w/ U+ B4, 在python 3 中安装/ V* j# z) ~3 @$ X* ?6 X
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
! E6 v3 F" i+ Z. L6 r这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& c3 }5 q5 W: f, N9 u+ h; E
5,pip install -U openai-whisper
* w' D- q% l& c/ b0 g$ N, t这是向whisper 致敬,可以不装
; b0 J4 D3 {; |. {0 x! T6 H" E6,pip install faster-whisper4 T3 Y5 M; d( M0 d% _$ ]3 }
----------------------------------------
% g( _, p' Y# L7 `$ q, cwhisper 我用的命令行,faster-whisper 我用的是python。7 o6 l0 F6 i0 l- w( B
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 F7 I6 @# a! I8 U/ [
0 k( ?1 [2 A# v% c----------------------------------------2 ]  Q/ I1 i3 T! q1 n
* k; U' H! Y2 S" s/ w1 w
from faster_whisper import WhisperModel
, {7 \; N7 `; o$ L0 h: X3 R8 r# m3 C7 |9 ?- x# T. d7 r
model_size = "small"
1 l) @1 q: w5 y; r3 g
8 `4 {% S' N' E9 Y- U' B4 wmodel = WhisperModel(model_size, device="cuda", compute_type="int8")# G% k' g) a% f- ]6 m1 F+ Z

/ \* h2 k& u2 o$ q4 {0 w/ O) `segments, info = model.transcribe(5 p! d& n0 |# ?# D1 L3 M( a
    sourceFileName,
5 k/ z1 w; B# [    beam_size=5,
) d+ o  @& L, c1 \) m! F    language="en", * w2 w/ v( a6 A- T# ]0 x
    task="transcribe", ; E. ~8 |- ~9 n
    word_timestamps=True, 3 u2 o2 k7 c$ A$ Q" A1 F" h
    initial_prompt = "Hello, welcome to my lecture."); x: k+ I/ P; @/ L. H2 O

+ G) w. Q9 p6 i& efor segment in segments:" @- T- |0 G6 N
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) f+ {# N7 G3 H% J% U2 U6 k7 l# l* l* z: ~% N( G$ l
        for word in segment.words:
% o2 W4 ~$ L% K; f9 u) K               
) E5 {4 e) q3 ^9 l----------------------------------------
% q, u& C; H& T3 A
) `! n3 v) m8 s! ]代码说明:0 K! }3 g+ `7 S* f9 A. [
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。, j: q0 O2 P& H7 D" K, m! }& @
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* ]. P2 D8 M& y/ T& G
2,segment 本身是很粗糙的,做字幕勉强能用。
* H( }" E4 h1 @) P3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 S" F: m$ I  @; e$ C( ?* J/ k4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中. T/ B. [" L  b. A( n
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。! u* s8 n7 t6 h& j% X1 L
5,model.transcribe 中参数说明:
' a) H0 ^, N: G) r+ e你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 z' _0 g" f' R2 b. D: a  h: e
其中. |% A/ S8 [* i
    word_timestamps=True,
/ d5 e' t; Q" L$ j+ N  q保证了你能拿到 word,否则是拿不到的
( ?  T, s" S) q7 p7 m" O& B    initial_prompt = "Hello, welcome to my lecture.")
( i  g2 h/ Y( [, Z9 A& s2 T! D保证能尽可能准确的断句 punctuation,但是不是决定性的。( i! |0 T+ ]% g3 y
其他参数可参考源文件:
5 j6 Z, S+ `/ ?https://github.com/guillaumekln/ ... isper/transcribe.py7 A% H& ?. d) `2 a9 Y
152 def transcribe(2 }7 H" m! Y4 g( c. F- b# W2 Z
从源文件你可以看到是支持中文的句号断句的。
, W9 W; Y# _6 Z* |7 @/ p# @) Y7 F8 T2 P1 ^% m
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
/ f4 _6 \) j/ Z8 B3 r! _$ j. @1 G7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 F: f5 Y1 c' e# h8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。) I6 g1 w' p5 M% ~7 v# Q; t
* ~( {) W( M4 ^" w6 Y5 y, j! f

* c) M( Q0 O$ d  M7 D: B2 P9 M9 w  z/ O0 W8 H5 l5 l. W8 R

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




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