爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 8 E) S. ^1 q5 y1 ~& @
% W  x+ |" ]" Y' G+ |. f$ q; H
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# p& `0 L, u' p% F效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。; C! \) Y% B7 o0 L9 A
----------------------------------------6 r- K3 e2 l, k9 F1 t0 W
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
5 c4 ^' \/ f0 ?% Y' C在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; j- ]& j/ h$ K$ A% I6 f
----------------------------------------
4 f3 n9 A. _6 @1 G/ \: \. L( Yhttps://github.com/guillaumekln/faster-whisper
, D) y: ]4 L( R安装如下:& A+ c$ ~2 |8 r
1, Windows 10
1 n" z% t7 G9 s/ M2, Python 3.10.11) x9 a  X" ~4 n0 \# i* ^, u( R
3, CUDA 12.1$ N2 [) u4 c% {; j
4, 在python 3 中安装
: M6 E, r8 O& i' U! j+ P2 bpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 F2 @/ B3 p- E" @% G4 N9 M
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 B0 T" G6 s( W( Y) l+ ]0 s8 E
5,pip install -U openai-whisper# g* P3 }( t( G; k9 f
这是向whisper 致敬,可以不装
! l/ g) }/ r0 Y9 V6,pip install faster-whisper# B9 ]- y3 R4 h. c9 X( C6 {
----------------------------------------
4 Y7 k- o; k* w* Rwhisper 我用的命令行,faster-whisper 我用的是python。
( f" J' i& v9 k9 E& i0 X- [下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' N1 j; x8 w1 d; T/ X9 E) b: {6 Y9 V4 i) W6 X9 A, T
----------------------------------------
7 ?+ x/ u: t5 G$ v( E( I) z1 \  w2 U4 ], ?6 [( C
from faster_whisper import WhisperModel
( Q' O5 [7 ]/ \# S/ [' c0 a
6 O/ x( F' d6 L: D7 \  nmodel_size = "small"! l" b% A/ R  |( p; Z
0 @6 n: n1 l! T5 k* E8 n
model = WhisperModel(model_size, device="cuda", compute_type="int8"), N3 R3 ^5 B9 U& V3 y: o
5 i! Y. u( D7 S/ v) `0 {
segments, info = model.transcribe(- ]6 F; W& E" T7 k7 {; {6 B
    sourceFileName, 7 P7 |4 m# R4 W/ p' E! A3 ]
    beam_size=5,
3 \# U- U1 P) z# S! E9 t3 B    language="en",
. U3 ~! o% [1 E! W( O8 g    task="transcribe",   P6 P0 l5 B! U. W) V3 t
    word_timestamps=True, + _- ^; n7 O( Q0 q! e# y( R" D' @
    initial_prompt = "Hello, welcome to my lecture.")
/ l; Y5 v( s" u: _* W) I3 B
3 d: w0 q! R9 b9 w+ x( K3 Dfor segment in segments:
& r4 ]+ r6 t1 S* g3 `" p    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)), _% D6 u* W8 ^) u, [
' b% t: e; m; P' m
        for word in segment.words:
* s1 P. V" S# U, _2 W# P               
: R* z3 T- N6 G. C----------------------------------------: R8 {5 A) R0 l' l. B% ?

: P# N2 `' T' B8 W# A9 R代码说明:  W2 x6 r( u3 c" @; h, z
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。4 X7 D+ _. D% Q
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 [; Z" K, `8 l5 G% }- w: n- C& `2,segment 本身是很粗糙的,做字幕勉强能用。  y5 Y. z7 z0 g7 h4 l) r- d- d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 \3 F3 \" ]+ C1 }7 H
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 N% S  C" O2 h# l6 d
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 Z1 w' N- v% u
5,model.transcribe 中参数说明:
2 e  ]6 ]7 Z4 h* L; U2 }你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
- D# \$ G  l3 W7 I4 _其中, s, f# ?& N/ s1 j' h6 y
    word_timestamps=True,   y% O( {: |8 @) Z) G+ k) o) {: h
保证了你能拿到 word,否则是拿不到的5 k# C! U. K# V6 G* h, t
    initial_prompt = "Hello, welcome to my lecture.")
% T' \2 k3 k. H4 j保证能尽可能准确的断句 punctuation,但是不是决定性的。/ m- I+ A# e$ _" r
其他参数可参考源文件:' A" g- L0 ?- x, `1 n  {
https://github.com/guillaumekln/ ... isper/transcribe.py
$ x6 Q3 G* B% E8 @4 B7 d+ }; L152 def transcribe(  u  ^8 Z: a5 a  M
从源文件你可以看到是支持中文的句号断句的。8 C% a! p: j  \$ E7 {
0 z( @! h% _' F2 E; c8 ^0 X9 j" P' ?
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。0 X. e" N/ k! O: R0 ]6 W* D
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
! O, }+ s4 X/ C4 n/ H6 e( D8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. |) u4 o- w4 e' D: W
, i0 X5 S- w4 ~$ x/ ^ ; d/ Y# i$ v0 a1 E! ?* ~
( a9 K9 [' u* R

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




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