|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ' J& E/ H4 }- r' `7 ~) M7 \: D
- S) d" T: Y) `9 j) ~: N7 t9 l借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。0 W: C6 e; f1 R. |/ q% P5 T. f/ W2 e
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
& {, x7 H2 M& g, O0 i N----------------------------------------
; z2 p: D" x6 q9 J, u* Y& \/ c显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。7 t1 O v3 ^* Z7 R" F) ] M
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。8 E, U V$ t) m2 Y
----------------------------------------3 j( S7 t# e# R( D* x* O' s
https://github.com/guillaumekln/faster-whisper
# M# w4 u% t/ n) l* K安装如下:
" a' k" \ ~/ h& ~1, Windows 101 z- T0 B, U; f9 x! {9 j
2, Python 3.10.11( R8 b6 {- E, W8 j) e7 P
3, CUDA 12.1 K. L* u3 b1 O: j; j# K
4, 在python 3 中安装) [5 ^& Y4 Y0 {% o" x
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& O8 U4 P' |* h$ O, w. Z
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) b% G7 V- [& h. s7 ^5,pip install -U openai-whisper
+ Z* i0 w1 F1 p6 I这是向whisper 致敬,可以不装
" r( f# d1 y4 X6 z+ L; y9 Z6,pip install faster-whisper/ X0 U5 @3 `% V# `3 ^
----------------------------------------
% I4 `( e! J+ F/ _4 s4 ^3 i2 vwhisper 我用的命令行,faster-whisper 我用的是python。
2 b3 X. y& V3 |( P: U- E% B# `" `下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
8 S J- C9 o o
# `% P9 e* S7 O7 B- l2 a' J8 |----------------------------------------
+ e- V3 c! V& \8 W7 h) |' [+ E
" J4 G( t: P% t, |# V- K4 Qfrom faster_whisper import WhisperModel
/ g. y" G' h3 a0 g/ z
5 ]: A6 g' U9 E) [7 Jmodel_size = "small"
/ E4 O% q+ ]9 ]" G+ d
/ f0 R+ ^/ \4 x8 Q2 Y7 G, kmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
2 D: i) d9 ?" u+ V8 k M/ x3 B& X8 _) x" w9 M
segments, info = model.transcribe(+ O$ X: a) b4 M2 W6 ?
sourceFileName,
& q4 G, `9 i" M- @; [ beam_size=5,
& J. z4 b9 d0 x3 v5 o/ T language="en",
" ~. ?) ~8 ~" I; s' g task="transcribe", / C* r' m7 l# p1 f8 Y
word_timestamps=True, 5 F, y- y: s& i2 T
initial_prompt = "Hello, welcome to my lecture.")
4 W+ v, s' i, {& {$ M( F
& H% D) k! f- I5 y. i9 q' W- Mfor segment in segments:- g2 c* s1 @5 n6 ^: @
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)). h3 |; A+ D# q+ I
( q7 P& g) f y) `
for word in segment.words:
7 Z. L% N8 e N' \% L, L7 @
+ n( Y5 E5 ^7 t+ i: O----------------------------------------
# g, t- l4 U- ~5 C, \# }
; n4 s4 @0 C" x+ q G3 F+ k代码说明:3 K; Y' H1 @) q- y$ c, M
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。 U4 p0 b9 @% L2 F2 K( s
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。4 |9 J0 _$ W# N# c2 K3 h
2,segment 本身是很粗糙的,做字幕勉强能用。
3 h4 Z- G! P" [2 A* ` J3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。* f) y/ L0 o& s w
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
+ B# _8 T! Y4 o0 j7 ~比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。* x; c8 a" X! D# y5 G4 R
5,model.transcribe 中参数说明:
0 w( Y$ D* s8 r, a* T: {你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
' p; F& B. D W# Y( P% N0 v6 T其中) N1 W1 K9 D# t, r. W
word_timestamps=True,
, B8 {) n$ c% _保证了你能拿到 word,否则是拿不到的
4 J2 `$ e m; o" b1 g. q initial_prompt = "Hello, welcome to my lecture.")
6 q6 F( L- l1 D8 w保证能尽可能准确的断句 punctuation,但是不是决定性的。 d8 t( i6 Y0 H% v6 S- `
其他参数可参考源文件:3 c! o! B1 {( g8 U# D! i
https://github.com/guillaumekln/ ... isper/transcribe.py
. V5 r, f: q6 b! O- Q$ O152 def transcribe(( J _0 a# H Q5 P
从源文件你可以看到是支持中文的句号断句的。! v8 p9 s3 e* Y2 R# O( E
: w$ ]$ D3 c; h6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。8 ?- ^& _9 {) n$ |2 D- A- }$ U
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。1 n9 ^4 `& j0 y( f5 U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。, o( a8 Z: [/ `7 ~* S0 F
8 ?" H3 d$ U" _$ r6 w/ Y& ` , f/ f$ _4 @) Z% s+ C4 ?: f6 X
$ G1 }" |# q# k$ F$ I P |
评分
-
查看全部评分
|