爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 D! j, ]8 @( S5 k% u4 G
4 T+ E0 U+ [+ y5 ~* G" i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, y+ n9 a3 s7 M
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; ?/ A9 ]2 l2 a* {3 O' O8 ]7 W: j
----------------------------------------
/ V0 d3 d* p! A$ S3 q) ]
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
) U/ g8 r6 P) a* A0 M
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# C) {; R/ u/ a7 w; O$ x
----------------------------------------
: E+ W5 a: d9 ^, t0 j
https://github.com/guillaumekln/faster-whisper
3 q7 l2 G7 @8 y6 P
安装如下:
7 \1 X4 y! {! b" \
1, Windows 10
% | G1 K" j, e; ?: p
2, Python 3.10.11
0 E8 c/ v. _5 i3 Y% H
3, CUDA 12.1
( R G" F. |& l1 K
4, 在python 3 中安装
5 }8 X7 k8 m' S: C! m
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
* J# U+ \1 a" b3 K8 g) m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 b( r9 m+ T4 y U* e8 f* W
5,pip install -U openai-whisper
& r- w: @7 O+ [" }$ S
这是向whisper 致敬,可以不装
" Y1 x/ h' S: E
6,pip install faster-whisper
6 j, {: u& I( P' b
----------------------------------------
( G) g2 Q q' w5 d" |$ y. ]
whisper 我用的命令行,faster-whisper 我用的是python。
# i; C5 h' ]6 I: u2 P6 r* I: K
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% |+ G1 f/ `6 R$ y! G( S# v
; V* a% S8 ~& q
----------------------------------------
7 y. \8 H `5 E( R! }
% f* y* ] v0 t0 Q9 o/ H
from faster_whisper import WhisperModel
; S- O1 p+ [3 b5 F
5 n! E/ A$ K. p1 s$ q
model_size = "small"
k. t9 V, o& a! F. E
% X4 N' D6 V& |. i8 j
model = WhisperModel(model_size, device="cuda", compute_type="int8")
: ?) p$ F! |; W% |3 P
9 B: F0 v' c+ G. [1 m$ `
segments, info = model.transcribe(
. ~5 P" W8 e. ~! t
sourceFileName,
6 _6 n3 O" {# z5 I7 F
beam_size=5,
0 d% f; n/ t. o" d `3 F
language="en",
, G/ ~- W0 T( g* T+ W4 H! b1 k, d
task="transcribe",
& x" [ ?/ b* F2 { w
word_timestamps=True,
* X) t7 l: S) q5 p. u, k
initial_prompt = "Hello, welcome to my lecture.")
' a& x5 J N8 L
3 u, w# \7 s% y/ j, V( j$ J! j% j4 o
for segment in segments:
1 P; E' m5 h9 e# p ~& Y% [
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- h- y9 V1 b! s' Q1 N5 T; k
: i' T3 w0 n& A4 k+ p, n: v( C
for word in segment.words:
( G' R& t- V J6 G
$ ^5 r2 W: J6 I' `
----------------------------------------
4 k7 b) n( \" x8 x
f) K7 k: H) T' C& e8 t( m! }; y. s; N
代码说明:
/ Q2 y# N6 `5 v
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ ^5 j8 B, p6 N. U
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
8 j2 h% Y0 f A9 n# y2 A \) a
2,segment 本身是很粗糙的,做字幕勉强能用。
$ ]4 G/ S5 E4 w `# ~3 O
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 l6 e/ ?# T2 l# l+ V- M" J
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
7 j3 z) u& ~) |0 K, A, b2 m
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
* B- R$ \# w2 e) T
5,model.transcribe 中参数说明:
, t, I/ M0 q7 @5 [/ u
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 w8 K- i w1 o% F, N/ ^0 R/ E
其中
* W0 |' l6 r# [
word_timestamps=True,
( G) r9 u3 d: G1 v
保证了你能拿到 word,否则是拿不到的
8 Y# G, w7 M- G0 R8 _
initial_prompt = "Hello, welcome to my lecture.")
7 m2 r4 ]1 q9 @3 ]# r
保证能尽可能准确的断句 punctuation,但是不是决定性的。
) r! z1 z! K+ G t! N* d$ A+ a
其他参数可参考源文件:
z! q; r* j, i/ y3 X- C; A% Z
https://github.com/guillaumekln/ ... isper/transcribe.py
0 R) Z7 c# U. ?+ g
152 def transcribe(
7 U4 @( I! y. \1 t8 F, f
从源文件你可以看到是支持中文的句号断句的。
( @8 l4 w0 W# `
1 w' ^ G* K5 O! U' A! _( M
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
/ S% n9 U/ N6 ^. H$ C
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& n$ C# q7 {1 w6 U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
4 d3 f) O. z8 c4 ?" s$ \
" n$ D; y" n/ u% r6 J7 ^8 C8 A
i5 s0 F" D. i
5 `( P1 S1 x; Y, S
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2