爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ h+ h& Z, B* J
; T4 M7 R/ l* Y, Z# Z& `) B4 ?
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- P* h+ D: A- ?7 w5 Y* V7 A2 _
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 J( [1 O# r- c/ _
----------------------------------------
# ~ q( ]6 `$ M# d/ [
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( V* f6 c& | {- O% U) j7 E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
7 S' l+ @+ g6 d' | b2 Q
----------------------------------------
$ K) L7 T" _* Y
https://github.com/guillaumekln/faster-whisper
" ?% U3 \, ]' S- j# w: P) e
安装如下:
( R+ X9 I3 B) ], X
1, Windows 10
, v- B7 C. W! [+ v
2, Python 3.10.11
9 t$ O+ f. ^: D5 V
3, CUDA 12.1
8 U2 q3 W! @+ s
4, 在python 3 中安装
' p" t- U4 a( h
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
) F0 b! i* f# i# G4 @6 a
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) M- q2 n; f" c a0 _' ]
5,pip install -U openai-whisper
6 \) E* @- ^( g! ~9 }
这是向whisper 致敬,可以不装
1 [4 }; l) \/ y9 Y" a
6,pip install faster-whisper
7 x" {8 r t. p
----------------------------------------
( ^# {+ j% n5 q% U+ Y$ _
whisper 我用的命令行,faster-whisper 我用的是python。
g/ g0 U' ~- q {
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
* u# R8 N! s3 x
& O! Q5 m9 k9 i
----------------------------------------
- E' x3 C; o5 j6 d' s7 I* {
7 w* B1 ?- \, Y5 X. o! l+ W
from faster_whisper import WhisperModel
7 L7 w9 [+ [1 N. \! }3 t Q
* i l2 f i2 I
model_size = "small"
' Y1 L; n8 g! l, g& c ]6 t; j
/ l6 H4 Q1 m2 j2 {
model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 c2 N Y" H; j
2 B4 r* {" ]7 m+ M3 w, W+ t" P* J* S+ E
segments, info = model.transcribe(
) }- `4 R" Z4 M F0 n
sourceFileName,
9 h. v0 D+ Z9 _5 Q3 ?( {
beam_size=5,
$ z9 W5 w6 B3 p! v
language="en",
0 r% k) s. C4 t! @$ s6 x$ F
task="transcribe",
& O1 [0 b( g8 {& Q- _; C
word_timestamps=True,
8 T1 S+ w$ I, Q3 \/ R
initial_prompt = "Hello, welcome to my lecture.")
, X) K/ m( r% l1 y N* f5 s
9 J5 T9 D; t$ z5 ~9 Y9 T' t
for segment in segments:
! s% Z8 H/ }* d
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) ]; R; D/ Y4 n) h
; s7 H, {' g, o1 U( K
for word in segment.words:
8 q# D# W0 \' d+ _
/ d8 Z' b0 H+ k; L
----------------------------------------
9 ? N: ~. K# t, ?; V, Z& Z8 r
3 J, W& x) G: q e" k# V G. e% U
代码说明:
% X) a. r# ^) d4 W, p+ R/ y8 Z
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
2 i7 a( R% V/ _8 Q% E* y
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 B" b1 E7 g, d" ^# G9 ]" n/ [
2,segment 本身是很粗糙的,做字幕勉强能用。
9 M$ ]. g0 {/ \9 k+ a6 W2 r
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
9 K5 A( {2 x: s
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
! {" U" B. B2 b
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
9 c. K) d" X3 C3 B2 c8 l5 y9 W
5,model.transcribe 中参数说明:
0 p; f6 i9 l' o M8 D
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
% T2 w. @' H$ @9 ?" B8 K1 J
其中
) C5 |2 j4 U& S2 }- C7 p. x
word_timestamps=True,
: m4 |3 x+ q% o" R
保证了你能拿到 word,否则是拿不到的
. R! m4 H: ?0 g! G
initial_prompt = "Hello, welcome to my lecture.")
) }+ O3 G2 v8 H1 A
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 x2 M! R3 W" A# C$ N
其他参数可参考源文件:
: K% g7 b, j. _9 P
https://github.com/guillaumekln/ ... isper/transcribe.py
7 `: W e3 O+ w( a* p# \$ l3 ~
152 def transcribe(
2 q3 b4 h2 J* O( p: v- J
从源文件你可以看到是支持中文的句号断句的。
% z5 e2 M4 b" } M" {
7 _2 p" `) G" T' y4 ~6 X5 j N4 L
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
4 }+ Q4 A7 R; l" K# d" r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, w2 i! W3 x5 j. `& k, `
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
3 e$ a4 ~. \9 T/ m
, }& t# l% D6 f6 N
r+ T! l# h+ Q. V% z, \
) j& M8 c2 [* S- {0 x: V
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2