|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 9 ^9 N w6 ~# S, Q4 z% m
w% C v6 ]( m1 s5 g! @借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# D2 M* U7 b) Z1 S, w' Q' z效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。3 D" o# m" K z' b" h. C
----------------------------------------
% D5 P, S$ V5 f# ~7 q' Y3 j显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
T2 A3 r Z1 c- w x% r) T( a在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
7 w0 A) Y( M1 X- A" c: m----------------------------------------
5 t1 d. j3 @* z9 \4 Shttps://github.com/guillaumekln/faster-whisper
0 h4 T( z3 ^, s8 Q/ V" h安装如下:
; M2 Q: |" o) q5 }9 a7 X1, Windows 10 g6 H" n: e/ a! z
2, Python 3.10.11; Z% l2 G5 N% s0 F2 f @4 X
3, CUDA 12.1
N1 g+ z- D" e4, 在python 3 中安装) W6 m- u2 B6 B2 Y
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117. |* G2 r7 @. i' x; i
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。+ u9 z, e0 S* P" ?: T* H
5,pip install -U openai-whisper
3 V- L0 T$ K1 U: t! r M这是向whisper 致敬,可以不装1 z3 ^4 s6 R3 o
6,pip install faster-whisper
. R8 v' D& M7 x+ o' J& V6 K----------------------------------------! O4 G% C3 d; p; K! Q
whisper 我用的命令行,faster-whisper 我用的是python。
& @9 m1 \( m0 F; `8 @6 |4 g下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
8 {9 p* L8 n4 E
$ ]3 j5 {$ n6 T) j----------------------------------------
4 s4 F o" Y0 o3 i2 @
3 x% |. |( |5 }4 V. M: c. Y! kfrom faster_whisper import WhisperModel% K j# w2 v+ ^1 y* g% \) k$ K
7 d, D. S# I: }. \. Qmodel_size = "small"
! U1 t: ~" |& s' R# w. N
# Y. j3 \; m( q! _; u) E7 p1 Kmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
4 _. G4 S& ?5 V9 s
) ]4 Y1 t0 \4 O1 Vsegments, info = model.transcribe(/ f' a N$ Z9 V1 m( C3 ]
sourceFileName,
6 x' @: h( r) x/ b" }" p beam_size=5,
, j. W( y6 W8 a: W language="en",
* L7 O% u4 e7 G% N task="transcribe",
6 [/ h3 P3 V! }( I5 N word_timestamps=True, % A) b6 {: O, j" t
initial_prompt = "Hello, welcome to my lecture.")
( j' u1 b7 g# |& q' F# K+ c
5 ^8 y% C/ f/ D; Rfor segment in segments:
' h2 Z. s2 w2 C( B print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
5 G! Q7 u$ I6 X5 a" {8 m- C' S
, c$ o2 I+ Q) @/ z0 D for word in segment.words:* C! E+ G* o. V' m) O
, H! ? `) ~& H: M+ D& s, h
----------------------------------------; N2 t1 S$ J+ p* X, e5 k
" b4 f. k0 K% b- N0 x N6 Z代码说明:; J& T3 ?# q7 c+ W0 R% z
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 M, L$ g6 h& _3 F
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。0 ?5 J: P' J7 h5 l7 n
2,segment 本身是很粗糙的,做字幕勉强能用。
2 d9 P. R8 M f8 n& A, `3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。: Q+ V/ c& i: }) m" ~3 u% ~' m! X
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
+ l) `7 `* g) I! |7 n2 q( R9 Y% i3 T比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。/ w2 R% Z Y P; L, E) ?
5,model.transcribe 中参数说明:. i8 g' U% p0 R7 P8 m7 N$ |
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
9 ]" [6 J3 b2 S6 w. ]6 E1 }其中% G% C( v& }; A8 x
word_timestamps=True,
6 `$ S% R: G% L* ^保证了你能拿到 word,否则是拿不到的& Y7 G1 V: ^. S7 v/ ?5 T0 x
initial_prompt = "Hello, welcome to my lecture.")+ V* g6 |# E: k6 R9 m
保证能尽可能准确的断句 punctuation,但是不是决定性的。7 h4 q9 s' k l U# Y! h) `2 z
其他参数可参考源文件:- ~ D E+ Y, S; j* `% D* C
https://github.com/guillaumekln/ ... isper/transcribe.py
6 ]% o3 S7 ]- H. o# @& Z Q- y152 def transcribe(/ ~' C7 m# p$ M' c k
从源文件你可以看到是支持中文的句号断句的。1 [6 i' }% b V0 Z$ D
0 i3 x1 j; j% r: v7 r6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ j8 z I* V+ t6 D2 M7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。' X5 s4 I) A1 D$ o/ x
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ j1 H; \, n" s/ A8 `+ E
: B7 g x. C! W1 w$ i3 H 3 `. P L! \; q* h; k& ^4 C' w; A
4 J0 H2 Z: |0 {# D9 N; g8 a |
评分
-
查看全部评分
|