|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 / w; x, A/ o, y5 u+ ^0 a' p
" H! m; t ^7 j2 P" X! S1 |
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ ~& b- t2 y6 H) }8 K效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; W' f P3 g% R5 [1 B----------------------------------------
3 u) i4 |6 X# x! A显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。3 h7 E5 v# l6 G1 m- D: d3 z
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" N* c+ E& W9 X8 ]- g----------------------------------------" r$ t0 D: Q2 X4 ~% O
https://github.com/guillaumekln/faster-whisper1 [( ?- R% I6 g, \: R7 \
安装如下:
; R. |) q5 g! G2 b/ Y* A1, Windows 107 E0 C* Y4 e+ `: @0 c2 l: E; k6 m
2, Python 3.10.110 E. p, c4 I& R/ a) ?1 W! D
3, CUDA 12.1
) \' |2 C# I/ T* j5 i T4, 在python 3 中安装
! J) X4 F, q: @2 v j% w# epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 q. }9 ~7 c) R0 h* [$ s
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。- P- d6 w1 S) G4 s( z3 S
5,pip install -U openai-whisper
8 _- q* `% F- j$ I4 o& v这是向whisper 致敬,可以不装5 ]' }. U4 L$ r- F$ H
6,pip install faster-whisper/ S3 G; g; i5 p' T: C4 R
----------------------------------------5 S) u% X) }$ c; Z3 g h# m
whisper 我用的命令行,faster-whisper 我用的是python。) a( _6 n; m2 e1 ^
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 B& w7 H# _0 l* V. g0 R- ?
& r1 r& I4 ~2 j
----------------------------------------
' [7 x6 t/ d' V$ [- c7 H( }, ]+ c% b9 ?* f
from faster_whisper import WhisperModel1 l' b4 n7 h# H4 I; O
0 B9 O3 I5 e2 [5 N V
model_size = "small"
% c2 }( \4 d4 e* N6 J- z% {7 k3 C5 ~. B0 o
model = WhisperModel(model_size, device="cuda", compute_type="int8")
& L5 _# w! e4 q. l( @, N! }9 z. m( I0 P
segments, info = model.transcribe(2 P4 O: M& I* J* \/ `" c+ `! Z
sourceFileName,
8 _4 ?; y* I0 ~* w5 s3 I3 q beam_size=5,
" O. C- n4 ^' b% m; k language="en", 6 ` e1 R/ L+ U, I, F
task="transcribe",
- @1 z8 |4 X; n. u word_timestamps=True, ' `# X# A* y' r9 t9 v
initial_prompt = "Hello, welcome to my lecture.")" e! k6 s$ g$ E
F* Z' t; h% h! V
for segment in segments:5 b1 L$ C$ I# I" \7 q- j
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" G, h0 ?* `! d' t7 g3 o- r
/ E9 v1 b5 g( p. ?2 K- ^# u, B for word in segment.words:7 R: t& R) {; L" ?, ]9 v. v8 K
& W/ y3 @7 [. m. ^! E4 q3 I. D----------------------------------------
" Q" m: \; J! {' t7 i/ F! T2 d
- S: `, N1 Z7 o$ l" t代码说明:& K# [2 J s9 m
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。, W y- Y1 _5 z1 K
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 H4 Z; x U1 T% a4 X
2,segment 本身是很粗糙的,做字幕勉强能用。$ i! c5 u7 R. n# ~( ^1 I; v
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。" {" v4 m: R7 F3 u& `* |; j
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; L5 R: r, x, M. l# g: l比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。; j. w- n6 C B ]# b
5,model.transcribe 中参数说明: i7 z' c* t3 j+ a$ O* [
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 ]! G9 z( r- H8 w9 M4 {
其中
' ~4 G& H0 s. g9 p$ S1 H: h+ u+ } word_timestamps=True,
# e( d. m1 V9 Z8 I- o# W9 v保证了你能拿到 word,否则是拿不到的
3 F9 h; H$ y2 ^7 n! S7 F3 ^ initial_prompt = "Hello, welcome to my lecture.")
/ |% F% p1 M, \' g6 ] n( L4 o# X+ B保证能尽可能准确的断句 punctuation,但是不是决定性的。
& k9 q" H9 q4 w+ C5 m6 f4 @8 }其他参数可参考源文件:
$ b5 z+ D$ F9 Nhttps://github.com/guillaumekln/ ... isper/transcribe.py5 ?0 ^+ { o' c8 r2 N' ^
152 def transcribe(+ e/ Y% A4 Q, ]( B
从源文件你可以看到是支持中文的句号断句的。7 |# G$ o# Z/ l1 K4 I" f
; U* H" e7 m% N2 T3 g9 o
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
4 N1 q% d" R8 s% I+ C7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
$ d6 v- Q7 o- u- e& H( f, ^& u8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
) D; L @* V# y5 w2 J. P7 d- q# g( x7 i6 r
5 u Q$ c# R4 V) h0 J6 s! d" y
& w" R7 w, e4 `0 i2 X' ?( k% k: G
|
评分
-
查看全部评分
|