|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
/ b2 x& O/ ?% d2 Z" W& E' [! g5 A+ q. @8 f$ t, _* [" {, @( _8 E
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
0 a- x+ I( R5 U& F7 r效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。3 i8 }! \0 y2 g9 E) |' m- e
----------------------------------------
# h$ }) p3 ~8 C( P; b9 X显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
1 i8 M6 _# x- e在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" w5 N4 N I& I5 m5 W----------------------------------------$ k. B8 [0 a1 r0 Z+ U$ Z6 o- f
https://github.com/guillaumekln/faster-whisper
) P+ a5 L, \4 n% i安装如下:: J% R! s7 Q6 F" j2 N3 Y
1, Windows 10* z* J+ c6 M3 }, B
2, Python 3.10.112 X( e1 S7 d9 ^) y
3, CUDA 12.12 z, j4 Q: E1 L1 J0 M( [, g
4, 在python 3 中安装
5 ` Q, `& b0 l) K$ `0 O7 {4 Bpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1172 l/ h ~4 l* v3 Y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。6 ^- g! R2 V; t4 ?( x
5,pip install -U openai-whisper
5 ?0 A1 w0 Z+ t2 n这是向whisper 致敬,可以不装
3 }6 i3 n+ s7 R: G5 j, T* C6,pip install faster-whisper
8 D0 M: h9 ~7 Q: K& |8 u----------------------------------------
! }$ D7 d) q. Nwhisper 我用的命令行,faster-whisper 我用的是python。+ @' S% {9 b9 e, B" W, q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 l" |8 b4 \* v1 @. ~
+ D3 R3 T; Y7 o t----------------------------------------
! a3 @6 q3 \# J- Z4 K( h, _) Y8 k6 m$ s$ a- F3 A: V1 J1 e
from faster_whisper import WhisperModel( T& }6 u5 S0 m$ Q. i0 n
, j) D/ X& F5 U8 U3 e V
model_size = "small"
9 K. p7 k1 z& B, x$ j0 o, I+ B
- Q( B, b) N* P9 y6 T' lmodel = WhisperModel(model_size, device="cuda", compute_type="int8")& o; Q( y( c7 a/ I7 F, }; e b4 Z
9 [% ^3 L4 ^& \0 `segments, info = model.transcribe(( Y4 z M3 `: _! z! L& @2 D
sourceFileName,
s0 Q2 h6 L+ m% L8 U. Q beam_size=5,
0 H, b0 ~5 e. c/ B7 [0 ?9 V, ^& U language="en",
7 o' R8 E2 H7 |0 N( N task="transcribe", 0 i+ {" n, E9 {! m: Y
word_timestamps=True,
& y, Q: o& |! ~# Q0 L" r! L- y3 b& M initial_prompt = "Hello, welcome to my lecture.")
& O* C" Q7 \$ G
# s2 W, C& r( Z: L5 Xfor segment in segments:9 B! f- Z6 C6 g0 ^1 y) h( f
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 T' N/ F$ Y9 G, x$ ~
7 `: |; C% R9 A% x3 G Y+ U for word in segment.words:" H0 S5 E8 o' ?3 o7 i1 n
7 L# x4 f* l* }$ u5 C
----------------------------------------
9 D- R3 [! S# ?/ J- N- Q* _, r) G1 R; N W& _- {2 F- `" U
代码说明:
( K' }6 ]! U- P* s4 I& n1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# M( O Z0 c( p5 k& H但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
6 @" G% U8 A! Z2,segment 本身是很粗糙的,做字幕勉强能用。& }. o' J2 c* k) ]
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
: W% o+ z7 A7 ]4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中: O; y" c/ B# k* P/ p
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。7 A- w/ n E, \2 ^6 G( V
5,model.transcribe 中参数说明:
4 X) C5 y2 l7 H8 e3 J5 L你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数! P4 f6 A3 e$ d, i
其中
* Y+ a i2 p) D$ J word_timestamps=True, 2 S7 M2 r8 Y' w# e8 T
保证了你能拿到 word,否则是拿不到的) y+ |0 ?3 ^+ ?7 t+ O- I( M
initial_prompt = "Hello, welcome to my lecture.")( h# X7 }8 w6 q3 t. O4 y
保证能尽可能准确的断句 punctuation,但是不是决定性的。3 Q* x U! y. s7 Z9 @
其他参数可参考源文件:( c/ L6 X5 {, b8 K' z
https://github.com/guillaumekln/ ... isper/transcribe.py2 f. t% O: r ]) i/ b: o
152 def transcribe(
/ y m/ `/ Z4 A1 i从源文件你可以看到是支持中文的句号断句的。 i6 d( f+ v6 v% ^9 b {; p
. z: r1 \' j8 H2 @! |
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。. K, k( ^; o m. Y7 a$ n
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% T! e! f) n9 \1 t8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ t8 l- c1 C6 Y4 D# N4 Q0 W! [5 D, R& W+ A. v& X
/ e" `0 }' Q' r! a7 D% |& j# \5 \1 m; I3 R/ H
|
评分
-
查看全部评分
|