|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ! p7 J) W ^4 I: P: R% Q" J% `( j$ ^
4 K2 }7 W) v, T借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
9 f3 z6 J# p" P. \效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。6 Z' j- k) f$ c& H7 L
----------------------------------------$ i+ R7 a1 t5 _ m) ^3 n
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
; K- I& @2 O3 q- i/ l在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。5 u- {/ B4 R0 Q+ J! l8 R
----------------------------------------- w+ F# j* l; Q" \
https://github.com/guillaumekln/faster-whisper" Y G6 @& {/ Q
安装如下:
$ a7 [) W0 T8 ]: G* Q1, Windows 10
1 X) v1 I6 g0 P4 I* U# R2, Python 3.10.11
9 o$ Z! O5 G: Y% H5 e' m! j# e- m3, CUDA 12.1
" s- N" [4 V& u t9 R, e4 `, a4, 在python 3 中安装( M8 E, u$ }8 H5 y7 O
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117: X8 u& x5 _: w& `" u
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" Z# w$ q, a2 @. C' y7 H( U- h3 R6 ]) h
5,pip install -U openai-whisper
2 T. f- N! ^3 V3 f" r这是向whisper 致敬,可以不装8 e+ b' S4 l- ]+ [
6,pip install faster-whisper8 c" | R# L6 B
----------------------------------------, f2 ~. n0 N4 B- q2 F
whisper 我用的命令行,faster-whisper 我用的是python。& W; A, P k9 O8 z7 B1 x2 h
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
& f$ a1 o& S! o0 U' Y; m( T- `
----------------------------------------
& G" ~ u, s6 B1 X6 m
E# t: C4 W, n' ~3 J6 Xfrom faster_whisper import WhisperModel
4 i3 w9 P4 D1 f+ P. q3 i% y
: `( {* i5 E' E$ V0 D' }model_size = "small"9 Z1 s/ i ]; ]/ t* u N; i
% X% F) q s. E7 Emodel = WhisperModel(model_size, device="cuda", compute_type="int8")
6 M3 z+ |/ S1 z+ \- i" I B2 n+ x& J# X
segments, info = model.transcribe(
$ b! e& H ?" }2 u& | sourceFileName,
. Q# @3 E1 @! V5 M2 f% h7 O8 ? beam_size=5,
1 i; m5 z6 I! `9 I language="en", * Y9 h5 p4 C/ P! h: E5 Q
task="transcribe", $ S* F! b* H4 N; O& ]) @. D7 L1 E
word_timestamps=True,
] w( [& q) M) K9 t- o initial_prompt = "Hello, welcome to my lecture.")3 u! J: o; {: h4 }
* X% v7 B" {% i4 Gfor segment in segments:2 a \: w# U! X, M
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
0 v9 r( U. u) ^0 ]6 L8 r6 C& ]7 S
3 ~6 z; O& ~0 a+ s* h- u5 R for word in segment.words:
6 M% \2 u; z4 G& ` O( L 8 m" Z, e B& q$ y1 z9 R" e
----------------------------------------
& ]7 d% c$ v2 e& v
. H* e) H# H: ?% I代码说明:
7 c8 J) D) z; R+ r$ o2 `1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
6 m& _2 m$ q) [, W( Y% ^7 x但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! A6 J$ j1 W w8 B
2,segment 本身是很粗糙的,做字幕勉强能用。
+ {6 R8 b- C! t, ` e: g9 s3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。! F" h, \! s7 |# }
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中. Y) j2 }) ?0 W6 P) A# U# O$ P
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 K3 U0 t- S% G& z5 y
5,model.transcribe 中参数说明:
7 N+ `* b+ f7 w8 _你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 X; p, w* F% d8 Y
其中
, j; ~3 |+ s: s6 V% v+ { word_timestamps=True,
- `# z$ g* p( T# P, e: ^保证了你能拿到 word,否则是拿不到的
4 n9 r# W9 J7 {8 Z% I' o* M initial_prompt = "Hello, welcome to my lecture.")
0 q- e' t( f+ M/ d. J保证能尽可能准确的断句 punctuation,但是不是决定性的。
6 i0 T- B( A8 W其他参数可参考源文件:
8 p$ M( Z1 [* ^9 v7 i9 v) Shttps://github.com/guillaumekln/ ... isper/transcribe.py
" v3 I3 k' K9 N2 z! f) k152 def transcribe(
6 u/ e# \8 ]$ k. T6 E2 O从源文件你可以看到是支持中文的句号断句的。1 ]6 n, }) ]& r* L* k+ I3 f! X
7 |7 N: @' C5 ?6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。1 [% I! ^- M. V! M0 _. c9 n
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。5 B' R8 i. ^- t7 Y7 Q# Q9 x* j( v
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* h3 G1 c- O; d4 J
4 v3 J4 ]0 E+ X7 r
1 n' ?( G2 m7 \' F& s5 W
$ F8 H1 Z" Q6 V3 i
|
评分
-
查看全部评分
|