爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 $ n$ i" p$ A( W6 \9 [

6 U( ?/ V5 j( _9 ?借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 A( C$ K. @6 Y, \7 }$ R1 D9 \  t效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。' h( W0 h2 c, U6 k
----------------------------------------
6 W- q! }, q( k. @; U显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。* r; Z5 l; G* |8 H
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 Q# ^) ~1 R# Z6 V
----------------------------------------
* v$ F9 K4 v; V2 C8 s% Vhttps://github.com/guillaumekln/faster-whisper+ e9 z: c. p$ n& z2 i6 y
安装如下:1 [# _  L: K3 s( c' I9 V
1, Windows 10; h% `0 k$ m8 N/ b0 S! F0 I8 k, E
2, Python 3.10.11
, A2 d' D1 q- L: N# E5 @: ?3, CUDA 12.1- ]; G, d: S5 z* z$ d; x
4, 在python 3 中安装
; z( p8 X2 u: H: ?# tpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117$ i( j6 g; {9 F- ]5 n1 B
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
0 i4 @+ _8 ?, I! Z; P6 c9 o$ \( D5,pip install -U openai-whisper
( M0 f( m+ \$ D! q0 a. q! N$ [这是向whisper 致敬,可以不装  M6 K, ~. U) h
6,pip install faster-whisper
" M+ l5 E* R3 x----------------------------------------! O+ [4 \; X% `. C' |- r
whisper 我用的命令行,faster-whisper 我用的是python。7 G0 |6 {* o" f. x
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:+ P5 E9 [) ^& `8 X5 s1 g
! p! A2 o9 w  B5 W0 ?
----------------------------------------7 J. a% ^' W. }) i6 G* D4 ^+ v

2 ]$ F! M7 V' {from faster_whisper import WhisperModel
7 x1 x/ m6 t4 Y
# }) K0 i9 C- U/ Z3 C; I6 Y+ N1 zmodel_size = "small"4 B2 G% r, f" Q* j7 n
( D3 A6 Z& K9 _( ]
model = WhisperModel(model_size, device="cuda", compute_type="int8")  b' q3 V2 C% y' Q# C3 P
, @" [* I3 c# U
segments, info = model.transcribe(1 l+ m' s1 D* H2 W% b
    sourceFileName, " h4 A- ?7 s9 i9 e, `; C
    beam_size=5, , A* [+ ]+ N6 m( T) B, R; X
    language="en",
  X; ?" H2 f3 W    task="transcribe", ! Z9 C& l0 K0 @, J9 \; M5 V, q  t8 M
    word_timestamps=True, 9 X. H9 S/ x" \  J
    initial_prompt = "Hello, welcome to my lecture.")1 _0 Z6 u+ O4 X3 P* N

) i3 _5 y0 M. C  }, P9 g/ P% s7 a+ z$ Bfor segment in segments:4 H! a+ {6 S% I- @  R
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
2 _0 _1 J5 F  K: V" T
( g( ?1 f$ ?4 ], R6 _, y; d        for word in segment.words:
5 N1 X5 ?( |% l( l7 C: D               
" J2 Z5 I4 b2 ?, a; S, @----------------------------------------
0 y# h% U5 p8 M' h2 \
2 w: }, a5 j/ _7 G2 g- r代码说明:
  ?$ l2 q& |4 u1 y1 ^) _$ z' w/ B1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
6 L1 _2 `, i. i2 V! L7 ^0 |* c但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。7 C; n0 z' A0 k+ C
2,segment 本身是很粗糙的,做字幕勉强能用。1 C. D/ Z: M, q# n) s! s2 G) A' z9 J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。; o/ p, D! b5 P. l3 y# h8 P5 r
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中1 @9 }, P( g! [7 m; E3 |
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。2 D$ q2 f# w  D2 }0 p6 ]% J
5,model.transcribe 中参数说明:, x9 L- S3 n6 t3 S2 w/ ]4 b
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
  l) |( E2 D5 C. p% g其中
) Q- u6 g% W5 G3 [; l. j! b* P& F    word_timestamps=True, 5 [( f# V  t. G; x; W; c
保证了你能拿到 word,否则是拿不到的6 G. _0 G& R* I9 W- ^; _
    initial_prompt = "Hello, welcome to my lecture.")! M+ L1 y, i& w- A; ?) a2 M& t
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 S. O1 B  f, N& S其他参数可参考源文件:
/ C) X6 G% S$ Chttps://github.com/guillaumekln/ ... isper/transcribe.py; q/ e, z+ Z0 g8 n
152 def transcribe(
* g8 A3 V. R4 A5 y" r, R: @( H, O从源文件你可以看到是支持中文的句号断句的。
# ^9 C7 Z- S" _- c) K$ F, T( q2 T  L" _+ x
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。, u: X# k; X; Q) i
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) t8 d& G/ G; g, |( C0 P8 A2 G
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
  o) \$ e+ d( K2 W  F5 w4 C4 m* q5 Y9 h& V

7 q/ B5 Q5 G8 }
2 |) {0 H1 p6 N# a
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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