爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
: D2 V) Z: i, ~/ v& m
: @' G8 C9 I4 F! }( X% s$ u
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: q! ?$ z! u9 Y2 ?
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
. u$ T, O8 V) x6 w( E
----------------------------------------
) A! V* A9 j9 |5 L7 T# i+ {
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( S" t) ]! A' D1 D. ~
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 X) z$ p+ x0 a" r- w, B( q* p
----------------------------------------
3 ~ T* }/ v8 Z9 O8 W g: ?
https://github.com/guillaumekln/faster-whisper
# K/ f! m# D+ ]- y/ v* D" x* O
安装如下:
6 b, |& Y: e3 a' i( {6 x
1, Windows 10
$ Z C* k& B2 Y' U) w8 _# @
2, Python 3.10.11
' A2 R. `( r( K' R- m: q( N: P
3, CUDA 12.1
" Y& l* S K; W" i* [; @
4, 在python 3 中安装
# ]' b3 {7 G5 L# F. i
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
" L% t5 ?6 y. L4 M4 a
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: f9 l( i9 E: U
5,pip install -U openai-whisper
9 q$ J4 J B" K9 C8 o2 {' l
这是向whisper 致敬,可以不装
/ c$ w1 s- G% @+ u, z$ Y! T8 j
6,pip install faster-whisper
0 H5 g8 R8 k3 H: W0 Y W8 x' P
----------------------------------------
5 z' E, e. E* m
whisper 我用的命令行,faster-whisper 我用的是python。
3 [4 r+ [, k* U1 Z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 i+ D" O, G: e- ?3 ^6 M
3 d4 X- D1 }: k1 T7 u3 H7 B- r/ S; O
----------------------------------------
- ~! g* j+ L5 ^: t2 n F, e+ y
& L3 y0 ?- p! ?6 z
from faster_whisper import WhisperModel
& U- C4 D: n0 i6 E7 \
6 g6 m. l* c( B0 H$ T+ @
model_size = "small"
, v5 [4 r* ?1 v" f) c/ S
/ N, @) m9 X7 S3 l# I2 J( q) [- I
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- V$ |0 l1 `! b# G9 E, G
7 ?) c: n1 r" Z5 c; i9 G
segments, info = model.transcribe(
( Z; f( P6 A+ N0 |0 Z$ f4 J$ n" `
sourceFileName,
" z4 b0 Q. U& P1 `
beam_size=5,
$ S; B! @, i' A; ?, c+ H, Q& V) u4 H$ b
language="en",
2 w9 Y% }/ V) Q8 k! p6 E; i
task="transcribe",
0 b, Z3 N/ A# B3 y
word_timestamps=True,
; @, R# w' K# q* n4 q; Z4 r
initial_prompt = "Hello, welcome to my lecture.")
4 @/ J0 G$ H& h
1 X6 f2 `" `# ]1 N5 p& r3 z5 o
for segment in segments:
: K1 ^: o+ \( N# @0 u
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 O9 _" v/ ?: P- i, B$ L
% s% p- e; u4 S4 @! a3 d
for word in segment.words:
$ F& K6 b" Q8 f0 p. [& H
1 I8 S* e3 T8 M& M# b& m5 y b
----------------------------------------
- k9 [ h3 g) n: u
5 _/ v0 e, b2 ]& W ^% @
代码说明:
! {0 N7 w" k$ s
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ t+ ?% g# `* k+ w: n; [% E
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
, ]5 w9 {* x) j- `
2,segment 本身是很粗糙的,做字幕勉强能用。
8 N+ A/ F9 N7 h
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
" z. Z* H' H+ V
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
4 M" M! Q+ L: u' Z
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
$ z- s p9 v* u- a, {8 a/ d7 U
5,model.transcribe 中参数说明:
; }) W4 y0 R& ~. q& p4 A( h$ t7 c
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
2 x+ e k- w5 q B& w/ W# ~
其中
+ p/ H7 h( X( Q. O. `
word_timestamps=True,
( k- z# ]6 F& ~ o) q* m9 Y, M' }5 H
保证了你能拿到 word,否则是拿不到的
2 l: Q3 _5 _- y$ S: V
initial_prompt = "Hello, welcome to my lecture.")
, |- v1 `, Q" E2 Y
保证能尽可能准确的断句 punctuation,但是不是决定性的。
) A. @7 _% W5 A/ o0 v8 j
其他参数可参考源文件:
- E0 Q- S: v4 @+ U
https://github.com/guillaumekln/ ... isper/transcribe.py
) Q* S1 N8 L* _3 n& {4 a0 }8 ]* i
152 def transcribe(
( u) l* l, w1 N- J
从源文件你可以看到是支持中文的句号断句的。
/ h) n N7 O" N
+ b( F; G; c+ H0 D% T; A0 u8 d% _+ Z
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- h# n. n$ ~8 p2 |/ r1 q
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
/ R* h, j! h% n2 z2 F5 A7 L0 D
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
, D& e% G2 @ {% V% C
- V% P1 x9 c, f1 U( g2 w2 n
1 B$ Y$ W6 G! N1 d: n/ `" s4 h
' i S5 ^5 r3 l7 h# Z' r7 `3 w
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2