爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 & }# [8 p" h$ f* e- b

4 S8 g1 Q) }8 M* u1 V% x借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。4 C) t" [( K) t
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
! p' l9 L9 t( t" U----------------------------------------
" V% c* p* P+ G- h6 ]( l显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% z! j# |# G5 Q在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。% W7 b  J* @5 Y4 z' X
----------------------------------------1 z. B0 I) o9 A/ f& c& |
https://github.com/guillaumekln/faster-whisper
/ \: l* ~& [2 \- p$ c4 ]& c安装如下:* A5 S; {2 C- [7 z: I! b
1, Windows 10& W; v: S3 U7 ^
2, Python 3.10.11
& S! ~6 C- Y$ M& P, o3, CUDA 12.1
: \6 N5 V. F! L  r: z) V- u4, 在python 3 中安装0 h6 \0 _# _( h/ L! k
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
% F9 [5 G2 {* W; n这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。; G0 l( Z& |; l& @2 n& h* a
5,pip install -U openai-whisper6 H  S! n' x/ F& X) }
这是向whisper 致敬,可以不装! e4 z9 r  \5 `' I/ F: ?9 g
6,pip install faster-whisper) C0 |: @, m% |) c4 @( Z! u! \
----------------------------------------  e2 m- ^5 D  w! l8 [3 N7 b" b
whisper 我用的命令行,faster-whisper 我用的是python。) [3 t  G' g9 t% l
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:' W; J6 a$ b0 z5 q: P$ G
# J, W9 O' i% D9 E. |
----------------------------------------
6 K  u' ?2 Z2 K# d
( E% q2 c) h/ m1 ]7 |8 [from faster_whisper import WhisperModel7 _" w+ K& s% a" _

* ^/ I: F2 i. {8 Q9 I  emodel_size = "small"
6 I+ x8 i8 [: C! q/ k; }( @8 Q- q- `6 _
model = WhisperModel(model_size, device="cuda", compute_type="int8")
0 z; j& J0 _! I
0 A5 o8 ^) f3 q1 Asegments, info = model.transcribe($ d9 a1 ]3 T0 [. q9 Y! v
    sourceFileName,
, F2 a5 c! w+ P( U% l9 G" h- w    beam_size=5, . ^  N9 e! U# B) ?
    language="en",
: K; ]. D1 E, ^+ U% n    task="transcribe", " C! p( M' Z) b6 h! b
    word_timestamps=True,
- t* b7 `. P, p+ _0 H7 F4 @    initial_prompt = "Hello, welcome to my lecture.")0 g( U$ h( }+ q+ j

; R, l* \9 T5 B2 }8 M- V+ yfor segment in segments:
7 o. A  ^' E) z1 y0 s# ^5 W, S    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))% a& A2 e7 \8 x" z
' ^* G5 q* S4 G; j" x
        for word in segment.words:
3 ?# n, X. y2 J" r. G               
- v8 `4 }8 ^6 c+ V----------------------------------------
; _) S( n6 w+ l0 ^5 L, @9 P3 s4 F# g$ y' `6 n( ^9 ]
代码说明:
% M2 I* }) B4 U/ w* }; x, x8 M1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
6 m/ ^* V  K( N4 D+ k但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
4 R( F5 P5 n% z/ Y* r% U2,segment 本身是很粗糙的,做字幕勉强能用。% k; s" n6 D- G8 E6 r- I- X' h7 Q2 t
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 c/ w- W7 L# b' E/ W
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中  G2 c( p/ l9 u4 ~7 N1 ^% O/ r2 R
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。: m; ?7 j7 U3 T6 d# o
5,model.transcribe 中参数说明:( D6 Q! A; |! Y9 t' q, A5 W7 |
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数# Z$ ^  p6 V$ _
其中# [- p- X) _! D
    word_timestamps=True, , x# a2 O: K2 o# `* ^0 M/ [
保证了你能拿到 word,否则是拿不到的
& ~9 V8 W% l- u2 E' Q/ k3 p( f    initial_prompt = "Hello, welcome to my lecture."), A  f& P  R. W$ s3 v  P
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 R4 P0 S0 w3 B9 ~* `其他参数可参考源文件:- u  U7 y" j1 c( c
https://github.com/guillaumekln/ ... isper/transcribe.py, y2 K* }* o2 J' [
152 def transcribe(
3 ]1 H/ g' W' H1 H从源文件你可以看到是支持中文的句号断句的。4 R0 m* X- j  }: H8 n* R0 X
4 S% Q% f8 I% ?3 @* l8 t( G8 R
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。) b' A' F9 R. a& m7 t7 m, d) r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 Q( F/ v( ]! x+ z" q. V' z
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。: ~( c) m% n- y6 j
8 Y% l6 j4 H9 O

) u9 Z9 J' H# t$ W3 ]& d3 q6 V
9 U3 q" V) z" P4 A& `
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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