|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ' {; A9 P/ c* _" g) F
5 W3 u7 D+ z3 T& a( h
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: {) e" e+ t! d效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。7 Q, d9 G0 B. b0 W# S
----------------------------------------
$ }4 U; X* [( X1 g显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
, I( A' w' p- }9 D. ^, F在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 u5 ~4 b; T5 {! x0 H6 ]----------------------------------------$ b; W1 F+ j$ i6 F
https://github.com/guillaumekln/faster-whisper
$ a+ H. M/ T* Q5 U安装如下:
; ^" s [) P0 \( J7 K1, Windows 10* j4 R# h: l% Y) r. `
2, Python 3.10.11
6 d4 m+ w" g# U% r0 I3, CUDA 12.19 H* }4 M) A w; Y t9 R# [
4, 在python 3 中安装
3 D2 F0 Y; H1 Vpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117, c1 s, F$ v1 Z) }# \. A! c6 d
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。% K' D7 Z' Z8 D
5,pip install -U openai-whisper
: F5 O4 C5 I/ W- `) p3 ~这是向whisper 致敬,可以不装
$ J0 r/ u, W- {6,pip install faster-whisper" s# x: V5 A: B2 V5 z3 U
----------------------------------------7 x) {" H f0 q- _% s
whisper 我用的命令行,faster-whisper 我用的是python。
+ K# Y3 e# L) g' c0 w* _6 q1 G下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:0 w8 d; V+ f2 ~$ C" u7 t* `
- O' i* c* F" I, x, J! {
----------------------------------------
& Y' N) H; Z/ M$ {! x
7 E' `; X) O( Q5 k M+ w5 ?7 K- `1 ffrom faster_whisper import WhisperModel
- S; e" u% S; Z) h' L7 @$ s: h, C- m+ T. t0 ^/ e% j
model_size = "small"* w. \- F T/ x' e m) {
3 t0 Z; | I0 S& M! n
model = WhisperModel(model_size, device="cuda", compute_type="int8"). G2 h' L! k2 ^( I6 v, q$ B* u
1 L& |( ~. U% y+ A0 d' j3 c6 @6 W- Nsegments, info = model.transcribe(
& H, N* n2 v$ Y! G sourceFileName, * U4 N& W% k+ v. F
beam_size=5,
$ w3 t" X' N7 l5 q) f, l language="en", . d. \' H! U8 g" l% s
task="transcribe",
* N1 x8 m# V0 O, J% l7 z# A. R! ~ word_timestamps=True,
. u5 C- [! E5 A* f- A8 m7 ] initial_prompt = "Hello, welcome to my lecture.")
/ l0 H+ S- a& k& w" D7 B O0 W4 L1 u! a0 l" U' _( N
for segment in segments:
' ~6 {+ e% k* F8 q print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
0 {! ]* G& ?# Z% {& O
- Q z$ X2 q1 m0 M; x+ z for word in segment.words:
7 c6 i/ R9 w3 j6 W! x
# {1 |4 U O3 f/ Q, B----------------------------------------! |0 x2 m9 m2 c: z3 n6 {
|% Z7 ^( I4 c) _
代码说明: z# i' r& e2 `. g0 W4 d
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# ~ z1 P x* N但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
& c* n+ T1 I' O2 Y' O2,segment 本身是很粗糙的,做字幕勉强能用。
& n; P/ \' D& m% Y0 o; q; k; d+ a2 o3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。, W" w0 N8 d1 g
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
6 Q% @8 |: I# B$ _比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。0 m6 J$ i3 k8 d5 a
5,model.transcribe 中参数说明:% K- {. |: ?, U6 j ~8 x+ A1 `9 k1 n
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 o) z- [ D, f# y. i# I其中
+ R; V. Q3 `; p& Y4 @, Y word_timestamps=True,
" a( }. s1 g( W A# T9 G保证了你能拿到 word,否则是拿不到的
+ i8 | `6 b/ l9 n3 z- } initial_prompt = "Hello, welcome to my lecture.")" G% U5 F2 G+ x- n
保证能尽可能准确的断句 punctuation,但是不是决定性的。, G2 A9 e5 g( r/ r) B& B
其他参数可参考源文件:
) t( P+ j2 T! q {9 R6 V. f0 `$ Chttps://github.com/guillaumekln/ ... isper/transcribe.py
, o* T, |6 P' Z6 ~0 D152 def transcribe(
7 d/ I$ n1 q$ X) t# ?, K0 I从源文件你可以看到是支持中文的句号断句的。
/ P5 q7 X& e- W8 ?9 }. P( N
! y4 y8 o" k9 {( O) j6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
2 \6 \5 _$ L4 L# p" W7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 V5 V6 h5 x! F& c, I5 }8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。9 O+ p) ~: G# k+ X s3 Z
' B$ [, u% I! h6 I V8 C
' d. i5 p- ~* B/ @( [) O9 l
9 u$ p( i' ~. j; ]* B o9 A" R ^
|
评分
-
查看全部评分
|