爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ X4 Y. ^2 ]2 X" w. ^) g* l& ^2 u  E" Q& C/ ^* H3 B) J
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
; |' p- I' g% v/ h! b8 l效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。9 W$ {# Z' ~' b5 u9 n; l( g6 J2 t
----------------------------------------
# X# F3 A' e) |. |显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% I3 p$ K' p) H# w在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
. k! j$ a+ c1 n3 z" M' R  O- V----------------------------------------
" F! d3 g8 P4 t1 }/ @https://github.com/guillaumekln/faster-whisper
1 Y" i9 f5 H8 E6 |6 G1 K9 ^安装如下:
- _% W: \: O; m1 o/ k# u# s1, Windows 105 n8 E+ M; D6 |
2, Python 3.10.11: r5 g( ?  f  ]: Q
3, CUDA 12.14 F0 o/ o7 Y; t# ?( I7 r& Y
4, 在python 3 中安装$ J4 C5 c1 K3 Z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
" |& |1 f+ O1 b( o/ z: u) ]这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。2 |% F% H' C8 ]6 D% ~
5,pip install -U openai-whisper
: I1 g1 r8 y$ P. Q* @这是向whisper 致敬,可以不装
5 B% b2 l8 c2 c+ ~- c0 U$ n6,pip install faster-whisper
& `2 F# n! S6 k. l----------------------------------------% }' ]' U7 W" D/ J& o  o$ `7 v3 m+ c
whisper 我用的命令行,faster-whisper 我用的是python。
! C9 L, l6 @3 b; R; W  x/ N7 a" W下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 l" l# t+ J6 x/ \" O4 E! a6 Z) F- x% ^0 P6 E- h6 _+ D
----------------------------------------
  R! m% H& ~7 V6 R& g! W  }7 V  W# c: ?9 }  W, f6 K
from faster_whisper import WhisperModel8 S) d2 ~; p, a' c& [! V

3 I$ L$ I3 c+ s; Vmodel_size = "small": C4 p' c$ G# D' q6 P1 o
+ ?9 k6 h( ~- V
model = WhisperModel(model_size, device="cuda", compute_type="int8")
9 G/ M/ S6 I" o: u4 O* m  ?/ x9 @5 m4 r: \3 ]
segments, info = model.transcribe(
! k/ x" U3 B/ k" d    sourceFileName, # L7 \- G8 M8 k& \$ J
    beam_size=5, " n& \, X+ x$ P
    language="en", - u6 k6 q' D1 O( l% Z$ o3 O) @
    task="transcribe",
% a4 y% v( y! S* K    word_timestamps=True,
' ^2 `( }& Z- }6 d    initial_prompt = "Hello, welcome to my lecture.")
* h9 p2 t: Q( d- w
+ w6 ^' f% p( d) D* F# `, g5 sfor segment in segments:
' I" r6 g4 H1 N- j6 T    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 L" S! t+ m: c2 ^
/ T5 k$ J  k/ L3 a7 F+ c        for word in segment.words:5 \2 T7 O( B5 z! f3 ~
               
2 X. z$ d8 Z; S# S----------------------------------------- L; J/ {& V" L) j( W) X9 T' X
' |& g& f8 p* w' p: D( S* |
代码说明:( F+ X8 s0 n4 s$ \; c. C9 Y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。" k7 k4 q. b* L5 d0 r0 s+ X
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 t9 ?9 h% v4 [/ w# P
2,segment 本身是很粗糙的,做字幕勉强能用。
" S! @& K1 n; f7 q& j3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
5 P/ M6 n* Q; y4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
& R; g# L. S7 E  h0 c9 h- C比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
9 J2 c- U7 x* h/ s& }* h5,model.transcribe 中参数说明:3 x4 ?; {; n& `+ G
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数% y' }# Q8 y4 ~! a0 @
其中
; a2 k% R+ P7 T    word_timestamps=True, ; E5 N7 i$ d7 M( |, l, m; U+ n4 B4 B
保证了你能拿到 word,否则是拿不到的% t' m6 H9 g" X. G" L' k
    initial_prompt = "Hello, welcome to my lecture.")
* o6 `$ v+ h+ J8 F/ G* \" g保证能尽可能准确的断句 punctuation,但是不是决定性的。
0 e, X* x9 l0 t0 ?其他参数可参考源文件:
2 J& y' E) h# t7 I9 Qhttps://github.com/guillaumekln/ ... isper/transcribe.py/ c3 Z. H# b# K
152 def transcribe(
$ {& k8 A! Z1 D4 Q0 ^6 Z/ |从源文件你可以看到是支持中文的句号断句的。
+ l. n+ Y" i/ d0 ~1 v1 {
0 A- S7 c( a5 O; }- y( C' O% O- Z2 w6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* Z# i+ ~  a4 m; i) I/ B$ N2 H' ]7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。. O# ~& s4 e- F+ U9 U- ^
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。5 R. Z6 x, B0 j% n, i6 E

9 b) h! ~4 ?; l ' n) x* {. {# M- X4 f% ]3 Z

2 e8 t. f% U" R" [. W
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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