爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 y7 s i) ^3 O+ i' g
) T! [0 V2 {4 n2 l1 ?& D
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, |! {" f* a( i) V" C5 F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
. E' D3 b0 A; |) W1 o
----------------------------------------
/ d( f$ Q0 X" a. Y: ?
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
j. a& F/ m8 Z m8 e
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
' s6 q6 \, U/ D
----------------------------------------
9 t! f+ G- |- w. i& G' `5 J
https://github.com/guillaumekln/faster-whisper
6 n% }2 F" W8 ^+ V
安装如下:
1 T2 M" |6 I' B
1, Windows 10
, w; y8 @: K( b7 Z
2, Python 3.10.11
6 v+ m' p0 v l5 n3 g7 H4 y6 a
3, CUDA 12.1
9 m( ^$ G! _7 a, V& `
4, 在python 3 中安装
* U1 H! l; @- R( |9 C9 C( I7 O
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
' j) o u! Q: C& w1 J; f- I
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 a( S8 x' S! F: g2 f7 ]8 h
5,pip install -U openai-whisper
3 F) c, l9 O# O
这是向whisper 致敬,可以不装
0 @+ Z! r0 W! }/ u8 B
6,pip install faster-whisper
1 p7 i) l, i( F; F% H D
----------------------------------------
9 j8 H2 ?5 S$ B4 _1 x( G5 P- h& H3 {
whisper 我用的命令行,faster-whisper 我用的是python。
6 {4 V% S; ?0 s
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' b: x. E* ^# W7 y. w
. y( A/ u0 P; R
----------------------------------------
+ @. L$ K0 o e6 g$ j2 \0 B
$ I( Q1 W( I: G \) p6 z6 S5 U
from faster_whisper import WhisperModel
* O, m7 i' N4 J* K* c0 u
, Z8 ^0 L7 `0 R- Y: \+ i
model_size = "small"
$ N, _. ~6 d" n6 x' E
* P, o. {/ \; s/ I. v# r
model = WhisperModel(model_size, device="cuda", compute_type="int8")
* `3 \6 L$ T, l
& j J; n* Q5 ~0 {/ {
segments, info = model.transcribe(
d* i" e. i; {( T
sourceFileName,
' [- t. O! j! P$ D. t3 E8 S
beam_size=5,
7 J2 n& _8 M$ e3 a8 t! V
language="en",
1 L: q. h. A) `5 m8 a, w; t Q
task="transcribe",
* O# w$ Y8 ^8 V% M- p4 H
word_timestamps=True,
6 G9 d! n& r3 s) m4 l! r; U
initial_prompt = "Hello, welcome to my lecture.")
) L3 m7 S7 z, L9 P* [) o
& g, A) i k6 L- P3 M$ q
for segment in segments:
* V* F- U8 X D6 c0 x3 X
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% d: U/ @9 r* f6 Z6 w+ S+ \
/ Y& _7 n# p( L" ~5 L
for word in segment.words:
) j& H1 ?5 p" F/ e/ g
7 {) f4 L+ g$ u8 t6 S0 G, Y6 I' v
----------------------------------------
- Q! E" Z0 J& o$ O
( {+ J) i2 ^$ y- Q5 U3 I7 {
代码说明:
) j$ K `+ L* X- m8 O$ j
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
9 p- ?; \5 C# r. I
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
0 P5 P& p6 }1 z F O I
2,segment 本身是很粗糙的,做字幕勉强能用。
' l5 j: x, t8 a# F+ F' J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
) d j$ ?- }0 @# v
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
}/ C9 V5 H) e) O0 v3 |
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- |0 }* ], R- m- g9 z) ~( P3 `" k
5,model.transcribe 中参数说明:
0 r8 _: F2 G1 f- J: M
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 A/ Q6 @; L$ j$ s
其中
+ ~' O4 q4 C5 ]
word_timestamps=True,
* m; h; u0 _3 h7 m0 B+ O+ C% Z# z
保证了你能拿到 word,否则是拿不到的
B3 G: [+ X6 i) l( D
initial_prompt = "Hello, welcome to my lecture.")
, l8 j* i; T. b+ ]1 t# a7 \8 i
保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ D4 ]; ?( u$ @4 A
其他参数可参考源文件:
$ Q4 F7 M- L/ o% R
https://github.com/guillaumekln/ ... isper/transcribe.py
3 n0 A+ H) E* `% U. ?/ \: A
152 def transcribe(
/ e# n6 W8 C7 C
从源文件你可以看到是支持中文的句号断句的。
9 D9 t; l& s4 v p
0 {% N' ? M3 O
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" A D! M: V; t9 Y" \
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
5 I+ O- h/ l; a2 c& ` F
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
: C2 n- s- ~# @8 b) A3 \4 a
& m/ W* q/ P8 y7 w( p: q H
9 H* Z1 c) W6 Z3 Z- c4 k9 E8 r* X! O
: I" B( O6 q- r' o ^
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://www.aswetalk.net/bbs/)
Powered by Discuz! X3.2