|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
0 i% q$ _9 j4 P. z1 l7 K
' X5 m/ |" J" }' x# b借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ f/ E( f |1 ]$ L4 S% r+ I9 L, D效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。* j) R5 ? S6 v
----------------------------------------
# p6 M) O9 y2 u9 b: N显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。3 S" f/ v8 J1 S# _' s, Q- ~# U+ \
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
9 U& l$ `2 _# T4 r2 n----------------------------------------; o% d, A% s$ Y H1 i! n/ l
https://github.com/guillaumekln/faster-whisper7 {/ y. `5 @2 H( j. Q' ^
安装如下:& l+ F2 U5 p9 O. T0 N" P
1, Windows 102 N0 _8 @+ h+ s& M, u {
2, Python 3.10.11
; R7 m$ `; k( K4 k9 L3, CUDA 12.1
2 A- J2 U( Y+ f" k$ R4, 在python 3 中安装 Y* }+ p% X( x" ?* b( b& B
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1172 u' R; j7 ~! f' o9 i0 W
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ u; l% U1 q# }0 v/ k' l
5,pip install -U openai-whisper
4 P/ M' z$ K3 I" T这是向whisper 致敬,可以不装
# ]( L+ o( I/ v$ S. `' v" k6,pip install faster-whisper
/ Q) B9 \1 f! M: y# }----------------------------------------
7 G+ l& s: o9 f1 J. ~9 z: `$ z9 hwhisper 我用的命令行,faster-whisper 我用的是python。* F7 Y! s3 b2 y* x1 [7 R$ J& q2 V% r
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:1 R" K' T4 S. H5 J' ?
- I! [ z' G3 e/ R; X# M: h
----------------------------------------
: p* z) }7 `) ?* ^
. [) w K I2 S( mfrom faster_whisper import WhisperModel" o1 y6 N5 _) _8 W
6 d& w+ a! n- F1 J2 \8 n- T
model_size = "small"( v- H+ C; D% W6 J/ y
5 }( H' c$ c" kmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
6 G. {5 D& @! J6 n
1 @% |% F/ \" m" x. T" [" qsegments, info = model.transcribe(- w5 g3 W+ S* Q3 F) R, j% \' n1 P" S
sourceFileName,
* g- W: M3 {/ @/ d+ P beam_size=5, ! D; F2 A$ O. ^" F0 X8 v. d& O9 l
language="en",
+ k! T" W6 r7 v6 j4 O task="transcribe", ' }" ]/ A! \' m
word_timestamps=True, ! E7 [+ f7 ?- s! l f$ _
initial_prompt = "Hello, welcome to my lecture.")9 }6 r9 X4 F6 w7 F; q
/ |) U% T9 }7 |2 ]( V! G* P2 ^) w" R% pfor segment in segments:
; T. i# b0 ]7 R% z print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))& r% Z) l' ~# a2 P& F1 ?
V: w8 b4 t' d for word in segment.words:; P8 a6 k" `7 z& x
) F- x( ]2 @- x; X$ m3 ^( U f----------------------------------------1 W* v. G$ }2 i' r' Q# V5 z
- R# M5 K0 h5 N" C' w代码说明:
/ p9 w7 Z& t& j2 ~0 g3 R5 K* r- @1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
) v! `' x( o; u! F但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
( U2 B+ {0 @5 M( j5 H1 P2,segment 本身是很粗糙的,做字幕勉强能用。
- v/ `5 q4 l: ?; d- Q# G3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。! h8 g3 g3 w* j* w# Q+ j
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- V2 x8 I) x5 P) [( V
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
8 k+ q9 K7 T5 t5,model.transcribe 中参数说明:! U8 X4 C- Y+ b6 N0 r8 `
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 E5 `- `; Y2 l" f0 \) O其中
' u0 x" H" D4 J( J2 M2 H' P" J P1 m word_timestamps=True,
) G1 _% z6 H. V保证了你能拿到 word,否则是拿不到的
4 e! F! u0 V5 N- ^" \ initial_prompt = "Hello, welcome to my lecture."), W" R% ~. }, ^- O4 o- s3 c
保证能尽可能准确的断句 punctuation,但是不是决定性的。" e( `( X8 H( L
其他参数可参考源文件:" T1 J; C& L* x" P5 U( ^
https://github.com/guillaumekln/ ... isper/transcribe.py$ L, I( M, d, _5 U
152 def transcribe(# a1 f, `: H6 k/ K
从源文件你可以看到是支持中文的句号断句的。
2 E7 `# u0 [6 |( r! p" M. Q0 k$ n) @
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
1 i4 a0 ^- ]4 W0 Q# v7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。+ } O. l G* U9 a
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
0 S( _* H; S, b" Q0 f) T( z( ~
& A( P- `: Y6 } g; ~! T7 J8 p
8 c" N1 Y+ v S: A: _5 V. R3 d T; x
' |9 n7 s8 w9 b9 h |
评分
-
查看全部评分
|