|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 + ]1 l* Q" T# }! @, I: M
' X$ K- ~3 v" v! J
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。+ a6 @1 b1 [' ?2 @. N9 ]
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
0 _$ V, O9 H- I" i* n----------------------------------------
* ?* O) g) w# @* K# h) L显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。- |. @ h3 G( P0 q: a. m
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! }6 d* d/ o9 E1 c% x----------------------------------------
$ Y$ Y/ r2 l9 ]9 M* n( Q8 thttps://github.com/guillaumekln/faster-whisper
9 J! O5 N0 O R7 p1 ]0 R. e1 T u安装如下:2 q& O( C# k% `# w# U6 G
1, Windows 10
4 v w k+ Z7 j) |0 B2, Python 3.10.111 L6 A/ F$ n! n, J, U F# r
3, CUDA 12.1
' h) Q( V$ i# g: ~+ ^* H% M4, 在python 3 中安装+ p7 g6 o1 P. t4 ]0 a0 Y
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117- w7 s7 \* H+ z% b
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 }, W# @8 s) \: {; p! ?0 e5,pip install -U openai-whisper \- L4 C6 D. C. o5 S H
这是向whisper 致敬,可以不装
* w8 @4 q* G7 `% {, c6 D, ~6,pip install faster-whisper$ t1 A1 F$ u% n( |' M
----------------------------------------
R: G5 j; s6 Z: `. _! c+ t" owhisper 我用的命令行,faster-whisper 我用的是python。0 ]% k1 C; [1 m7 l l$ n8 _
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 ^1 g+ D# h" N- g
2 A2 P1 \6 C; i8 m7 C----------------------------------------
|* p: I1 P4 Q" a% m
" [9 g3 X0 g! F: ^. f& q3 h% \$ xfrom faster_whisper import WhisperModel
" Q$ e; `; W& X# m! g7 q" O6 E, E4 i
% }+ I3 c6 A/ f% k$ c3 ymodel_size = "small"' e! m) E% m" v+ t
( T' F% S. S1 }: Y4 O! |+ imodel = WhisperModel(model_size, device="cuda", compute_type="int8")- K- B" }3 g/ m' k0 Y/ B
6 x6 G: ~ S msegments, info = model.transcribe(
4 r, C' ^: y: {) ?6 L2 X sourceFileName, ) N a8 J' L8 O6 p
beam_size=5,
7 {3 }0 u* X, v+ w language="en", [9 r* R! b; |( H* Q& j
task="transcribe",
: M2 a2 _' F' T/ C, k# _ word_timestamps=True, , l1 V+ H0 Z# w+ `4 Y; k. R
initial_prompt = "Hello, welcome to my lecture.")
z! W( |* e Y+ B4 s3 |/ k
4 ~7 D# c+ x3 {2 H$ @. c/ e0 Hfor segment in segments:+ b# `5 X' ^3 h3 `5 D. v
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))/ f; K. _* P. W0 E2 {% Q
! p. e. s0 t" B- I4 f& L
for word in segment.words:
8 Y$ v, N; q; v( l% B2 j* e ' h; ]- t7 |& z& o4 o c a
----------------------------------------# J4 T) \) S7 |: y
8 O8 b) d* y9 K" A: F代码说明:
) c9 t! c4 A% k( i4 S8 i( A/ F- w1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
O: q H: C5 D$ @2 b7 i+ r但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
0 w6 A T$ k1 s7 Q6 ]( k, {( j2,segment 本身是很粗糙的,做字幕勉强能用。
) e' }; M* x! A- @3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。0 d9 f# K2 S9 N+ x
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中# C) q: i$ Q! T
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- H% i: f- Z% I3 a* D+ c0 B, j W$ M5,model.transcribe 中参数说明:
( g2 n u- ~9 n8 [/ F+ u4 ^你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
* b1 ~9 b3 d6 @其中8 N$ @1 ^, M7 o& ]" {5 ]- j
word_timestamps=True,
+ D$ [3 x Y6 z, k# O9 c, \/ ^, O保证了你能拿到 word,否则是拿不到的
' @4 X' J6 r) t2 e+ S; y initial_prompt = "Hello, welcome to my lecture.")% S d; M5 a$ K3 v, t* c2 w
保证能尽可能准确的断句 punctuation,但是不是决定性的。 D4 L5 M( F, t0 h$ P* s! Z" ^/ ?1 G8 h
其他参数可参考源文件:
8 q m% w4 e; w, V' n" H; k1 mhttps://github.com/guillaumekln/ ... isper/transcribe.py
4 u( L5 ^$ Q! `: M152 def transcribe($ o) e: H! L0 g# E; E% h
从源文件你可以看到是支持中文的句号断句的。* E- L( P* p! Z1 i% O
& J1 i6 h& w$ J# p' ]% o6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
( {0 S2 d5 s+ z$ T% B, `4 u) u7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
- a% h; ~( k4 ~: G8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 H$ a. U$ m* l& U$ b
5 w, N j3 m6 X+ l- y) r
2 M s, Z4 H. {9 ]6 R& W) o. r/ {# m0 `2 i0 s% Z) X$ S! y
|
评分
-
查看全部评分
|