爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
3 t" i8 f! W! y6 d5 \" @
' w0 @( P5 B, L3 z( a8 k
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) T. x* y3 l+ y4 D' K: K
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
3 ]2 ^' h0 R$ W
----------------------------------------
3 q3 V9 k$ R0 n3 T; u3 c. s
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
. [9 a# [. ~ T# o
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& p% [7 _8 m, U0 h/ a3 g' g) p
----------------------------------------
: K$ G" q& ]# C( {
https://github.com/guillaumekln/faster-whisper
9 ?! E# Z1 L' C' X: q
安装如下:
& a% } T w7 c( [
1, Windows 10
3 m; k$ m) w1 j* k8 C
2, Python 3.10.11
4 {5 x# |" Q& F H! P# F
3, CUDA 12.1
: [! _) B0 {$ | F9 z
4, 在python 3 中安装
$ B( W p' H1 A3 Z5 X
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
# ^8 D6 m/ R7 J( {$ a
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
* K5 _5 E! j* B0 [2 P1 M) i
5,pip install -U openai-whisper
( f4 l2 V W* c* b6 {
这是向whisper 致敬,可以不装
- C: u: k- ~3 Z& S, H
6,pip install faster-whisper
3 m! N5 s& l3 ~& v
----------------------------------------
8 b6 L+ a$ n! E& S% Z; W
whisper 我用的命令行,faster-whisper 我用的是python。
+ P2 d K4 c P% R( w3 T, a
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
. |7 \" L, R4 T: H J8 \9 M; Z
+ C$ {9 T, a6 B6 ~
----------------------------------------
5 t! e# O. f8 T% }0 ~& P& J7 Z
" M8 n' n' ]' b8 n6 G
from faster_whisper import WhisperModel
1 y$ _% Y1 S8 p, e2 ?
! i% l: e" A9 p
model_size = "small"
6 `$ r3 T( U9 U# P
' y- C6 _0 r0 t
model = WhisperModel(model_size, device="cuda", compute_type="int8")
. s. A) d5 \, |/ _) K
8 N$ [% p: I4 g2 h& b
segments, info = model.transcribe(
: A, R* ?( r1 c X
sourceFileName,
, S8 _9 q. U, u* N2 A/ D& y
beam_size=5,
! r1 O8 @& C, `8 h+ c* l3 I8 x
language="en",
/ n C0 A9 B: F- N, N# |
task="transcribe",
& A0 @+ N8 X7 A6 s- M }+ o0 B
word_timestamps=True,
3 e0 L) D" g& e
initial_prompt = "Hello, welcome to my lecture.")
+ F7 ?6 [8 c3 l: V, A- I
- s' \, t: J; E. L& U; x
for segment in segments:
1 x( O- M% c! z* v: k8 V
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
d' o* u E% _) [( n: F( G) D
( Q' V* G* F5 W$ @: S6 ^! \
for word in segment.words:
) R, p. m7 Z" b+ F- f
4 E1 O2 ?0 ~$ s! B5 |8 @' H& W
----------------------------------------
( O0 t+ q% S8 }
) y4 ]) }% d( i' g" @9 |2 B
代码说明:
% L1 c$ a8 _" j, m
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; t( y* v1 Q% D! R% S
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" `6 |2 s3 |" ~& d
2,segment 本身是很粗糙的,做字幕勉强能用。
. ~) `4 d" J# v7 d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
" Z/ E+ S7 T% J! j" C. W; L
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, ~% J3 s3 [. R3 T8 o# A
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
3 \6 X2 y/ ~$ E2 |7 Q# `
5,model.transcribe 中参数说明:
6 s) b& w; ^2 u' _* B9 b' M
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
: g% r- ]+ Z$ Z( a. U& m# n
其中
" `; B8 T% m m7 K5 Q' a
word_timestamps=True,
# R3 x7 A2 v1 d- [* M3 n
保证了你能拿到 word,否则是拿不到的
2 _3 D# S% e/ s( B4 o' h; {
initial_prompt = "Hello, welcome to my lecture.")
, U" Y, M6 E% I. W3 p. ~
保证能尽可能准确的断句 punctuation,但是不是决定性的。
. F; q7 X9 F6 [
其他参数可参考源文件:
! [( Z. b8 T5 B2 [3 J6 O
https://github.com/guillaumekln/ ... isper/transcribe.py
; _2 Q; {' a/ E% v# d
152 def transcribe(
8 D( C) Z( g9 F
从源文件你可以看到是支持中文的句号断句的。
+ f4 S6 G9 p& S# S( s2 f6 c
. F6 v5 o' ]5 J. n( i
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* d1 U) q8 U, X+ n v
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% y* ?2 e/ ]' |
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 N0 O4 f; ^' X5 v
+ y0 [9 j' [9 P9 i0 O& ]
2 h9 w* y+ v: Y% @
4 M0 B6 P a" a2 K
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2