爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ h* d7 I5 d, _  g4 g) u* ~, o, x/ H# j, b$ I  v/ o0 u
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。% w: T' {/ Z- g7 w8 w
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
6 |7 o0 j9 y( E1 K/ Q" D----------------------------------------# a8 }# _- @! Z8 l4 k; d6 r! t
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
" q7 a3 o. [: C( f- R" C% b在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
3 y6 Q2 R  N( @) R8 W----------------------------------------+ C: u, q4 h% E! q' u- I
https://github.com/guillaumekln/faster-whisper
0 m1 L: q: Z+ h7 `$ ~9 k安装如下:6 r" K  {4 ^: R0 P! h: R* s% M
1, Windows 10
/ Z- N8 w* g+ G0 [$ Q* f2, Python 3.10.11* Z0 q3 d, L: X+ F2 @" i
3, CUDA 12.1" f( S9 D1 g9 S
4, 在python 3 中安装
7 ^, f2 d+ @2 S7 ]pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" d8 @; T3 w# _7 P  Y  L& e- _
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. k& f  a5 H' |# Z7 G+ M3 L7 K5,pip install -U openai-whisper6 K( l# ?2 m$ H1 R' N1 v
这是向whisper 致敬,可以不装
0 J  t7 u( k( W6 }, @3 V( ?6,pip install faster-whisper) ?6 R& |3 j& m  v) N
----------------------------------------
; |, w7 Z' o; f4 Ewhisper 我用的命令行,faster-whisper 我用的是python。
. e  Q2 M" J" e0 `) E下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
" v* Q4 [% \( a0 D- z
# j8 b) Q3 q$ b9 o0 Y: A7 l----------------------------------------* I2 w5 F* B5 k' N, G' u5 U

5 o$ E$ p7 @' F4 I, Pfrom faster_whisper import WhisperModel
2 ^; ~4 N. s) r% m* S% A# A5 b8 M! U
: m  @1 N1 p- K! a# R8 Z% Smodel_size = "small"
$ R9 }4 ]; ?  ^5 t$ C; L5 y/ [. C
  L7 ?" C0 {8 N0 s' qmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
0 Q7 ~, c3 L" V- @1 y6 Y, A4 }8 @: R' y0 h1 M' d- }5 n
segments, info = model.transcribe(
7 U# Q7 L7 p) i" C    sourceFileName, 6 w! s, |' `! M; \2 Y# W
    beam_size=5,
/ s( G, I! j  v2 d" u: q    language="en",
9 p" H2 ~' }, O# M7 Q, X  w7 c4 ~    task="transcribe", ! M( D6 d: n4 f) ~# p: x
    word_timestamps=True,
' O) C4 E; p% {) T7 N2 d+ ]8 q, D6 K    initial_prompt = "Hello, welcome to my lecture.")
6 v, Y- n; r' C5 h/ Q; |# ^# @) s1 i& |* q' {- Z
for segment in segments:$ f. S/ H$ y3 P6 u2 ?0 }# M0 Y
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
! v+ P; @% W3 X5 B4 x
4 p( x# m# U1 F* a/ F2 J        for word in segment.words:
, b! B: E8 @% R: c! @+ w3 I+ s               
' k8 [7 y( K1 j" B----------------------------------------$ b: E4 U0 |- w# F" |
. `% b3 p/ B6 Y* M8 ?/ y( f  v; X( i
代码说明:
, I- _4 p& ^' a7 m+ U1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。: \/ B/ h# D3 @; t3 F! K8 _  x
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
4 G  v. B6 n4 s: W/ q2 p2,segment 本身是很粗糙的,做字幕勉强能用。
0 c' @( U1 F6 ^6 _$ r3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。+ t7 l! b1 \" U& a6 w2 B$ w
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中( G7 K, }1 x) b7 _% _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。2 {2 G9 l8 Z9 E" g
5,model.transcribe 中参数说明:* v$ x+ u/ l9 }/ X% U
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数! v, o+ j7 h! f; H
其中
! A0 ~8 P$ n: S    word_timestamps=True,
" C0 P/ K; m$ e- {+ O: k2 B保证了你能拿到 word,否则是拿不到的
  `# |5 d0 O1 j    initial_prompt = "Hello, welcome to my lecture.")( ?" ?' r% s. e! q
保证能尽可能准确的断句 punctuation,但是不是决定性的。
$ |2 a/ t. ]! X, X1 w其他参数可参考源文件:
6 W5 K5 Z+ U/ b& W, L6 M% j5 jhttps://github.com/guillaumekln/ ... isper/transcribe.py: v- f, }5 Y1 w$ }3 m
152 def transcribe(& h9 Z* i4 L, C% a# n3 @5 a% l
从源文件你可以看到是支持中文的句号断句的。; G, E- o1 [/ g3 D: i( }' A

. \2 S1 K; u4 ~3 U6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。; y. i2 R0 b, d3 c& b0 P- R
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( K+ o8 e! r* f! m$ d
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。& T. @6 c3 x7 _9 Z0 n! m' [8 ?" J

# L2 Q8 x- T& ?0 z) Y4 r3 j3 U
& L: F( a7 n* S1 s! K# I" I
# |9 u" J4 F4 g4 R
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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