爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ! P1 Z5 K4 O! `. B) J/ a

0 b* T3 e3 X) b; G0 v6 [: `借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) d* T8 v% }6 A效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( i% S3 V8 b/ q6 b9 R
----------------------------------------% B2 E0 I1 a' }5 [
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。. f  z2 {% c0 q5 |( D
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; f( E% c$ I: a0 \! X  W3 q3 R
----------------------------------------
8 y9 P. S" q9 Xhttps://github.com/guillaumekln/faster-whisper
7 H/ w! t, e( k* p" [9 M安装如下:
; l1 r$ ^& K: C8 a& z1, Windows 10
8 o) d+ X, E8 a; {/ j2 i5 K2, Python 3.10.11+ z4 ^7 ^0 U! Y8 U
3, CUDA 12.1
, q8 u4 f: X# c4, 在python 3 中安装: c) m8 x. M; F9 a) n1 o
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& K0 W& W" M8 k7 s8 S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ S. X( [& U  M" t3 z8 c+ S! ?$ x# N
5,pip install -U openai-whisper( f& I4 G  }5 L( k
这是向whisper 致敬,可以不装# m# c$ g( }  y4 ]# K$ H; _% D" i2 ~/ I
6,pip install faster-whisper9 C6 U9 s8 f: L) [! v/ p8 J4 E
----------------------------------------( E  v0 f! W4 i1 x1 E, R5 B
whisper 我用的命令行,faster-whisper 我用的是python。
6 U3 R( ~0 ?6 e8 h" w& `下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% }5 }) H% w1 [! R; V  `$ L) }+ a* [- p; t% I7 S/ k
----------------------------------------$ D4 R; ]# Q2 C& C! L; v7 m

5 I# C. B3 _  U  D; z, x; ?: rfrom faster_whisper import WhisperModel
7 s# U0 a' F& M! A5 S/ i' U- w$ i, k) N! |) [1 G
model_size = "small"' ~) N' P9 [+ _1 L. y7 Y

" I0 R7 N1 {1 ?" f0 P6 [model = WhisperModel(model_size, device="cuda", compute_type="int8")  z) O4 ?% L7 H% o

9 y9 F1 r0 B5 {- Z. Rsegments, info = model.transcribe(
9 A& {! k0 u7 p. h# [8 O    sourceFileName,
" W# K7 c- w% n" Y2 A    beam_size=5, 9 W* ?( {+ {% ]
    language="en",
+ e( G, @! y: @" ]( q" m    task="transcribe", # B8 H1 t7 d2 r" l
    word_timestamps=True, 6 F$ m# }0 ^% R6 ^# w! ^
    initial_prompt = "Hello, welcome to my lecture.")
0 c% z6 z6 _, S& q4 K- }/ m* P
: D: W' R0 I: }8 F, ufor segment in segments:7 v) D4 l% u, Q5 l3 e( |' M
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))! C- S0 a# d! I. }# T: w

* |% l4 v" E  n        for word in segment.words:
* r5 T: H8 C) m* W. n+ R               
: d3 e) K* F* ~# \----------------------------------------
8 X( T6 A' z: n7 r
* ]! H- Q1 |8 r9 E6 u2 k代码说明:  p0 g4 g9 p% E$ C) o6 s& j
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ _5 l! Q2 m7 u9 Y  W但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。( R4 l: \0 ?  N/ |5 s' i4 f) T$ X
2,segment 本身是很粗糙的,做字幕勉强能用。
' i1 \2 J2 l- k0 X2 r) [' {3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! `# J  |! W4 W" M4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中! H  G0 J" t% k- j0 D& ~% d
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! h8 l6 N# @0 Q9 P5,model.transcribe 中参数说明:
  d; ~7 P2 J% c9 F% u2 ^你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数) j  _4 @! @. T* U
其中& d  F; n- L$ }; O8 l1 g  a. f5 |
    word_timestamps=True,
4 M& _% k3 ^' s9 g保证了你能拿到 word,否则是拿不到的
. s4 K. ]* Q4 N; x    initial_prompt = "Hello, welcome to my lecture.")
: W; {9 q, q& c0 W% h保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 C9 [9 y3 y7 k3 v2 W8 U其他参数可参考源文件:
, w2 E# `6 q1 ]2 _1 V  qhttps://github.com/guillaumekln/ ... isper/transcribe.py  n6 [$ S  z, o# ?9 G  A# b: @- m
152 def transcribe(9 j& f+ G! J* Y* K. E! E' n+ W
从源文件你可以看到是支持中文的句号断句的。1 s( D  n  }: V5 v! |! v
5 c! y9 c% C% z- @/ l% ~1 O" i
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。' B- I4 C! R( I) z2 N& O
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。' Z! M9 V; _9 G: b! u' b7 ~
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- U5 y1 y, v' \1 E) A& I: o$ D: O& w, w! e' {# [3 \

; C# q% [/ h3 T5 I/ I5 d" |7 |4 g" r1 V% c0 t- E+ _! Y

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




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