爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 `9 {. w. E& C; F# }. l1 i& @3 i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 V5 u% [) q# U" Y; V/ D" q
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
4 K6 R* p; c% ~  j----------------------------------------
7 |; r4 i7 q  Y3 \" P显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。9 S  L- ]1 T2 ^; K7 f
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。& _; o) s/ b: r
----------------------------------------7 C, x! A0 Y* Z. X( A
https://github.com/guillaumekln/faster-whisper. D1 g2 O/ k6 ~2 a" T
安装如下:; G8 `- C( t( T% p* m6 g+ j7 l4 d: J9 r
1, Windows 10
1 ~0 d* n9 n8 h- @7 C7 k2, Python 3.10.11
2 o+ y7 _1 C- r+ v8 j$ `* N! H; l3, CUDA 12.1. r" p, z1 I3 }* T
4, 在python 3 中安装
) d# `1 q) S% |$ S( e) _pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117' e2 D& L3 s. P( W7 ?
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
% t0 F2 [4 E* Y) \- j5,pip install -U openai-whisper3 H0 x- P- r- W: b. W8 }
这是向whisper 致敬,可以不装
3 U9 U5 W* f, [% l6,pip install faster-whisper1 D0 S% m$ i4 O" Y. y
----------------------------------------
" x6 N4 u( l/ d0 f- n9 Zwhisper 我用的命令行,faster-whisper 我用的是python。
, v5 S! a1 A; m. S) X, V下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
& X- @: H3 y( g7 ], ?; e: G7 e, r/ \) {- ^/ [
----------------------------------------
% W( |) T" s4 `( F+ g7 B9 @
% f# `' L9 s% h% t6 ?4 s" Q) o0 ^* S6 Ofrom faster_whisper import WhisperModel
1 Q8 ?5 a2 z" e7 _, R1 j, u
+ q4 Z4 v( Y6 ]( ?0 R0 Kmodel_size = "small"
  p) C7 b3 n( k! T( l, X9 h2 ^* B4 L/ J; j% I# t- s3 s
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* i( B' [& g; k: f% [/ f
- ]- o0 P, B/ x7 e3 ssegments, info = model.transcribe(- ]3 G4 D% _7 g4 B) s
    sourceFileName, * O+ g' T2 C# h% v5 P- G
    beam_size=5, 2 w' L; J! L; e, |) A" y& P* j
    language="en", - F- l$ k; W) o9 R  C
    task="transcribe",
: Y9 T: I( k; N# {) v. T# _    word_timestamps=True, * n# n- g) e) c/ t  B" c. P* X7 {: E
    initial_prompt = "Hello, welcome to my lecture.")
8 ^& u3 d' t+ |0 i" `) |# D
' P8 Q; d- j) I: ~for segment in segments:
0 x' m3 L) o% o3 d0 G3 A5 c8 t4 u0 h& z    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
+ ~4 t2 G! h1 c, M# f7 x8 Q! O9 F: t/ J4 D0 a! r& z0 `
        for word in segment.words:# ?8 v  I9 A# X( c
                ( M" S- K- w9 o% R  r
----------------------------------------
9 a  A# Q' v4 [, y+ G- x: `: n( `4 `2 W
代码说明:) x4 I) _! R0 Q" r4 D" m
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# {8 a5 }$ c* j
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 b; d0 T/ k3 R
2,segment 本身是很粗糙的,做字幕勉强能用。5 X; E+ p7 E. v% W, c7 `7 Y( e
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。! I! A. B. V( _2 ?5 I) q8 O
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
" V- ?& L4 T5 u8 L5 h3 k比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 h2 A& v$ W& L! q7 d
5,model.transcribe 中参数说明:
' @! e4 R  w8 O6 H你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
. c/ X: F" }$ p1 F其中2 D8 d% S. S) r
    word_timestamps=True, 2 t. S" R- U5 ^* ~
保证了你能拿到 word,否则是拿不到的8 S6 P; J) y& \1 _' r
    initial_prompt = "Hello, welcome to my lecture.")# R2 O; [8 w( @4 u4 V6 n# e; _9 N
保证能尽可能准确的断句 punctuation,但是不是决定性的。- M5 r/ A" n. l* q0 |; v* [
其他参数可参考源文件:  U& _1 ?" J' ]
https://github.com/guillaumekln/ ... isper/transcribe.py, k6 \; Z& \# K& H& }
152 def transcribe(
  g3 ?6 _) ~* z8 W: r9 q从源文件你可以看到是支持中文的句号断句的。& i3 w2 t# x$ y

/ x! K6 q" O4 s  o6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。9 D3 d0 w* [9 N0 ?6 C2 x- ]
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。5 r; R9 Z% t3 o! m
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。' `7 V: Z0 d9 e6 Q5 w" W
0 e  P1 X  z( i7 f) Y
3 K! V( r8 W  `

; R2 P6 c  T  N4 `0 p8 T& G
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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