|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; s" j+ n3 d- e
: d4 a! \# R6 a6 R2 e' j借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
8 k4 ]( b$ b; X: q l7 s0 X效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( p3 b/ w/ o: \* q
----------------------------------------5 N7 v1 L# w3 x* Y7 ?, O/ a: e
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。/ U8 r1 M+ f; f4 D `
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
+ y5 q- l/ u2 W* Y# H0 @% U5 A----------------------------------------
5 p9 ^: a! C+ D' s4 V: Hhttps://github.com/guillaumekln/faster-whisper6 e+ R4 M1 H4 Q
安装如下:
. S8 l& a" S, K1, Windows 10
8 ]0 q# w1 b; ]# }% W O/ P" ?2, Python 3.10.11 I0 ]$ a, _ u0 j% N# @4 x
3, CUDA 12.1
1 {* ?( u+ v8 V1 o4, 在python 3 中安装
3 J" `. }3 R, f- d m2 a) vpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
$ w. D1 ?4 M( @2 ^/ j7 |这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
- a1 M" V% r# O% w5,pip install -U openai-whisper d! @& L# `, i* |- ~
这是向whisper 致敬,可以不装) k) w& i4 d7 G
6,pip install faster-whisper3 I; A7 b- t! J i& @6 a) }+ n; [
----------------------------------------/ ]) S7 l4 W" x7 `
whisper 我用的命令行,faster-whisper 我用的是python。
. o3 R! p. s6 ~' ?$ K下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# l8 h- l) Y% O$ Z
' ]) K) e5 @; d: Q) M
----------------------------------------
& N: A* R Q# t1 _1 o" q) f2 k$ b. @5 C3 Y2 ]$ B0 R4 j: p
from faster_whisper import WhisperModel
/ F% H/ {, \- ]5 \# Q. H+ Y/ J9 v+ H0 h2 Q. i" ?( [- P4 c
model_size = "small" b3 \4 a, r3 m' z4 ^5 x0 v
+ S) u' b- l i% Z/ O2 Cmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
5 x; C$ R$ Z [4 V) R# B b
1 ?! m4 c. ^+ p- |1 ~* Tsegments, info = model.transcribe(
I& }+ S/ R3 | sourceFileName, ( ^+ U4 A. B0 a0 {/ i* h3 C
beam_size=5, ' d# O/ X7 Q$ _$ B4 m' |5 R w
language="en",
- o* C3 m! @9 F0 j task="transcribe",
7 Q5 F, I- v8 }9 L! W# m word_timestamps=True,
3 p- k9 }3 F0 B! t" ?; K+ w initial_prompt = "Hello, welcome to my lecture.")4 _6 W0 z6 ]& K# J
1 }8 H- E/ w1 x1 \8 g5 o) X
for segment in segments:# ?. S" |4 m$ C/ ?) d8 B1 C6 c
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& b# a1 F. A. W& W7 D% h& B3 W5 N
$ e1 G" K' x* e% l" D+ A5 n( Z for word in segment.words:
) Y6 F4 u9 X+ S2 w/ |( q
) v" u1 J1 W, B2 B) w3 A# i6 v----------------------------------------
3 b: s6 s( `( r- l Y* S* a7 l0 n$ e$ v
代码说明:' u) K8 M2 G/ R
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 Z( T. R7 w' F M! e: m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。) K) v1 o/ Q7 d; A1 U6 P0 I6 z
2,segment 本身是很粗糙的,做字幕勉强能用。/ f, K9 W# y, Y0 I6 q
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。8 m2 s: ?( e# {$ n
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 s$ g6 W( o2 _& V: S
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。: G% c4 A' R% l2 \8 y% t
5,model.transcribe 中参数说明:7 U7 o x; m3 Z0 ?- c
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 E2 N# S7 h/ N+ e
其中
3 {* k* A1 v- X: r word_timestamps=True,
( \9 _% ~" f, g保证了你能拿到 word,否则是拿不到的: j s3 d3 q3 u/ I
initial_prompt = "Hello, welcome to my lecture.")# l& E; j b5 t% L9 p# x" b
保证能尽可能准确的断句 punctuation,但是不是决定性的。, T. Y9 c+ x( o; e4 B9 a X& A7 Z
其他参数可参考源文件:
6 W7 x, f8 W( S, [ fhttps://github.com/guillaumekln/ ... isper/transcribe.py
! E0 h: ?* N1 V% ]4 T2 I2 i' n4 b152 def transcribe(
' r, X8 V6 O" a" i8 v6 y0 r* G从源文件你可以看到是支持中文的句号断句的。
" C9 y$ X* Z* B& g7 ~
$ p( A1 i. S4 a' k6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ g8 b/ }( d4 }- ?8 {7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
8 H- z% Y; Q3 J7 K( W, L8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。 [# J% n) h/ u3 f5 F2 t- v
/ ~" E# Z, L' T+ ^( g7 p
( T! V) |- c; E0 ~# d/ x0 h7 S4 ~/ S! | g$ a" p5 R( P
|
评分
-
查看全部评分
|