|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 , G8 o: z: @1 V3 S+ c
6 y0 I r% \4 W2 \) t2 m+ Z2 D
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
6 g |6 g1 H, j, x C效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。8 W; O) ]3 _7 k' w5 C& z7 r; ?
----------------------------------------& B. e2 g# n6 }+ g6 R
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
0 e+ y% w4 i* u; D$ M) g* V在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! z; A+ x c1 o/ y: t----------------------------------------0 M& B0 Q8 [1 r7 p$ a0 n
https://github.com/guillaumekln/faster-whisper* p0 P6 ~: [2 v S" z
安装如下:. w# ]9 G; A5 [
1, Windows 10( _1 o7 g+ J8 s9 R6 j
2, Python 3.10.11
& w/ A/ v. E; l5 L/ m. e* w3, CUDA 12.1
Z0 O! o# }, ~ S# S4, 在python 3 中安装+ q( c- J* \+ v1 l" Q* L* k
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 ^( n: L: ^ S- x0 l& t
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。4 n3 B# u1 S- c: \
5,pip install -U openai-whisper7 Y. m% Y- }8 ?2 G f+ P
这是向whisper 致敬,可以不装% F/ g, \( {* A6 X% R% J
6,pip install faster-whisper
) f; A4 y5 m8 r7 _+ B0 J* U----------------------------------------1 _. g& t' _0 {* R4 n" y
whisper 我用的命令行,faster-whisper 我用的是python。
' N: [* Z9 O) Q) T1 E# p+ h8 e7 W/ [下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
* X& s& b: w2 x% z& l: c" H# m) p- n+ H
----------------------------------------
/ D b" ]' P" j
/ }; N0 o8 B- R3 ^! e! Gfrom faster_whisper import WhisperModel) a( p1 s; g5 V& v5 A0 p
; C4 `- B; Q w& ?/ Z0 v
model_size = "small"; X% o S; k) m7 `- g
: D+ }8 U* S3 [
model = WhisperModel(model_size, device="cuda", compute_type="int8")
+ N+ I5 b/ T' Z, k4 g, G3 N! m+ @& ?8 H7 t
segments, info = model.transcribe(% v0 m( | B* ~" ~2 W& V2 |
sourceFileName,
# I* N8 a! q2 _1 K5 H beam_size=5,
. T8 v. B! J2 P# b: _% E ` language="en",
0 [: i! P* \4 [3 a3 i task="transcribe", 8 P. ?8 d8 p7 b
word_timestamps=True, 7 \. ]) K9 g4 c( z
initial_prompt = "Hello, welcome to my lecture.")
. R+ l1 i# t2 _2 n& T$ ~6 {
! X: t) J" |+ C! r ]7 j7 ]for segment in segments:7 y) Y8 g) C* P1 S- q4 E
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- k: F) [3 N: M. ?
- f, Y: B o! T) ] for word in segment.words:
4 |- _ `) T) V: R, U: A5 O 5 A# e r; P. ~ R5 W5 U1 k, @
----------------------------------------% V! x a" ^& U
5 e$ @2 k3 t5 z& b8 I
代码说明:3 n4 ` I' _; G9 W& Q" a
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; G. O1 @9 A& j$ Y' {2 S; Q7 y但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 x0 d. X9 b! j9 O" U& o% r
2,segment 本身是很粗糙的,做字幕勉强能用。: F. G7 c3 P, m1 Y, m! |" ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& m- r' |1 ^# Y1 V0 A @, c6 L& s. @9 k
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中" V$ V1 y. D+ c# t3 l0 ~
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
4 l- C" g% _. e5 T; n$ }5,model.transcribe 中参数说明:1 l& {3 P+ j7 ?+ ^
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
' M$ F7 q# k: b5 ^) s7 Z其中
& a% R1 L8 a# M word_timestamps=True, / C/ [8 q/ @; o+ o: c5 |
保证了你能拿到 word,否则是拿不到的: j4 u. Z8 }" w
initial_prompt = "Hello, welcome to my lecture.")
- C( f# S6 n! o; z保证能尽可能准确的断句 punctuation,但是不是决定性的。" B9 p7 n* V+ b" z( j3 ?
其他参数可参考源文件:. R5 y( H, K- w2 u- u( \1 C
https://github.com/guillaumekln/ ... isper/transcribe.py0 Q/ k" O2 w$ C; m) u& ~( h- u
152 def transcribe(. M7 U8 J: |1 o5 N" I
从源文件你可以看到是支持中文的句号断句的。
- N$ \4 B' P- z( n" j6 |( q1 M2 p! x! _' P# U7 a! P
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。2 ~. y8 I4 e; o$ ^: I4 H" _: Y
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。; M6 n$ ^; [ Z
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。5 y9 |, k# r( n3 N* _ A" ]$ q. x- X
2 p3 P) R* U! E5 e8 y Y8 }
# x$ w# z, Q" n" |
( x" Z1 |% j( C/ Z |
评分
-
查看全部评分
|