爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 / v; Z/ E7 \8 H1 k' p
+ x4 D$ x9 @1 ~6 e. i/ m5 v8 N
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。* Z8 N; h7 Q! V5 P2 I7 g# j
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。6 N+ G) G% M( q
----------------------------------------
# W$ F/ E: e* l1 B显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
* t9 r; q% [# i3 K在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 @2 z1 E4 K  u- l----------------------------------------3 r5 T8 B" E8 E6 ]( {* |1 k
https://github.com/guillaumekln/faster-whisper
6 X. H$ }* Q; N9 Y5 p8 i% ]安装如下:
5 j: G+ }, T% r& N7 v9 ~9 J1, Windows 10
+ c) H+ I# O# o7 @9 ?5 V. S& ]2, Python 3.10.11  R# s# w% ]! v" t" g; W+ P
3, CUDA 12.1
" r7 `4 G; u! c+ a) h4 I( {4, 在python 3 中安装
: F; m' Y8 a7 L1 r* }pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
( \6 B) g3 a- G; @" `这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。; Q! W8 P" W2 x& q# _; C
5,pip install -U openai-whisper
; K; ~* ?9 z: d( Y8 C6 o5 J这是向whisper 致敬,可以不装
* t3 r. a/ C7 [/ U& K+ |6 }6,pip install faster-whisper: `0 J+ V$ U& u1 Q
----------------------------------------5 u; n) s/ s5 k( E, N. w& @9 W( J5 h
whisper 我用的命令行,faster-whisper 我用的是python。
* S3 g/ u# Y) g) G! ~9 `下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# e9 l0 }5 F6 A, d

0 k' y6 a. B3 g( o. ?( `----------------------------------------' ~, {8 [! o* @4 K7 n

* @$ A* `/ M6 p+ j; ^9 ]from faster_whisper import WhisperModel
( U  O* s' p6 c! [; e+ s* v" g9 f/ ]2 p5 b
model_size = "small"
0 B* P! [+ w9 A& ^! d- z0 A. `: m* v8 p( F$ e1 z8 D: P, ]9 |
model = WhisperModel(model_size, device="cuda", compute_type="int8"): S) X  X$ R4 a% Y# n( }
1 Z0 j4 g# G# `0 H' q: N
segments, info = model.transcribe(# b2 B: o' Y9 G6 S
    sourceFileName,
: a% L3 o3 V* b1 p    beam_size=5, & W$ W* k2 a, U; X* v
    language="en",
% D: m6 C7 u  U& y: N! l* z    task="transcribe",
9 I- |6 z! a( T4 `4 \9 z& o    word_timestamps=True,
: p2 X' \, h3 j    initial_prompt = "Hello, welcome to my lecture.")
, J8 L1 n3 a8 o/ A, H2 }7 z) ?% g4 ^. c8 X% T* B
for segment in segments:
; j" a* b: ]# P' j& R* c    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))  U3 e+ Q+ ^  h
# L6 `# ~3 V9 e- H
        for word in segment.words:4 \1 h& e* x0 i
               
- X' l9 s2 ?4 a# Y9 ~( \----------------------------------------1 U+ o2 }' ]2 K* t

( G5 ^6 b. C% y" h7 u4 R2 f" r代码说明:* G! r4 \- I( X: g
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。2 `8 i5 Q% A% J+ Y
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 W  n* x- X6 H$ T& n7 t2 h& D
2,segment 本身是很粗糙的,做字幕勉强能用。6 `3 ^$ c& k6 H. F  i
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。' p5 |& C7 l* c) O6 K7 j
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中8 K5 A7 W+ w. ~7 m3 F/ @+ v
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 s( D$ G) n; R# L
5,model.transcribe 中参数说明:
5 ]8 q6 ~' a2 E# X3 N你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
" R9 f9 [$ U$ O; T! S其中
. L0 _- q# o* ?. N: ~  f    word_timestamps=True,
* V% j" j# U% y0 \保证了你能拿到 word,否则是拿不到的
1 r' p5 t, U% u    initial_prompt = "Hello, welcome to my lecture.")
' R) v) ^3 j# F保证能尽可能准确的断句 punctuation,但是不是决定性的。- ?6 q5 X2 Q, g) R  h$ y
其他参数可参考源文件:! a) v( j" K2 z4 f% e8 O$ g
https://github.com/guillaumekln/ ... isper/transcribe.py' e% ]9 f3 Q) d( c; U* b
152 def transcribe(9 b4 T- }% }5 Z. l/ R6 R
从源文件你可以看到是支持中文的句号断句的。* }, p& m; [7 F0 d/ A

6 r4 h3 S* A! W% d  u+ j6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。* y, X  T3 \+ v8 h0 N1 R% o
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。  d$ Y$ T: r. T4 r
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
' y: @) ?, j+ f' A( R1 ?1 f$ S7 y# K; G- r2 }- f" P7 _4 S2 v1 T
3 c0 K# f3 n' n/ `

9 j* U$ [1 P4 m1 ?3 E
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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