|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
" a& R7 N, Y( _9 l/ n) V7 i' ?+ a% n" b7 p7 V& }7 A) i3 G, T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
4 e+ ?0 L# W! u$ h, u: F* n效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。$ J% B) X7 G2 N/ \
----------------------------------------
! j+ w+ i2 f, ]$ v* l显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。/ U- {9 r1 H) N! }3 v4 t
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 s" n; ~, u+ k* j( c* \
----------------------------------------
- f+ R' \ P1 ~$ }! Bhttps://github.com/guillaumekln/faster-whisper; z' a0 K# ]3 d% ^/ F: \
安装如下:2 i1 o% n# M8 b A+ {9 k1 A
1, Windows 10! F6 @) T( Y1 l# B/ d7 H. q
2, Python 3.10.119 _7 b4 L. t, W) P) z
3, CUDA 12.1
8 m, j& p3 S7 G6 d7 w4, 在python 3 中安装
# t" k$ T& a' n5 ~% B- N8 Y2 Hpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117' x5 [( v( p6 A6 r7 B a$ X
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 C7 D7 n' a5 [/ I7 o
5,pip install -U openai-whisper2 G" l5 \) ]1 m+ p* X
这是向whisper 致敬,可以不装; ~+ e: z# N$ I+ L$ V( G* C
6,pip install faster-whisper% n, A9 s( ]: N: R8 w+ O) Y
----------------------------------------" y( l# k) ` C0 E) p
whisper 我用的命令行,faster-whisper 我用的是python。
! R, n3 n" s4 k下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:. O! a( z. Z' n B) W
3 `( i D( {! x. Q
----------------------------------------
7 S {' I( j$ B/ Y! {
3 Y& y0 u( C3 d. Efrom faster_whisper import WhisperModel- n1 u* }% z+ r7 n
# [- B$ j5 k# Amodel_size = "small"
, t% Z; E" ^/ B+ K+ I5 ]6 y' g
) Y, `+ @8 S# F& @4 j3 @+ |model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 J9 D7 L5 \# h. x1 H# d( @1 ^+ `" X% w8 E/ C+ o+ h
segments, info = model.transcribe(
7 Q. G" i5 _+ w& }+ U4 s sourceFileName, ( S6 i) u9 K- Z( G
beam_size=5,
1 z4 \& V8 s9 m7 g- _( G language="en",
9 d, M* W% P. H# y task="transcribe",
7 m8 T; S# I3 ^ U; ^ word_timestamps=True, & @$ |: K5 i7 r: e6 D
initial_prompt = "Hello, welcome to my lecture.")* `" O; F: p. @- D2 Z# F& L
4 L% @5 m! g, Q g$ s5 u% D6 u
for segment in segments:
- i6 m) v; N5 ]6 K print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
6 Q; ?' E a j, N: P
' t. M' T# R9 F% J* U' [ for word in segment.words:
' l5 B# h* ~# z+ O- H, X
" ^! C0 [/ ^5 E4 O) O----------------------------------------
, i. Y7 o7 A! O$ ~/ L" X J! _5 k9 x* ]
代码说明:
0 u7 ^8 z* o& |$ H1 g1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
. ^ T. b ] x: a$ o但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。 j& L6 L7 Z4 r7 }$ m
2,segment 本身是很粗糙的,做字幕勉强能用。
& e z3 m4 H, q3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
4 ?7 G; q9 x- `( |( g" b4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% _7 K) A5 H8 q8 u比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。, @% d& }' Y) o* _3 x. N
5,model.transcribe 中参数说明:4 \9 L# o3 g6 _8 h( M' f* }
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数5 a( D9 S7 j# I. r! k" J$ v
其中
, T. x0 ?+ `. c M/ M: | word_timestamps=True,
) d* B% M2 }4 }保证了你能拿到 word,否则是拿不到的
, g3 O8 b3 Z" _" |& I; }/ W0 M0 _ initial_prompt = "Hello, welcome to my lecture.")
4 M+ a' m9 [7 S e2 \; z' R保证能尽可能准确的断句 punctuation,但是不是决定性的。- d) U) q" j/ u8 [
其他参数可参考源文件:
! @' F1 o: p2 Z- z2 ^& Yhttps://github.com/guillaumekln/ ... isper/transcribe.py% n, L- O- h+ h2 h7 J3 V: r+ r
152 def transcribe(5 ]9 S1 Y0 E; ]4 R
从源文件你可以看到是支持中文的句号断句的。
! H- T6 ^% \1 a- P$ T. s' \ m
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. O5 J' M/ S* x: @ i, {7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
9 G4 ` `: P7 ~# l# z% Q8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。% F* D' n# i0 e, _9 `7 ]& M3 H
. F% N6 j- F( \; C1 k; q- y
5 b+ m* r& b* \: R7 ?4 e: [) P# M" t% {4 l7 v. D/ W" @% n: f
|
评分
-
查看全部评分
|