|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
2 K/ S( V2 P* G, L) t; i( s t* l0 u, k. J
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: T7 _+ ?" i" [+ d* {% x3 k# X效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ y1 K2 I& r" _* e' `, S% C----------------------------------------
$ m* Z6 }0 ~0 [7 U' S显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。0 g% P* @2 N2 \9 z% u! T- f3 D
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。0 p! s! m+ x" }
----------------------------------------* d" y7 N! Y: p* @9 w w
https://github.com/guillaumekln/faster-whisper5 f! g" z" s" w4 g9 y* K5 |: \
安装如下:% c. D0 x' R* A$ P# ~
1, Windows 10+ R9 R6 |3 u2 l' S- S# }
2, Python 3.10.11
! b7 J( Z" Y* ]3, CUDA 12.1
1 h& v" L( \/ B- E% R4, 在python 3 中安装
4 X3 w W3 {) K: Spip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' E* y9 F4 P" M, K3 B6 m这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. A9 \' [. x0 d* r5,pip install -U openai-whisper T; e/ _+ b% {/ Z9 y3 c% c
这是向whisper 致敬,可以不装: I5 h2 x' d6 r1 g n# @
6,pip install faster-whisper# b3 E9 f. n! R5 `' z" |
----------------------------------------* b$ W3 K# ]$ |
whisper 我用的命令行,faster-whisper 我用的是python。
9 o# Y/ T, @, @/ E下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
. c7 t5 P; S- L2 G+ d# ~. G, g- i# B4 }0 B! C i
----------------------------------------
9 u9 ^7 [% h5 B6 g% S$ H8 H; i2 p7 K4 s& o
from faster_whisper import WhisperModel
; i1 s0 _0 C! o0 S, h T8 Z" i# {1 G6 M) @7 `+ [) O, i
model_size = "small"! p' A5 J! E& ~+ z+ _
+ K% A+ q1 ~* s+ P
model = WhisperModel(model_size, device="cuda", compute_type="int8")
; ~% b9 m- v9 D9 |$ H" h$ o& m$ a* b2 c7 B/ J% n
segments, info = model.transcribe(
) y3 ^! N. I: k1 d3 @ sourceFileName, 3 _2 T4 N6 S8 g6 r% M7 J! o9 M- {
beam_size=5,
/ z2 [- F6 p& k1 z language="en", 0 f7 O% y+ M2 N4 }' g
task="transcribe",
r+ h2 Z( W, K. D7 H6 T word_timestamps=True, 8 S' w8 |. L6 O2 }" d
initial_prompt = "Hello, welcome to my lecture.")$ Q/ K& @- R% _
- a" O% T& g$ Y0 O: `; I0 \
for segment in segments:
5 \7 w1 w7 [9 i- ? print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
0 w( M+ D6 d& _$ g6 \( A# b5 g
for word in segment.words:
/ `0 I- T, `7 K- v i) D
9 @+ l# q4 \1 A/ d5 g: z----------------------------------------% e% u5 r E( e( ]$ ~! J8 q
% {- [7 [. M& e) \5 F代码说明:
0 {' l* ~% P/ l+ E1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ T) ]5 Z+ Q: z- p
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 M7 a/ x$ c+ y% v
2,segment 本身是很粗糙的,做字幕勉强能用。
d) }$ j+ d* b- S) ^9 k3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
]5 F9 f; N& X E8 b4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
3 b; L/ I: l& v+ W- m. B) ?比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。! ^4 _) M C. o: x
5,model.transcribe 中参数说明:
9 o: q4 d- H3 d你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数% v4 i0 Z' c- J: V% a
其中
) {7 P5 W C H$ b" T( d! {& | word_timestamps=True, ; F; {4 p3 {( f1 P
保证了你能拿到 word,否则是拿不到的
5 N2 u( A+ e& `3 ]8 z initial_prompt = "Hello, welcome to my lecture.")- Z/ a9 b$ B/ x: O
保证能尽可能准确的断句 punctuation,但是不是决定性的。
A' A# X0 K- N/ f2 o4 x$ D$ j1 s: z其他参数可参考源文件:! v0 z( l( V! Z r3 _
https://github.com/guillaumekln/ ... isper/transcribe.py X3 |/ U& ^1 c" |, S
152 def transcribe(
! t# W. a4 b3 j7 y8 j! c- y从源文件你可以看到是支持中文的句号断句的。
8 t( t4 ^0 L" K; g% M& y* b ], y; _8 p. ?# w3 Y! h# }" U
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。( ?( t# x- l/ M% ?( n. o; n6 x
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
+ f" n- F' f; W8 l. y8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ f. y# u" m* E7 p2 r
U' S) d1 `& L% G$ y4 E1 u! w. a
. b. h. q! y/ l* Z6 y5 K! U8 `+ K1 a8 c+ q
|
评分
-
查看全部评分
|