|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 0 w: Y6 v1 H& w0 d1 m& a
" R6 \" _0 `' ~: E- S
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
; T. S# Y( ?) k7 S% V效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. |3 y L0 x4 w* u5 Y
----------------------------------------2 G2 m/ w3 F+ c' }
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。; I/ ~' n0 ], | |+ B$ L
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。% K, Y- W+ B" w' g& a+ Y# X
----------------------------------------+ K2 k. N) }( ~ n
https://github.com/guillaumekln/faster-whisper
1 f2 B) [* i1 L安装如下:
, |& L; J& O) s# F4 c9 V; ~# L1, Windows 10+ F2 t" h( _: }* Y
2, Python 3.10.11
" y |/ i+ A* [! G5 S3 V- k" D3, CUDA 12.1$ _' C3 q5 A* P7 f6 M1 p
4, 在python 3 中安装. w' [$ c! Q- h/ S- d$ M6 K* I( |
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
9 K- {- e# l( s( H' e这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
- @0 o# [- L7 n+ d5,pip install -U openai-whisper2 H) F3 _/ x, _$ d" d
这是向whisper 致敬,可以不装
+ d( T8 V7 h( H. @0 ~9 j$ j: c7 r" e6,pip install faster-whisper& x0 \/ T* V' w1 I- G
----------------------------------------
$ Q) }) k4 V& O+ ~: Ywhisper 我用的命令行,faster-whisper 我用的是python。
0 d2 @* b1 A- v& y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 J0 Y$ U0 t! c' `
( }1 \2 h: s! D! ?. V4 ~' W----------------------------------------
% _/ Q9 m/ V3 x3 D9 ]( K$ j* ~$ H& r) Z7 V2 j# z0 J
from faster_whisper import WhisperModel9 S& n) }* J! \2 L' w
, B9 o4 O, p/ a1 J1 ?model_size = "small"
# f: [7 g9 g# j3 `- q
) R0 ^0 C; N7 G) ?model = WhisperModel(model_size, device="cuda", compute_type="int8")
* U2 f; r; Z9 `* F8 y' H5 a2 u$ a" N# Q
segments, info = model.transcribe(0 n) ?2 H, y2 d0 \; }
sourceFileName, ; ?& X) ^, L P2 ^( p& w/ U
beam_size=5, % C2 k0 W6 T' Z% U& r
language="en", 5 {8 f4 p" o! l' T+ ^2 J% S+ q
task="transcribe",
- s J( ~- [1 C# v word_timestamps=True, 1 p6 d6 O9 }3 l
initial_prompt = "Hello, welcome to my lecture.")
* Z- M8 w# }) F1 z2 I' G3 G- ?# E) p% F5 |$ Q1 }7 W# \
for segment in segments:/ M8 E0 j. i o9 u1 ?5 @# d8 ~4 J9 D
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))( _! g, B( {' E" B* i4 a+ L
4 Z8 C9 `: V* ~. N for word in segment.words:
6 J+ g* Z; o' L* T 8 |1 X1 X$ U6 [% C8 f6 D+ H
----------------------------------------! C9 `6 T! z8 T! u
9 V! A9 n) z* A
代码说明:
9 a+ c5 V/ i- y. @/ K1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。 p4 v7 D$ y* F* {' k* X; w6 X8 v
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 ^; U5 E$ B9 _2,segment 本身是很粗糙的,做字幕勉强能用。! v) |5 T: X! N* v: y2 {- r* z
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& ^$ s! H4 T: c6 i: H6 L4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中& {% E$ m+ J; \2 H* C4 g
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
" W5 b# K V( s& }2 u+ C# K+ k5,model.transcribe 中参数说明:8 a; ~# J# ~, g. |
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 H$ G$ e, q. T$ s/ i4 `# [) h
其中1 s) Q% A$ A+ k! ?( A, ^( X
word_timestamps=True,
5 ^2 S3 F" \: u, y) B; H1 k" v保证了你能拿到 word,否则是拿不到的0 r! r- R! B# k1 I" k1 P; q5 N
initial_prompt = "Hello, welcome to my lecture.")
$ n( O; x( I* {保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 P4 X! J+ m7 O! [其他参数可参考源文件:
3 K$ T* b3 q6 B9 j# ?( F4 n! ?0 Nhttps://github.com/guillaumekln/ ... isper/transcribe.py( P- j: o0 F1 R& } b) \
152 def transcribe(6 g; \! G6 B1 M5 G' V. ]& U" X
从源文件你可以看到是支持中文的句号断句的。% |$ ^3 A% j/ n$ E( @( `
$ r6 R H3 f+ B/ ?" m; y- r# G- f8 j: W
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* ]7 q6 b. @% A* q7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
- P$ ~- O Z8 E9 e' I2 p8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。: b p: x) i0 {" ^+ t# H
/ o) P+ F0 g9 J
8 l2 k- b/ G+ C7 {
G% m3 c2 e ~" }3 Q3 z2 v |
评分
-
查看全部评分
|