爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* F( s0 n" \2 K6 {
6 g+ H0 h, A* N2 C4 I2 x7 ^) f
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* h8 z" Q4 V4 D4 b: Z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
1 ?/ Q" I$ {6 ?2 @6 W: k* {! G0 ~' h
----------------------------------------
# L; v/ O" W* @. \& J
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% L: G5 o+ l5 N# I/ D- h
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! q. p+ r# F, c# ~
----------------------------------------
: |; N( `; {/ X7 O" v# g" T0 W3 Q
https://github.com/guillaumekln/faster-whisper
: J( X; ` H' V9 u: Y5 T, H/ n8 S
安装如下:
( Y7 r- E" i7 l; v
1, Windows 10
i, v7 {2 _9 @: T/ t3 ^
2, Python 3.10.11
+ E' @0 M2 L' Z) x @" m/ F- {- ~- r% D
3, CUDA 12.1
! {" @4 f0 v6 J3 k- ~2 j
4, 在python 3 中安装
0 r! q; I- a4 `" _2 I' K* F
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
2 j) N3 o1 e( l) F
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
* n6 \& B! P8 }( N& @6 I
5,pip install -U openai-whisper
- G. w: R7 S6 @* \6 F/ N
这是向whisper 致敬,可以不装
' Z; O! J' e5 V8 A9 p* a
6,pip install faster-whisper
* L( z0 O+ l/ H( M
----------------------------------------
3 ]( P+ f& V- m
whisper 我用的命令行,faster-whisper 我用的是python。
/ O+ {+ f; Q9 r( z' Y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% A$ I s* N* K( T& g+ u
3 {) ^+ W5 n" @( \5 I% I9 l
----------------------------------------
4 X: q2 C. D' x" g9 _/ Q
% z, ?$ s; x# q' X/ m
from faster_whisper import WhisperModel
: ~, k1 y/ I: h. [
; L, `* ]9 b( Z6 |! |
model_size = "small"
8 V0 ^6 Q- F, C# V
" k D3 f) Q1 u( i7 t3 Z
model = WhisperModel(model_size, device="cuda", compute_type="int8")
( d6 t! E" h+ L
$ i0 J3 P! c9 q8 j* L' s0 y
segments, info = model.transcribe(
" Y' e- y( }% Z; j
sourceFileName,
$ Y# I8 r! Z \3 }# Q: s
beam_size=5,
+ |+ T+ O! p% O% D& Q+ r$ t7 F
language="en",
' e) A) ~ c' B( T, S& ~
task="transcribe",
3 K6 h0 m' n5 f, M8 C' H2 Q* K
word_timestamps=True,
7 f+ Y5 ^' K1 x: Q' x
initial_prompt = "Hello, welcome to my lecture.")
" j; r: m! s7 R/ c* _) b& \
# y, X6 _# R8 t7 F8 F
for segment in segments:
6 u. {2 E; y: K; V/ h& J
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% `9 G6 U4 E7 h' U
4 \/ u- t$ `0 C* o8 P
for word in segment.words:
& q1 D% w( l" L. w2 H
& B+ h( a g0 H5 [
----------------------------------------
$ ^8 ?6 _# e9 y2 {# [. {
0 I6 Y: v1 W7 |# ]! h
代码说明:
& V/ F' d4 j0 L3 t# i
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
5 Q: R5 P% m5 g7 P! }2 w I
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" Q. ~# n/ \/ ]- S- V( }
2,segment 本身是很粗糙的,做字幕勉强能用。
5 l" N) B8 d: R! o0 v
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
. v) e2 J& k! \3 ?, |& z% D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
v. F8 X. v$ F
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 y% T9 h0 i) B1 V) S: Z7 n5 \0 c$ M
5,model.transcribe 中参数说明:
1 @. @3 V& e9 C' E/ _) C
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
# {1 V/ L% i0 m; k$ ?8 S
其中
3 p" W# p/ N) c4 b& V+ a* U- f% Q
word_timestamps=True,
' Z7 h. @# z* f; ?
保证了你能拿到 word,否则是拿不到的
; Z0 t8 `$ }3 ^$ n1 ^) C, T
initial_prompt = "Hello, welcome to my lecture.")
1 B$ C: H, J8 V9 R
保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 o6 g3 `% O" V+ W# G1 K5 z
其他参数可参考源文件:
2 o$ }: v0 Q: r9 P
https://github.com/guillaumekln/ ... isper/transcribe.py
- k: B0 Q; ]2 C) @
152 def transcribe(
( K, M3 ^* d; g" @
从源文件你可以看到是支持中文的句号断句的。
/ w3 I' l! k) c) c
2 k6 K' A/ b0 q# |
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
9 [8 O8 h" |9 y2 f. w# C
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
" V8 X: Z4 B) n" Z" C# e
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
( ]; p) v4 g; P+ }. L( |
6 u$ B3 z' \8 q9 b& b# t0 E
+ R' W0 z x$ I" K; ]2 J6 ]; b! m" s
4 K7 V- U+ \$ J' l0 y& s& S$ |
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2