|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ! `7 T! T1 D' t& c
6 J. Q( j! \* u$ A6 e1 c+ J6 Y' Q/ o借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
2 W- @+ y9 u# Q$ n" q- J( W! e效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
0 b0 l& l" Z8 o& u6 e----------------------------------------
. \! n: N! A- _: l0 }显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。9 x/ I+ {! ^5 ?2 {1 N+ I- J1 D
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; R' o( f7 I! e----------------------------------------, w9 r0 @) P4 _" f
https://github.com/guillaumekln/faster-whisper
" {' {/ X# E1 u, N! F! j$ x安装如下:* N7 M' s$ a1 m5 \8 a
1, Windows 10
' r0 E2 v! p- G/ p- T3 j6 I) a4 b2, Python 3.10.11' h1 y) p5 x: E1 j
3, CUDA 12.1$ c$ o- C$ M: [, q
4, 在python 3 中安装5 j* T- V& z: e4 T0 q; p
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
6 c' D3 t5 q, ^8 c3 p这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
" N3 p% l% F; }& k: A, I5,pip install -U openai-whisper
- f8 s' l( k# _( u# X1 E) V这是向whisper 致敬,可以不装# W) L9 U5 |4 {
6,pip install faster-whisper1 F/ x0 Q( U3 u& g
----------------------------------------+ r0 N; A# v3 \/ C% J. w$ e
whisper 我用的命令行,faster-whisper 我用的是python。0 u# E4 ~4 Z. r" a( X, n5 q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
- a+ [4 Q* F' O- Q2 }/ g" }- d& ]
, ~" P7 }9 H4 [3 C----------------------------------------+ n! F+ E, e: L1 I5 k1 V6 a
5 c; q: e x& y$ P7 C, g
from faster_whisper import WhisperModel/ \ s& W9 W+ S4 O+ C
8 l( D2 w3 r Q9 Imodel_size = "small"7 r+ }; W6 P' F2 N. y
2 u5 x1 z4 ]# r0 `
model = WhisperModel(model_size, device="cuda", compute_type="int8")
( P) b7 m! P: d7 ?9 k8 ]+ o+ r- M( G3 r- v- o, D
segments, info = model.transcribe(
% {% R* {$ I- F' l7 \3 f sourceFileName,
- W q3 I- Y6 g6 ~0 Z5 S beam_size=5, ) F5 I. {* |6 E9 u1 g$ f5 @
language="en",
. G. q) l" r6 ~ task="transcribe",
: _& B* k" Y _( i word_timestamps=True,
, _6 n5 B5 X& d/ @6 N, e. D! B initial_prompt = "Hello, welcome to my lecture.")
; |. n3 ]3 s" b! s! z
4 C8 W+ v, {: ]) p7 e `2 K6 ufor segment in segments:
( a8 n; k. g7 h print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
6 z9 H1 z g$ B3 i1 f& |4 Y; R! `* |/ F* o9 b( f R. H$ U! Y
for word in segment.words:
, N' U% I7 q9 c ! L5 G5 {- R: t0 U
----------------------------------------
% z5 E6 e: k0 y3 J
/ F/ f N1 W* x2 d: L代码说明:
" Z& v. x- L! Z/ L. J! c2 Y1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。! Z4 x* R7 \. ~6 a& b2 ]' i; L$ T
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
: ^) J9 w N/ k0 ~2,segment 本身是很粗糙的,做字幕勉强能用。* Z) \# h4 m7 ?+ S9 x$ P8 `- ]
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。7 G& o, B) _2 R" l! j; K% Q# b K
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: x8 i" O" ^* K4 h& I; V比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
4 K& @0 x& b! I- g2 n1 P5 p+ j5,model.transcribe 中参数说明:1 b5 C1 T) ~5 M8 h" o7 d* D
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
3 }6 g! H1 j3 i其中
/ A$ a+ q8 N2 b9 n2 _2 H) F word_timestamps=True,
; L% l' Z2 N. U4 t0 w% c: f9 s保证了你能拿到 word,否则是拿不到的
8 f, t) S) ]- J; A3 k5 J2 p% e: a/ W initial_prompt = "Hello, welcome to my lecture.")
0 _: x5 x+ J: b% J1 R9 t( f3 `保证能尽可能准确的断句 punctuation,但是不是决定性的。
& h. S; b5 ]/ r' S* x* ~# P其他参数可参考源文件:; o. Z5 b7 `1 ?. E1 [: x# w
https://github.com/guillaumekln/ ... isper/transcribe.py u* F$ W( M7 r2 X
152 def transcribe(# L& v0 L6 F4 L+ E8 Y/ g i, A
从源文件你可以看到是支持中文的句号断句的。
z) g. A0 t6 a9 Y$ |
+ ^0 _7 j0 B! s+ y# K& t6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
6 _: L9 r5 ^# i# }: s7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。" l) k, {7 _7 s
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
Q8 O/ E9 n' [$ B6 j
7 f! f8 \# W9 C X$ w. ?8 D) z' V
# ~) n Y4 m9 K9 C8 o
3 r. n& p3 Z2 Q. a0 H# U% h2 P |
评分
-
查看全部评分
|