爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ A7 N, m- H2 P$ ~; f' a8 _' @3 @8 Q. L+ C
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ w4 Q- n. t$ Z9 \" r; v效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。9 Q- T  V4 F9 t& o9 A$ T
----------------------------------------
3 j9 x, j! j' y: t/ w/ T0 q显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。+ ^- u6 c% T1 D, h
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& q5 `  Z& [: b9 a8 b& y6 e/ n----------------------------------------
# a: S' [1 U0 w* p, chttps://github.com/guillaumekln/faster-whisper
$ f* o2 O# X( K7 Y0 K7 {安装如下:
2 y8 \% s1 f( \7 X1, Windows 10
+ P* m5 b7 _' {: Y6 a3 h9 K2, Python 3.10.11
; t! F+ G( L$ ~& J& |3, CUDA 12.1
2 V# _% ]# S" v4, 在python 3 中安装
- }) G) G  I5 \/ A/ d* \pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
7 {8 z/ U9 x6 t- d# a' g- r: I这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。- n( `# W7 ^6 _. |
5,pip install -U openai-whisper  j5 G" B( j1 I4 M& A
这是向whisper 致敬,可以不装' D- c/ f* z' `- I+ d; B& ^  I) C% q
6,pip install faster-whisper
( L1 x+ j" X' }2 c3 |----------------------------------------
0 M$ H( ]3 R) R4 {2 B. zwhisper 我用的命令行,faster-whisper 我用的是python。. x" M9 ]" k% \; D% j' ]
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) b( D8 m4 V" }: r7 ~$ i- [) w# ~
: q) |) e: k+ l9 o5 t8 o3 m----------------------------------------
$ }$ g) I8 A" z
. D7 i) u9 [/ w: W1 Zfrom faster_whisper import WhisperModel1 S% G' E( \* |/ T  M2 I
1 c0 c& w! [8 O' F$ ^
model_size = "small"# j) {( y* W- U% w5 I

$ y0 r  h$ W; H$ vmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
5 h+ ^* T% \' K% ?9 F$ h/ U" {
. p9 Z2 a  T3 |$ esegments, info = model.transcribe(7 \1 N# `) m! B9 b4 N" f# V7 f
    sourceFileName,
3 P' v, @( x; I+ @2 y    beam_size=5,
! E3 T8 o7 h2 a2 _- y0 l    language="en",
' K1 Q) M( M, m! B7 P( q    task="transcribe",
1 e+ W0 F. g, Z) r* I# a% l) Q% I    word_timestamps=True, 8 H0 s2 K2 Y" @- o, I0 t6 ]
    initial_prompt = "Hello, welcome to my lecture.")& ^# y- c7 K, G8 J4 q$ f, _
7 {' x1 i" v' K, o4 k
for segment in segments:# l& g9 \( g5 b( f" c
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& h4 P8 I) i7 O" F5 r+ ]) |# {# F4 W
        for word in segment.words:: a/ l( o- @! U2 ~
                9 w, @& D7 t( W7 d- B# l
----------------------------------------
# I$ ~( `( E. D7 U6 i+ `9 P! A; I! U5 n5 n% {' }: f3 s% Z
代码说明:
+ c3 c% E1 c. g% y5 ?1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。, d5 }% a8 k* Z" O
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ N! W/ |  T6 {: A& b: l3 w
2,segment 本身是很粗糙的,做字幕勉强能用。$ t4 P7 ^% n+ D& H# D5 [" h# O
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ b* D( f" x4 Q" x" Y4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中8 A: E" ?! G% k" [' |7 f
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。5 @7 t+ b* t- I* K/ q
5,model.transcribe 中参数说明:# R) I. V6 I8 n' \/ k- C1 ~8 d* s
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
# |$ @( F4 j, J. U6 G! @4 [, C其中
8 l  ^; A$ Z5 {& [  F    word_timestamps=True, & \8 \& o/ a7 Z1 X8 e
保证了你能拿到 word,否则是拿不到的5 Y, X9 J! g* N7 E& T8 z& a
    initial_prompt = "Hello, welcome to my lecture.")
1 a3 e$ G3 H8 F保证能尽可能准确的断句 punctuation,但是不是决定性的。- S0 |- m& @# b+ h
其他参数可参考源文件:
$ o: _! j. t) E% y3 K) M" Dhttps://github.com/guillaumekln/ ... isper/transcribe.py1 }: u4 Q+ L3 A! J
152 def transcribe(# p8 [, f) K% p# R) p$ a8 X8 e/ c
从源文件你可以看到是支持中文的句号断句的。
; [7 ?* I& z% S1 c# e! Y& Z
; H% A# ^& g. G2 U; U6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。: `8 J+ C: n. Y2 {0 r* f* {
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
. m3 B- g- Z8 J9 ~8 X  P4 f8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。. m4 e- v( b* O8 y& E- k$ N

6 j& w  A" I/ _  Q/ }2 {
% `: G0 Q% d& h5 O: V- ?0 V9 S9 H$ m5 i6 l7 T5 F

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




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