爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
3 g2 w8 E% d5 o1 p. ]& i1 l" ]( j* A) \/ L+ u' Z4 s
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 A# \2 j1 t8 O4 L) x2 C3 ?
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) `! W+ r/ g! \1 c( ]----------------------------------------
) k9 e8 h* \3 q1 F7 ~. A显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
2 v3 I5 l. p: M" K3 z在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。0 z, L" y, f* {2 \7 l
----------------------------------------1 l6 z+ Z1 a; l1 ]- B% Q3 S
https://github.com/guillaumekln/faster-whisper
3 X1 K" S9 i4 J6 W2 J! e: u4 \安装如下:  a; i' G' F) N* d  O2 T! b5 F
1, Windows 10' q$ S1 n2 ^4 c1 g5 ?! L
2, Python 3.10.111 L$ L9 k4 y' ^/ g  V, J
3, CUDA 12.11 i% C4 w/ \* G. x3 r1 b
4, 在python 3 中安装
( X$ G# W" i1 s- h, j) jpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117; [9 w7 N  E- k- {# s" m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
% e1 C! A, t; A% O8 Z- z4 y% q5,pip install -U openai-whisper  `' i1 p  x) ?4 O  T3 Z+ k6 H
这是向whisper 致敬,可以不装
# n% e% j# C5 b+ }& H6,pip install faster-whisper! A8 r% G: i% G- P* w7 U
----------------------------------------
* M4 N- V% u7 i; F: _# Cwhisper 我用的命令行,faster-whisper 我用的是python。2 b1 k* P- {3 F9 @: P/ G
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
1 l: b$ ]- T7 u( p; z& H
8 N+ G7 k/ x* w- Q; ?3 N; u  m----------------------------------------8 X  S" M+ R% K$ ^. X' }
+ a3 t2 I, d' n
from faster_whisper import WhisperModel9 D& W- O4 X4 ^

0 H! y9 ]' D9 c" D# @* pmodel_size = "small"& k' R- y  U- i0 x
4 a. k. v$ M4 m6 Q
model = WhisperModel(model_size, device="cuda", compute_type="int8")8 O- Y8 R9 Q" |7 ]

  L! a- X" d0 j6 X. T$ j$ [6 [segments, info = model.transcribe(
# @+ ~2 w9 N. f( x    sourceFileName,
* J; m3 A' H+ M7 B' x) S; _    beam_size=5, 2 \, N6 p% s* s3 ~
    language="en", ) [+ s/ p- i& J( N5 m. r
    task="transcribe",
4 i/ o  Q; U& k7 c$ M    word_timestamps=True,
1 g9 q  f' f  l# V8 O' t6 w    initial_prompt = "Hello, welcome to my lecture.")% H$ l  l8 Z: N

2 \, d( T6 d6 Ffor segment in segments:
; N' @& |9 Y, g7 u, u, C/ K5 |5 s    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
  \, v$ S. s6 \, C& C  q; I: Y0 ^8 g9 w& I# s
        for word in segment.words:
5 Q: s; |3 X' Y; Y               
. `. D& z7 H- N9 k/ K! P. J4 c1 p+ o----------------------------------------9 J9 v) _5 l# X0 V+ p

( m3 ?: {! e- ^1 ^  Z% @  ?1 t代码说明:$ S; P, k7 Y, Q) _0 m7 p2 L( ?
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。1 V$ u5 F9 Q: L3 z
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。7 o7 ~0 f* a+ z0 e: a$ ^' d
2,segment 本身是很粗糙的,做字幕勉强能用。/ d8 P1 E" N3 u1 ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。6 w* g9 i0 }, l3 ]5 U9 H# ?0 ^
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中# Q/ F9 q4 s2 h
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 [; g2 @4 P* }: f5 r) f5,model.transcribe 中参数说明:8 ^5 v' _8 B% |  w6 ~
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数4 t7 z* ?" d7 }& e6 \4 J
其中* N! A  ~) x: u& @# D- x- R, R
    word_timestamps=True, : N6 q7 Z8 o, A* I% u
保证了你能拿到 word,否则是拿不到的; k, e  z/ s! H( {1 r. Q
    initial_prompt = "Hello, welcome to my lecture.")
) n9 g# ^7 ~. Y- B' _: ?9 R3 Q3 m保证能尽可能准确的断句 punctuation,但是不是决定性的。6 ?1 I; |9 u$ r( N" n
其他参数可参考源文件:
' R' s* ?# ~7 V0 h6 hhttps://github.com/guillaumekln/ ... isper/transcribe.py2 l1 T% h- H' w$ N; @8 I
152 def transcribe(  F+ Q0 G, n9 v
从源文件你可以看到是支持中文的句号断句的。8 v6 G, Q, U; t7 n/ Z5 m! z+ H+ G
) a# S8 o+ [  A- r2 f
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。: x& J, G# x; p4 V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。/ t4 v8 Q( g! B2 ^, H
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* v! w) P6 r, a8 b  Y- ^- }
& n( f8 U; R% }. c
5 x* u4 v, I5 X+ }$ o& B9 z9 S
, r% X, \5 r5 f8 |
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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