|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
: D$ a- w9 m5 m$ U1 ~; v
5 V7 o, q% h0 q* {" F" ], f借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。9 c) n# {4 `- s6 Q: }3 V% [8 f
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。$ J! u' d3 j' K$ ?2 T
----------------------------------------
6 d- _: f4 f5 ?8 r& _9 O显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。1 u$ A" r. M+ u1 c- ]& E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。2 i& ~1 J1 K" J# @2 W/ q, N4 Q
----------------------------------------: N6 Q3 P- T! o6 p
https://github.com/guillaumekln/faster-whisper. c+ r$ g) S! [' d2 h1 k4 r
安装如下:
3 r6 m% ~/ q' t0 u; t0 E* q7 a1, Windows 10
" h3 P8 B2 [8 v" s# t9 [4 [: [# D2, Python 3.10.112 f1 s" B* W/ A0 Y. n# h* _9 _; I: x
3, CUDA 12.1
" T0 `# g$ |2 n/ W. _: `# B4, 在python 3 中安装" G% ~ a: `3 E
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' `# ?9 R+ K4 u这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。; s/ B+ x! R$ m3 x7 j) i$ y
5,pip install -U openai-whisper
3 z0 \, F0 C: L6 t: s3 y. V. E这是向whisper 致敬,可以不装
% D( p7 F. [3 b' g6,pip install faster-whisper4 I/ M% z$ V3 f) y! M! w
----------------------------------------9 R' x4 a9 h) l9 ^; `/ W
whisper 我用的命令行,faster-whisper 我用的是python。
: c1 }" K% N% u& J% D6 s, y" ?- c4 K下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 d3 O" H1 {1 g
+ l1 } J. t% M' f----------------------------------------' g4 d. r; w3 e) @
* y3 B* U# `5 r1 h; i& f! r5 w+ |5 Q
from faster_whisper import WhisperModel1 \0 v, ~# E+ j8 j
4 M" d1 J- k4 ~' }2 Q c& g. h
model_size = "small"/ D8 a J: K {8 f
+ e3 L0 e8 d9 Y) S: ^1 amodel = WhisperModel(model_size, device="cuda", compute_type="int8")
- n, }8 T: o5 ^1 \) A+ y* ~; `9 m/ o2 P, g/ t4 N
segments, info = model.transcribe(
4 k" s5 r% h p. g7 o$ R2 u sourceFileName,
6 Z6 N) T3 X9 {* G( p( i beam_size=5, $ G X- L U) H9 R' s- |
language="en", $ R: s. D3 c& p) m) O: A* U8 I- e
task="transcribe", * D% }( O. y* |8 J
word_timestamps=True,
3 S/ }: C E4 X- j ` initial_prompt = "Hello, welcome to my lecture.")" X7 W: E6 |5 P4 g
$ N$ w, }. \' O8 g ]" Gfor segment in segments:
+ m) o2 x$ P8 R) G% G print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
+ @$ s! c. C9 y, D% U- _. k$ s a
* }) o/ R" @; S0 g for word in segment.words:
9 ?# h) E n2 { - Q) Y; P0 U+ P$ [$ @
----------------------------------------
% z6 Y/ F. m/ S) U3 ^5 k C9 u& h h8 W# W! Y' i* @, L
代码说明:
& J0 e! y: ?8 y* e9 k. y1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。4 G* M* Y3 ^3 c) {) j% |. P
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ t6 Y" {8 b% S9 a8 U' V/ N' B, U$ ?2,segment 本身是很粗糙的,做字幕勉强能用。
) D, {, d7 Y) X; a' r6 o$ {( Z3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。9 ]# A9 f% N( i3 g6 B
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中5 Y8 Z) J; o. F0 a. W5 n
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 y1 e( q- ?7 H& R& @* E, L$ k
5,model.transcribe 中参数说明:
1 z: v$ @6 _3 V( w你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数0 b& v6 S1 S" g2 Y* y$ J2 i
其中( }, f* r" e8 ?: ~
word_timestamps=True, 2 Q0 s- |+ J) U- D4 Z- G8 j! w
保证了你能拿到 word,否则是拿不到的
3 C* G5 n: S6 ^ initial_prompt = "Hello, welcome to my lecture.")& k3 |) j3 A$ J3 m/ z8 Q' d
保证能尽可能准确的断句 punctuation,但是不是决定性的。
1 F. Q1 M, e0 x) n6 |5 r其他参数可参考源文件:
4 I* _4 v* q! q4 w8 Rhttps://github.com/guillaumekln/ ... isper/transcribe.py! c' t; A3 k' C: f8 ~0 Y
152 def transcribe(1 D' [( ^8 O" w
从源文件你可以看到是支持中文的句号断句的。
4 A% z' {% [: ] x2 R
8 C# L0 G1 P" I5 _6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
+ ~% ~8 s8 I ~' v8 e7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 _* v# k, {+ d4 v4 i- ]5 b, ~8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。- i) n8 K0 V9 Q6 a8 m! O; V
6 D, O3 }- A$ U
" q$ |! j7 `: E$ _
9 @/ V0 q$ C& {- W3 n
|
评分
-
查看全部评分
|