爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
" c8 ^$ ]6 K' \' Y
. }5 v# D# \9 B# i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 ~, O. N! K& t1 Q
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( ~ g' R+ Q; s, [
----------------------------------------
* |5 g8 m! n+ m* k' B! P6 _5 ]4 c3 C
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
$ v. R5 [$ d J. _7 B
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 [# k o) `) H' O$ i
----------------------------------------
5 r+ `: ]* z# v5 C) U1 x+ n' o
https://github.com/guillaumekln/faster-whisper
! ]0 A. z" W6 k- h
安装如下:
! s- \7 O V9 t/ }: t
1, Windows 10
0 \" S' `& }) m4 y1 w) a5 M5 T
2, Python 3.10.11
1 t% B7 b$ y& t/ }4 i0 L
3, CUDA 12.1
+ w# m* a2 M% V
4, 在python 3 中安装
* e5 f' J q) p; x( h
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
0 g9 _! r7 d L8 ]; H
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
; @3 X( z: j0 G/ A4 z; d
5,pip install -U openai-whisper
}6 T b9 E% W) k- i
这是向whisper 致敬,可以不装
0 i4 d! ^$ Z- q" U: y
6,pip install faster-whisper
, f, E8 d2 y6 n9 G: Q) s
----------------------------------------
) Q$ x6 w) g0 x! e4 j1 u
whisper 我用的命令行,faster-whisper 我用的是python。
- g: v: U$ Z5 P& k F0 Q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% J/ I0 Z& `, I9 Q% H2 c; m L9 M
; d& L. `4 v* m
----------------------------------------
, N6 O5 e+ ]% \9 D( j! u8 g
( y* P6 a" A' K' r: @9 x( K* ?! o
from faster_whisper import WhisperModel
& w; I4 C& _( m% a% r
4 F" L" T# x8 {
model_size = "small"
! N- W* x4 g4 [% _
( @& i9 u7 o# W0 w8 q# J
model = WhisperModel(model_size, device="cuda", compute_type="int8")
5 |+ M+ L9 Q7 v; t
+ W3 d+ H' C6 n' U0 U; f
segments, info = model.transcribe(
% G1 Y8 T9 _# B2 @* `% [+ Y
sourceFileName,
, i$ P8 C) o. D! T* Q1 u1 ~
beam_size=5,
' \6 |' R+ Q. x9 r. U
language="en",
/ b2 I+ A6 j# b% \/ n d
task="transcribe",
) m" ^/ ?) a3 L& C1 L, n
word_timestamps=True,
# m; A: p# W7 ?# ?" |* i
initial_prompt = "Hello, welcome to my lecture.")
9 R2 Q `( U7 L# E' H
1 b" f2 i8 e% a! w( i0 \
for segment in segments:
9 T3 D" ^; u, Z0 X
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 b# q L: c+ M1 ?
; @) \: o* p" D9 x
for word in segment.words:
7 o; o5 M2 P( L, B
7 e; h6 J$ i( |" [' G1 p: R
----------------------------------------
/ h P+ @( e0 s" G9 [# y
/ K- D8 c6 w5 j0 ?% v
代码说明:
" l6 V, K! I' j* j; @0 L
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ }, [) G+ W6 G) }2 _6 U
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
z, `0 g5 W4 t: ?
2,segment 本身是很粗糙的,做字幕勉强能用。
* p% S: v, }- b( g
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
$ M8 Y2 s4 Z# m, C; v1 a) b
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
* s6 ^2 u& U# c2 r9 X& ]
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# r9 v! |* F4 k% a. k% E2 S0 _
5,model.transcribe 中参数说明:
& T6 u! W1 j; K; c# x$ |2 b+ D$ R$ L
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
. J$ a/ W) O& L$ P' R/ ?" o
其中
6 O2 }+ f: M; \+ Q8 `) c+ |
word_timestamps=True,
8 d3 J1 F5 V: ^. O* M/ b( l' T6 \
保证了你能拿到 word,否则是拿不到的
6 j; {- m; g8 j5 F6 ^. v
initial_prompt = "Hello, welcome to my lecture.")
. e; m7 ?- {6 o- u- u/ h5 I' k8 K! B2 O
保证能尽可能准确的断句 punctuation,但是不是决定性的。
, C/ B* k" l" f
其他参数可参考源文件:
: N9 Q) \3 W$ ? Q" s4 l. b' ]
https://github.com/guillaumekln/ ... isper/transcribe.py
$ q. i+ C8 V6 ? A% N! b
152 def transcribe(
4 x; V9 O h$ t* Z! {
从源文件你可以看到是支持中文的句号断句的。
# q4 N) D5 [0 H9 ]5 U
, d' S4 H5 l1 Z& B5 j0 Z7 c/ G% I
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
6 U5 E8 m5 Y8 ]
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
4 L# Q3 x! E. ^3 k, m
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
5 Q+ p/ K; e& T9 L0 W5 L+ r4 c
5 y1 O6 U1 `' Z/ Q- V ^3 T7 `4 C
* j7 b! z) t* g' P
9 V) v+ J q V
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://aswetalk.net/bbs/)
Powered by Discuz! X3.2