爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 4 r6 ]1 c$ \' ?

' I  X( G+ C% j( a- \) N- A# c8 _3 ]借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
4 l& a+ ?" T1 x0 q2 {% g效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
9 b6 x) W- C% e) `# e0 F0 Q----------------------------------------- F; h* F+ N$ N( M. h5 s4 [: Y
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。3 n; Q6 F6 P4 @3 ?! k1 ]* N7 ]5 Q# r/ B
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。8 y" \* b! X/ H$ ^0 K
----------------------------------------0 f1 E1 n5 h0 {  w. k+ @0 ~
https://github.com/guillaumekln/faster-whisper
$ Q: w; d* F3 x- l0 ?) w, k安装如下:
0 }/ s: b9 ]/ @- D6 X1, Windows 10
+ r5 f( d. }8 s- n0 |( X3 }2, Python 3.10.11
8 ^" B+ g0 O$ W) ?3, CUDA 12.1
  `2 H, ?, w5 Q, h6 b4, 在python 3 中安装$ ^6 ]: U( s, l4 `7 ]8 H
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
8 D. A6 t4 [4 a/ ?7 r+ _这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 |3 v. y5 ~% N. _. w5,pip install -U openai-whisper
- B7 G& s- c; E这是向whisper 致敬,可以不装
2 I; Q. @% M0 L; d* q- P6,pip install faster-whisper
% H/ N8 B% z" r  p9 P+ e# x. W----------------------------------------
+ x7 z6 b/ W0 C5 owhisper 我用的命令行,faster-whisper 我用的是python。% A# W, d0 {: y" M# b! c
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; u" m/ r! M# [% h' {8 l8 J

$ M# ?; E5 v5 o- U/ u: _/ F----------------------------------------
% e$ j1 M" U3 j) |+ {/ A
+ K2 D' D3 W6 y  f8 ?6 S( M- Qfrom faster_whisper import WhisperModel
3 B. K' z7 |$ G) H* n8 s$ I3 f9 i6 n0 z- S
model_size = "small") e& O4 F1 g+ f8 Z" k! Q
0 q9 [$ D* a: \" l: m6 ?7 x; H2 I
model = WhisperModel(model_size, device="cuda", compute_type="int8")+ [5 m2 K9 s8 B6 f

0 M0 Q. n; e2 n0 t$ l- hsegments, info = model.transcribe(# D, N0 y1 u: ^
    sourceFileName, " O6 H$ N, z; v, J$ O
    beam_size=5, 7 J( e8 {6 ]% Z
    language="en", ) x0 R* U0 K* Y
    task="transcribe",
" W7 m" A2 x+ o    word_timestamps=True, ! I* M& h/ @% A
    initial_prompt = "Hello, welcome to my lecture.")7 H5 Y+ O# u- G9 P& E% v+ v: y0 d
9 L+ l- J% s) H- [
for segment in segments:
: _: Q! ^9 k1 {* A" ^, g8 n; Y, ?- x6 m    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ B% P' v4 E! P+ S. c: F

- R/ Y* }5 r, ^) [$ R" k        for word in segment.words:
3 [  z0 H5 I6 Y               
) j# m& }, A3 N3 t9 c----------------------------------------
1 k! w2 {) ?& m6 C' N- a
  U1 O, s& [# R3 `3 q8 G代码说明:
( u0 u" e# Q% p4 A3 `. j1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# o! {9 L# w4 Y, B) t; E6 c/ w
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! ^8 L8 l0 H+ y; r
2,segment 本身是很粗糙的,做字幕勉强能用。& m; B5 j- O$ m' b4 e/ A
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; Q0 H4 r3 C  z) ~" r3 l$ u4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; c/ k$ a- y' t4 [9 {* I比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 A+ c; t/ z3 m2 v. T! u5,model.transcribe 中参数说明:/ [; x5 H4 a& h1 e
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数6 O# o6 [3 u% k
其中
8 B. {6 w" Q+ d0 v0 @8 s    word_timestamps=True, 0 s$ N2 H3 S0 @* ^" Z* Q
保证了你能拿到 word,否则是拿不到的
: V7 `1 E& m) P2 M    initial_prompt = "Hello, welcome to my lecture.")
- f' H1 m6 [3 Q# h保证能尽可能准确的断句 punctuation,但是不是决定性的。8 |4 L, |* S# N
其他参数可参考源文件:3 I6 t& P' {0 I+ Z) m' E  M
https://github.com/guillaumekln/ ... isper/transcribe.py
. n( S! D5 |$ \: O5 d* d152 def transcribe(
% E! H+ P( w$ t4 E7 ?从源文件你可以看到是支持中文的句号断句的。0 I- C- n2 h1 f; C) ^

/ B" G# Y9 f, ~) k9 w+ A9 i6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
( v! o) s& T- g( P4 B' h) t- V7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
) J! W5 d) k; h: \' B+ ]' N8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。& Y( B% J- }0 _2 s0 j/ G9 s6 ?

9 |! ?% e; r& h7 [
4 M6 r3 W: M# ?* M* a$ q' q& O$ A5 u1 H4 n0 e% c

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




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