|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 0 ^( J5 r$ I2 r: w5 n, @8 n
% w3 L1 o+ G8 P9 a4 S/ O
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。4 e6 r3 ?% ?$ N1 N# e, Q0 n
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) C2 o( v; e- N' {----------------------------------------7 {! _, @2 B6 X& X1 H
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
. \6 c3 d% D' J8 R5 s在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ b! n1 V ~2 M5 I! H# a----------------------------------------0 I# v j" O! B! p$ q
https://github.com/guillaumekln/faster-whisper
3 @: r+ ?! \3 t S4 @8 Z' L安装如下:
) s4 o8 ]) h4 w- g1, Windows 103 ?' W L) k5 X1 R* G0 j% u
2, Python 3.10.11! A5 X2 n& h; M& O3 ^3 f5 ~. @6 h s
3, CUDA 12.1: V0 ~ B7 ?, V W
4, 在python 3 中安装* P4 e# T" [# A( D8 O# L
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117: w0 ^% @* O- \9 Q$ t1 f+ E0 F
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。, g8 X4 O4 {- {4 F$ _
5,pip install -U openai-whisper6 F \& e) k) a! D7 l" S
这是向whisper 致敬,可以不装
- y& {) r/ t& C: N3 `6,pip install faster-whisper9 @& g: b1 u2 _! Z E6 p
----------------------------------------
; i8 e) x9 w( u, B: Awhisper 我用的命令行,faster-whisper 我用的是python。
3 n- N/ j% O% b2 u/ s2 w下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
/ T/ L7 T5 a5 A+ z; A& F7 M4 k
6 g, F) D1 D3 Y4 ?/ z3 M----------------------------------------
' I, E, }7 r# x3 g. c' k5 T
1 E& A) j! z( Y- O1 V5 I/ @( Kfrom faster_whisper import WhisperModel9 |# Z0 L _( n9 [
+ d, d$ e* L9 \0 o
model_size = "small"( E) [0 e4 v& ~& o
* z3 }) ]4 d/ m! n- Omodel = WhisperModel(model_size, device="cuda", compute_type="int8")
) a, x- a* p. L; u6 K" Z, d
! D" E4 i$ J4 N% G; `7 usegments, info = model.transcribe(
+ X% C$ t6 q! P: ?0 m2 `9 T0 }6 X* X sourceFileName, & x0 X. `) v$ `7 `
beam_size=5,
: |* |* M. r; | language="en",
' O! q* A3 J& _8 c" I& h( d task="transcribe", 0 V7 Q6 v2 }7 L; ^- y: U4 d
word_timestamps=True, , P% S# b* v2 h! T6 u7 B; t6 q7 {
initial_prompt = "Hello, welcome to my lecture.")' N: L7 J+ k9 ~/ _9 P4 w
# I! N$ ~7 ]$ o* k' w0 P! q
for segment in segments: |; Y* k9 l+ R: B y) {
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
v1 K6 o1 m. W9 _, x9 N& L4 k1 R$ \; [% o& L
for word in segment.words:
1 r0 u2 N* q8 e9 |" g " q+ h) g) M- E: H2 V
----------------------------------------
8 b/ v! V8 ^4 l. h
0 F# X" [' R" Z6 d代码说明:
: Q: x- A9 x4 p3 }1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# p& \8 v, d1 B: b但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。0 W& U" O* h( v. _# g, u/ A
2,segment 本身是很粗糙的,做字幕勉强能用。
0 O3 Q7 R3 U0 G3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
6 p) O9 d1 O* i( g6 ^4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中& L3 M# f' q1 y: _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
$ G: m# Q8 n6 [$ `3 G5,model.transcribe 中参数说明:8 W# z1 g1 Y W0 h [$ ^3 Z8 ^
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
% ^, g: }* g B$ v其中0 P0 U& w9 S7 K; H& v5 c$ T
word_timestamps=True,
0 S' R0 p. f8 W: `保证了你能拿到 word,否则是拿不到的; f. R% K X. g6 y( ^" R2 O
initial_prompt = "Hello, welcome to my lecture.")6 F, [# Y. Y) M- D3 j/ y. f
保证能尽可能准确的断句 punctuation,但是不是决定性的。
% z$ D7 i3 E) F' w其他参数可参考源文件:
! F5 {6 ?' R% `https://github.com/guillaumekln/ ... isper/transcribe.py$ F/ C! m" M9 J
152 def transcribe(# w! m' y% g: W+ Q
从源文件你可以看到是支持中文的句号断句的。
* k( K+ O( M6 @# U9 ]$ ?9 A( @. L X
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。4 v8 r- Z) U ~ x
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) C; ]: W" B6 w, _
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
# G' @7 ?3 F" ~; y0 X, B
) |/ `( Q+ @$ D " @ \! P9 ~$ ^; J7 O( n5 l
9 x' C9 P9 I" w2 |% |
|
评分
-
查看全部评分
|