爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' v" E. ~$ o: X/ m  ]
  |1 n5 U6 [1 i6 p借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% y: D; _% [% S6 [% n效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
* g6 R9 {" t. b8 l: A, u----------------------------------------
% B! q" H9 f, L- o8 P# F- E2 P- n+ r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。/ L- ?4 |, P3 f. F9 A& Y4 y& ^  X
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。5 X1 L* O+ C. @; B8 x+ I# `
----------------------------------------
3 {4 `  n1 P5 h+ V4 }. Phttps://github.com/guillaumekln/faster-whisper% C* H' h- g7 z" Y# r, z7 V
安装如下:  R6 Q, [/ T* n9 B" X0 i9 p7 y6 C
1, Windows 104 E0 _, }: k, O( v' y
2, Python 3.10.11
# J4 M! O4 N/ b1 _' y5 v1 y3, CUDA 12.1: E  k/ Y0 S4 b, H
4, 在python 3 中安装
( n- Z- z- z2 C, s5 spip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1171 b% M8 a7 A* N2 Z6 u$ N% A
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。) F& f9 p* A1 q3 v
5,pip install -U openai-whisper8 `; v7 l: ]9 S; a8 k& s
这是向whisper 致敬,可以不装8 l7 b) ]3 q1 D& N
6,pip install faster-whisper# C- w5 R" j' Y8 C0 c
----------------------------------------3 D4 }. V5 Z! Q7 n4 {
whisper 我用的命令行,faster-whisper 我用的是python。
8 a( k$ z  Q( @0 z: q/ I+ c下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
+ ^" q. w0 ?4 Z0 g; f3 I
  ?) T2 W1 V( D3 C9 J) _1 h----------------------------------------# P7 y1 K) g- ]8 F

0 w) W0 ^5 `: V! p  I- sfrom faster_whisper import WhisperModel
4 D, ^$ t0 Q1 Z( E4 R; G* ?% d: b, m4 r4 |8 k
model_size = "small"5 [- o% ?4 U( e( d' z  T
4 d2 D) o- S0 T  K! f; @0 E  R
model = WhisperModel(model_size, device="cuda", compute_type="int8")* Y, q; Q/ E4 b1 v4 h6 Y

3 P: [8 z  f2 X- ?  Dsegments, info = model.transcribe(
1 B6 i, Y1 N# ?    sourceFileName,
/ w( Q( z  Q+ I# z6 a$ i$ k    beam_size=5,
: H; g1 g6 O, K8 r/ j    language="en",
. ~! J/ U) r% i6 Z8 J    task="transcribe", + L+ Z  j" o5 l3 P! w
    word_timestamps=True,
' t' z( f, O2 m# P    initial_prompt = "Hello, welcome to my lecture.")* G  k; D' |% C( N
. h3 C! j9 R* D
for segment in segments:6 Q! _7 L' ^2 m4 J& @6 m1 C: l
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
* q8 u$ G6 x# b  B% ^5 n: I. g6 O2 m# P: ?5 Q
        for word in segment.words:
) ^- G' F2 W2 I# h+ E                $ ^  ^8 m' k& ?3 L
----------------------------------------
" _" Z1 {! x% y2 f
7 s. r2 |3 k4 _代码说明:2 q' V* H7 e/ z# Z) _4 t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 L3 ~. B$ r: A$ ]7 B$ T; g, Z" r
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 E2 g2 [% h6 ?+ t' q! t2 o: N2,segment 本身是很粗糙的,做字幕勉强能用。
  M2 Q  T9 w: R3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
/ [( h( C: _1 B! `% w4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中& P) @! T$ q$ `, G0 _, K& p- a9 i
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 U/ X8 G+ u4 j( A) u' f
5,model.transcribe 中参数说明:
3 X2 V0 i6 |9 Y! c5 p你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 q# ^$ Z: D- W3 X6 T* }6 |
其中
) W0 |' p- u% p: J+ }1 ?- Z: \/ u    word_timestamps=True, 0 Z4 ?3 N+ f* `* Z, Z4 J
保证了你能拿到 word,否则是拿不到的
( Z1 V6 T3 H7 L3 z+ Z    initial_prompt = "Hello, welcome to my lecture.")) W8 ~' c% b0 s" }( _, X
保证能尽可能准确的断句 punctuation,但是不是决定性的。
" f% k& ^# s! Q其他参数可参考源文件:( Y! {1 X+ {/ x$ E9 ~/ [, F, U
https://github.com/guillaumekln/ ... isper/transcribe.py* K6 P$ x# k3 i' A7 R
152 def transcribe(
/ Y, a4 R4 \9 |( d6 E& d从源文件你可以看到是支持中文的句号断句的。; O1 Y/ r. [; n7 U

; t' q# o. W. B" B2 t6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。- p3 r6 B( d$ T2 ]. s- r( M. ^
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。0 G- n3 u' s+ _1 n$ {3 R0 b
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* k) y8 t- Y. S" c8 M' j

0 V  q# B: b4 f! ?. W; w" V % r7 ?4 G  e/ O
# c' S3 `6 n  E# w# z. N  C

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




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