爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, h; L  d0 d7 p* K+ T9 v/ A1 D" i) D  w
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& a/ ~, U; [8 h2 }4 K
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
" E% ^" [; l% G" R( l----------------------------------------
* ]. a& q& D7 @  y" v4 E' w! F" m显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。5 {. D: I4 v) q* A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 u8 k( V! e. f----------------------------------------" D8 m) E6 A( H1 g( L8 ~9 A- @/ m
https://github.com/guillaumekln/faster-whisper
0 [2 p; E  ?  S2 h* T! ]! d安装如下:. h, H/ h" E+ V8 q# }
1, Windows 10* o% T0 Q5 S$ p& y' g
2, Python 3.10.11" }. A1 }3 F2 U. ^& x! x" N5 S
3, CUDA 12.1
" z' d3 z& N* R& z: Q4, 在python 3 中安装
4 c. O5 k' b0 j( D3 }pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" v  d/ H+ M4 p1 _) T$ Y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。. p+ J8 ?" L0 X) P
5,pip install -U openai-whisper6 s3 [* T! P+ S5 ]1 t& W
这是向whisper 致敬,可以不装
9 B8 a  d6 `% M2 ]3 w; b: T& }6,pip install faster-whisper/ }1 I& x4 o2 X& [- C3 t7 u
----------------------------------------
4 s1 R  r* v5 Twhisper 我用的命令行,faster-whisper 我用的是python。& W, x  D8 R2 W9 t: C& P
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
, G  Q. E8 L: F  R' h( S
( [* K; \$ K1 a# T+ E! J# e& R" w----------------------------------------8 a9 h; v2 P4 f* N; a/ W6 I+ x
; [& D/ g' [+ I" K6 k$ t
from faster_whisper import WhisperModel( T+ S* m* D) W4 j2 g7 i

9 E0 _0 s1 J% h. z6 ?) b2 \model_size = "small"( O1 I7 z0 U- P- R" R+ G4 ]

. s1 f1 _. z$ d& m! M" smodel = WhisperModel(model_size, device="cuda", compute_type="int8")( c! H2 k( h% `8 x) l

/ i8 w1 Y8 N" Fsegments, info = model.transcribe(
+ C: u% v9 {, y, K! z    sourceFileName, 4 \  k: S) G* X0 n
    beam_size=5, ( F5 f4 U7 |- }+ z! }1 L
    language="en",
: d0 V, a% A+ Z. J$ t  G$ ^    task="transcribe",
6 _/ q0 `, b3 T    word_timestamps=True, 6 I/ ~3 e2 |) w& u* @5 p) |# S8 d& }" u
    initial_prompt = "Hello, welcome to my lecture.")! r4 E" v: [2 D2 `. j! l: g" G

5 x; D1 M) [' w3 kfor segment in segments:
: Q7 [# x. B" T( B    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
  _4 h5 w$ L: F2 ^) z: |' k& j" @  h5 s) S# O" k9 P
        for word in segment.words:
3 B7 T6 E8 w+ f4 o                + h+ h7 B* |" O7 I* ]( k2 I' i
----------------------------------------+ Q' a1 c: K! @( Y1 ~

! l5 v  O* y; t% n1 d5 V. L代码说明:3 h9 c  s  z; S5 l0 V1 T6 b0 F
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
( z$ \0 z7 k$ `1 {1 z/ S+ T" j但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
4 C# ^( ]' \0 S2,segment 本身是很粗糙的,做字幕勉强能用。4 V/ l- w: O6 U" `9 ?) R8 A! i" b+ ^7 X
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
) Z. j- C: K+ ~, m4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- P0 C0 c/ Q; s$ z0 c
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! f/ }- E! X9 `8 p! e8 A  h* d5,model.transcribe 中参数说明:5 Q8 `" p) K/ s% {; h
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数! R  S* a! j8 b, p
其中
! h' R3 T$ @( C& j: x% [% s% ^# W    word_timestamps=True, . C; y" p" v. ~: ?
保证了你能拿到 word,否则是拿不到的3 x/ o% W: b( P* d/ E
    initial_prompt = "Hello, welcome to my lecture.")( ]$ ]$ [* I$ j- Y+ D  a6 y4 l
保证能尽可能准确的断句 punctuation,但是不是决定性的。: t/ z5 p$ j! h" q/ A& d* O
其他参数可参考源文件:
" z- o; b+ Q" w9 Ehttps://github.com/guillaumekln/ ... isper/transcribe.py
% Y+ f) V1 d: ]) [5 z- Q0 P6 G152 def transcribe() G9 ?! z5 ?% O3 k( ^# v0 R5 y
从源文件你可以看到是支持中文的句号断句的。
& f) P, l! w( `% {. f8 Q1 t+ `  c- v7 u; ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
: Y9 Z4 `# Z4 L7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。& d( Q$ X! m- s, l; n
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。- o) f/ l7 g% ?: G, S
, c1 K) w( ?; z) F/ i
9 `' ?0 g6 `% k4 B: U. I

9 m2 p) X$ n0 i9 e$ _, c( @" v
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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