|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 I5 j& Z( k3 Z. |7 G( j7 K' e, I# O: u7 k% l, h3 X
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
}+ D+ k! Z% [1 J8 x2 Y& \# e3 Y效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。+ }2 C3 Q$ f, L& `/ {' ~* g x' i/ C
----------------------------------------+ C" S' K' T4 g. ^& Y8 T* B+ r j
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
+ ?7 R6 r2 _/ V+ F* ?- c" [: s8 i在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。) g( x( U' ^) ]% t% L p8 \. {: j
----------------------------------------4 Y6 `! D/ R2 c4 Y* h6 L
https://github.com/guillaumekln/faster-whisper
" r' {& k0 Y7 i% L& n安装如下:$ e z8 I. h- v" l$ a1 d
1, Windows 10
/ y8 M: J7 Q/ f4 e1 l. r2, Python 3.10.119 L2 q1 B- c+ h5 Y0 g+ L
3, CUDA 12.1
2 @) _& k1 m/ z! x u; X3 @, h4, 在python 3 中安装# s# l, L6 X8 H$ E
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117- l6 ]2 `/ U1 @# @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 H& T4 N- w# }" l
5,pip install -U openai-whisper
% v o2 r& C* T5 W7 R/ a这是向whisper 致敬,可以不装) t* E. n0 ~' a0 G0 Y6 A3 D6 y( P; z
6,pip install faster-whisper
. L6 I7 b0 _. \1 M# P( X----------------------------------------
" u' @2 V/ A+ W, v" t3 F5 bwhisper 我用的命令行,faster-whisper 我用的是python。& b' }& b8 [6 `! ?8 Q9 t
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
# D* H' @% c% `$ v* B
/ a. t! h! ?% v----------------------------------------, ^' d0 `- @' O( K7 G
( P( ?1 `1 T! j0 S5 c
from faster_whisper import WhisperModel
9 v0 p1 u+ [( B" q& p, m
5 u$ z7 u2 S8 J( z/ b( Kmodel_size = "small"
) O" R3 Y' J# r3 l/ |& Y4 [) W
9 F; K2 @" h+ jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
* L3 z* ^6 d0 L/ j7 X0 A
4 R& K) H, f' J( l" n8 ]7 xsegments, info = model.transcribe(1 s: V5 V. a, L L8 u3 ~
sourceFileName, 0 f6 z" x8 F1 e$ }! W3 ^- t" N
beam_size=5, & o5 x2 B. J6 B" I5 b
language="en", 9 R' [7 I4 q) D* D* h# a
task="transcribe", . B. X/ o0 J# ]; S- b7 h, m
word_timestamps=True,
* k2 R' S6 @4 g initial_prompt = "Hello, welcome to my lecture.")
$ I) x7 T- B% _, A
# w6 `6 ?7 ?) gfor segment in segments:
E% d9 g- ?& T' K7 V1 t print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))/ b- m( E6 ?8 b# d6 @
2 z# [ \# T3 }6 Z5 g$ Z: ^
for word in segment.words:1 j7 f9 k/ q3 B/ ~( p" e' z
' V- }( A! K0 W) r+ Q----------------------------------------
3 ~ g. ~$ t7 _9 ]6 s$ X8 p) Z3 _2 V7 v' P. \) q- _9 d2 v
代码说明:
4 L0 `/ i! x, d, P9 t; ^1 ~1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
3 d3 L9 d+ j$ l! _1 g. _4 C但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。" Y+ r$ p6 z' j- W3 z1 f
2,segment 本身是很粗糙的,做字幕勉强能用。
( ]1 j+ {, P2 n3 U/ [0 g3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。1 Z2 E- h5 U/ Y7 j$ \
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
+ H' K$ h& f4 Z8 p/ u比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% \8 Y, b/ M4 Q% O5,model.transcribe 中参数说明:8 b" ?6 A9 J1 v3 y$ @. \) G
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数8 F+ z. a7 g9 h+ s4 n! \* G
其中6 x; u: x, O! B4 F: j H. B. n
word_timestamps=True,
/ Y \' [, M# y) N保证了你能拿到 word,否则是拿不到的& y/ Z, s2 X$ i) q* B# Y+ B( ]3 k1 J
initial_prompt = "Hello, welcome to my lecture.")
2 X3 e3 Y% D3 x1 o3 [" n$ @保证能尽可能准确的断句 punctuation,但是不是决定性的。$ b: ]9 {5 T; l- `& j
其他参数可参考源文件:( U0 q# h$ k" ?% g/ P8 i
https://github.com/guillaumekln/ ... isper/transcribe.py! r; \$ e5 @+ f5 s9 f# g- H- g
152 def transcribe(
; g) [- O4 f, l9 H2 k从源文件你可以看到是支持中文的句号断句的。" E: R. c3 _' \/ B9 X, t( h+ O
2 o) i& O5 { g; i2 e; G5 [" J
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。) N! k" Y9 {$ D4 m
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
: r# Y! W& U: F8 ?4 Y8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。8 A; j+ l. M9 J h, _+ H; i+ ]8 U
: w# U. G6 M$ c! p& O% C. F7 [" U ; ~4 X7 o$ U6 r1 `. d
" B1 f7 z& H& C# r2 j
|
评分
-
查看全部评分
|