爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
?( c( N* D# ~! f: A) M
0 ~( K: A l# j% K, o/ o8 i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 v( v, E8 A* ]8 J% R! V# ~
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ l. e `! R' U$ U8 d9 u
----------------------------------------
4 P* ] h k. {* B
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
% V, m5 q e% f8 a
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% S g1 c* `- {2 z# c5 u& a
----------------------------------------
% r J4 B t( ~3 W
https://github.com/guillaumekln/faster-whisper
$ O" b( S/ i8 ?# I3 n
安装如下:
! v) u' d3 j* j) C+ p
1, Windows 10
3 l# B. H7 Y5 d9 _2 T- |8 q" y) W+ u( @8 A
2, Python 3.10.11
2 f7 u$ J- z. Z4 E
3, CUDA 12.1
: q4 D2 f, h5 R' N9 s8 A
4, 在python 3 中安装
7 l4 J6 }/ F+ u) w! W4 E# [
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
3 V8 A. ~1 ~9 [7 M& l+ G
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
+ M$ [: h7 U! s w
5,pip install -U openai-whisper
1 k8 Z( R: p5 ]- o! [% L1 g
这是向whisper 致敬,可以不装
/ R; I0 c8 e( Z2 I% Z
6,pip install faster-whisper
& F5 B1 k5 d9 P. s5 t5 L, N
----------------------------------------
* M \! G+ T. y
whisper 我用的命令行,faster-whisper 我用的是python。
' r7 f2 Q: Z1 R: |0 U' |
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
3 N2 w# d! v0 _2 |2 b
U4 I: {# b' D" |( q* g
----------------------------------------
& _' V2 z8 h3 s2 M; {1 E+ k
7 {0 V; P7 u" ]( Z
from faster_whisper import WhisperModel
8 k7 v1 W& Q: E0 x6 ^
, I, m n3 f5 M+ ^
model_size = "small"
( [: m u6 p% o6 O) Z. g
3 E- S3 ]& e+ {8 A
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* W; u% [7 z. v
$ Z6 c* i+ F& Q% `/ v) _9 G
segments, info = model.transcribe(
+ w7 O |* o3 S2 r# c
sourceFileName,
2 V9 k5 A7 o* h5 z8 c
beam_size=5,
, Q+ N4 C5 i& V, Q& H
language="en",
+ G& L: W7 H j* M p
task="transcribe",
/ d# i! M i# w Z5 o9 `
word_timestamps=True,
& A9 R3 Q- n# _, E9 g$ S; l
initial_prompt = "Hello, welcome to my lecture.")
* G6 ?$ t$ b& [; j: D$ R) |
$ v9 [( N5 V" s" R* w/ O
for segment in segments:
: g3 c) Z" A8 X- D7 v r, n/ N' {4 H
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' T' \% S! i% o9 ]
/ p5 l8 T7 _; ]' B' w
for word in segment.words:
: E- V b: c+ M& x2 U
7 Z3 p9 n1 D* _$ ?+ ]
----------------------------------------
" @- S% w V2 B% p v
: z3 T/ ]$ I4 Z
代码说明:
0 Q5 O- m. G1 H5 v7 f8 t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
1 a5 o' ^- L* A
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
9 X: p# p& S- x
2,segment 本身是很粗糙的,做字幕勉强能用。
0 h$ Y5 {: o0 n+ X. m
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; K8 M9 d9 ^1 U# Q5 P
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
7 ]3 [( j! C- D9 m( g1 n% D! p+ o
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( o8 g$ v/ ~9 t! t% F8 ]
5,model.transcribe 中参数说明:
4 e! R, g; B& B4 @! W% ^7 G
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; h' R; ?- t0 q& C$ ?
其中
4 s9 |5 D0 u$ U7 d3 t/ Q; X" {4 ]
word_timestamps=True,
4 |1 L! E4 t0 M
保证了你能拿到 word,否则是拿不到的
8 y0 o4 e) m' u% a3 o
initial_prompt = "Hello, welcome to my lecture.")
8 x+ f" [3 N/ @0 D. C& ^
保证能尽可能准确的断句 punctuation,但是不是决定性的。
" V- v' f* r4 u3 M, c! c
其他参数可参考源文件:
# _1 P# r: h- b( p8 L. M8 m
https://github.com/guillaumekln/ ... isper/transcribe.py
/ L* h& g( N2 b' l. |
152 def transcribe(
' _2 Q# i; }/ x7 {; a, h: y2 p
从源文件你可以看到是支持中文的句号断句的。
2 d" c, ]7 q* q9 ?& G
: Q8 j w4 k$ `2 H, k
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
p* P. Y0 P# v5 `0 i5 i
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
$ B* R# E* U2 q0 Y. B f) ?
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: a, N% k' `* h
8 r2 Z* i9 W& y2 w2 c6 i
, i) y2 u& G; R0 X) r$ ~
( e- m+ e0 b4 H, L: V+ e
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2