|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * ], [; R! B' f; E
8 J! W/ E$ O, T: P/ ^7 f
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 ^/ W! J* A3 s2 e& o, ]: N q E效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. X* n" o+ f% r6 E
----------------------------------------
8 n& f; R5 B; |4 j3 I" b显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 c, R. ~) H0 n4 W% j在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。2 [& \( B1 _; f5 j5 q
----------------------------------------
3 A8 d9 B. W/ ]1 n$ w$ mhttps://github.com/guillaumekln/faster-whisper. `" B2 J3 K) r
安装如下:
% y2 ^ ]. `: S- a2 b( ~1, Windows 10
. R1 C5 D8 K0 l* T& S2, Python 3.10.118 _, L& s) K( [. N) X* s# G4 P
3, CUDA 12.1
! o* [+ ~' R9 q3 o. N4, 在python 3 中安装
: W. ?5 l# b. M* ?5 |) epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* p. _0 y7 ?6 S( W这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
; _2 A2 I* ~4 n- x5,pip install -U openai-whisper3 [4 K% D& {/ @, N9 w/ A/ q# q
这是向whisper 致敬,可以不装) {- q7 Z: A1 s+ @/ U. C
6,pip install faster-whisper
/ i5 `; U( m7 P----------------------------------------0 d' u- B' y! N0 o
whisper 我用的命令行,faster-whisper 我用的是python。0 [; X- m1 y, A5 K3 K: N
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; x0 [) {7 W g+ [9 p' P& U
& \, c* ~8 @6 a0 X$ {3 r
----------------------------------------2 l9 n# r8 L" F# q
+ J# v' t2 Z4 w; |
from faster_whisper import WhisperModel0 u. `. w, n" k2 n4 m
- Z I/ r$ F7 e# B+ ]( `, E
model_size = "small"
1 m9 n* W$ P) q7 {& l. p' [; n/ t2 O/ B2 B
model = WhisperModel(model_size, device="cuda", compute_type="int8")" q% x/ v' T( |. f; N: C; I @& B6 m; t
, e O& J' g+ U1 t: E
segments, info = model.transcribe(8 A c1 x: }2 H. J. b6 d; F" j
sourceFileName, ! ], j) c' I- P. i# U
beam_size=5, : v& ~3 t8 p/ E6 t
language="en", ' _* T7 {+ }' R/ L3 Q( Y# L5 y# j
task="transcribe",
* H! {" J* s! X/ Z) J4 ] word_timestamps=True, 0 g O# a, D. U% @/ V
initial_prompt = "Hello, welcome to my lecture.")- \# L2 M) i5 g, r1 m1 L
* d! F1 Q7 l: l# f( W
for segment in segments:
" k$ [/ N0 a0 _7 G( r! l print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))% d8 ]( l5 V, v7 v% j! s7 E. T
! n0 |' m2 Z2 }8 N, f for word in segment.words:0 i( `& g, W0 r0 j7 B3 ]
( b" L- Y" Z9 b# b----------------------------------------
$ D8 R" W) f& R( B/ L9 h& X. j- k" M7 w. n, x3 _0 n
代码说明:! y& K1 m9 w* `: x4 G1 X
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。' p+ S7 o M: D/ N; k5 x
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* Z4 y% F$ h/ o' {' }) [8 @9 @. {2,segment 本身是很粗糙的,做字幕勉强能用。* e8 v2 d6 K+ `( l; F
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
$ m9 } V3 b' b. D6 }/ v \; t$ b0 f4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中( `( F" I7 B$ y' S2 x! r
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ r# H. G& }, ^3 \+ q: j: n
5,model.transcribe 中参数说明:
) T: U T% `/ ^8 z; f你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数/ ~: j6 q2 B- r& c7 o
其中 k; R0 s$ ~0 h4 H) i( I" ?7 w1 R
word_timestamps=True, + O- y% A9 B# w* l6 @. C7 [
保证了你能拿到 word,否则是拿不到的) H' O0 t, d# }* w* s
initial_prompt = "Hello, welcome to my lecture.")% D1 E4 B4 \) ~ Q' B
保证能尽可能准确的断句 punctuation,但是不是决定性的。
' P* |- _$ W/ k0 _, g) E其他参数可参考源文件:/ B& J* q: U# C* G1 C0 h6 P4 K$ m
https://github.com/guillaumekln/ ... isper/transcribe.py: r9 q" u, f; ~8 ]$ ?+ n
152 def transcribe(" b7 U. d; _- W; m' X
从源文件你可以看到是支持中文的句号断句的。% {+ T% m- `* \0 ^7 Y
- k5 O4 H' S: k
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. l9 W) K {1 V$ L. n: F: M7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。5 J. l, x( W/ k( o4 g4 z; Z8 [
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 K; X+ m+ v$ f7 N2 ~7 }/ i- t! w2 ]; H7 ]8 [
/ i% Y+ K) l) p% ?. J% @$ S- z9 O: h) U# N! W2 M
|
评分
-
查看全部评分
|