|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 - \, ^7 l5 e3 p0 N+ S
2 h, O) G1 Y) u T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。) l4 f) o8 J4 v& a% y
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。$ h2 H* b* m* U7 h) J _4 R
----------------------------------------- @4 D3 S) o5 u' S+ d
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。8 K% y, L, z1 I5 S3 R4 O4 [
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
9 C/ e( M! y# a1 b5 k9 k----------------------------------------9 e2 h% w3 g" P( {/ Y8 v1 X3 h" G+ p
https://github.com/guillaumekln/faster-whisper" a1 \4 ?/ T" m c1 R
安装如下:
6 f. K3 _. @8 C X5 R5 ^1, Windows 10
2 V8 z2 K9 I0 h l% \2, Python 3.10.11
! x8 {: E+ K4 F. F3, CUDA 12.1
* z* U2 ^2 Q# }/ F: K3 p4, 在python 3 中安装
) P* B9 t$ D8 `, w& Kpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' t A8 @5 f! _这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& I: Z) Z" M' Z# G) Z
5,pip install -U openai-whisper
( ?4 ~* A$ f0 u0 A$ I7 J这是向whisper 致敬,可以不装* O' O/ W, w; j( J9 p
6,pip install faster-whisper' X) q: T$ J# M4 Y
----------------------------------------
& l9 A8 D T7 ^% \$ b3 e7 Bwhisper 我用的命令行,faster-whisper 我用的是python。- {( g; m: g" h* G4 D
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 h0 @# _& n4 l' w$ f& P$ M3 Q2 u) A; B7 F% ]7 O$ c
----------------------------------------. Y2 @5 X" g* Y/ I( G+ p
6 d3 `& ^& B9 `% Afrom faster_whisper import WhisperModel5 d$ z5 ?7 s* H. L9 L! Z
1 L' o% d I6 Z5 omodel_size = "small"' Q8 {: L4 j; X# M
/ p3 z1 r, p2 q9 R* |' Q) t
model = WhisperModel(model_size, device="cuda", compute_type="int8")5 i6 X- o: ~1 Z& r O2 V
$ ?% v4 F2 _- R! D$ k
segments, info = model.transcribe(# d; w+ i3 a7 I" M
sourceFileName, ; P+ b3 K/ E8 F& d/ B0 L
beam_size=5,
0 l4 Y- k' o @4 J: H4 e language="en",
) Z" R6 K1 z' W( P task="transcribe", ( [1 R* _* I1 g) [
word_timestamps=True, 6 l5 O1 h# @ X. M, j# p; r
initial_prompt = "Hello, welcome to my lecture.")+ q/ \) \7 \8 ?2 M$ w& Z
, t/ i7 K" J. \9 h6 sfor segment in segments:
+ ?7 C% b$ c3 Q/ f7 z. n x print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))1 z* J" a+ i- X- S" s E
* }, w! A' R- q# D0 v
for word in segment.words:% O: P; E4 v2 g% M0 V7 [8 n
# c) s# k+ E& ^0 m" X/ L
----------------------------------------
. ^: b) }1 S8 ^. j# | D+ F
: n% I7 J' F9 `代码说明:
0 U( Y3 s b ?' n3 k8 d4 z1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
/ p3 d0 y/ p3 _0 _1 S5 f但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* A0 [/ l$ P6 }& y6 E. G2,segment 本身是很粗糙的,做字幕勉强能用。) y6 f5 ^# i! O# O1 {
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。( S1 ~, n& `3 L- E2 Q" O. O! a% B
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
6 D2 i+ V% ]* S比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
) D) x) g$ Y6 M" `8 b5 Y! @5,model.transcribe 中参数说明:8 R: v9 X7 |1 i: Z1 h
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 r' u' E- `: h; e$ t: o1 A6 _6 O其中
1 F, {1 ?5 a0 r, L. w word_timestamps=True,
G* w1 d5 ?4 E2 `6 `3 e! h7 Z保证了你能拿到 word,否则是拿不到的 Y" R+ A+ w1 \" q' A& x
initial_prompt = "Hello, welcome to my lecture.")
: q( U) P' N+ F# g4 D5 l$ `! g保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 g, u" {; @; W9 ~其他参数可参考源文件:
" l0 o3 S- f8 @$ Chttps://github.com/guillaumekln/ ... isper/transcribe.py
0 p3 v* T7 `5 ^& s6 C2 n152 def transcribe(* N/ _1 W- L# Y+ w
从源文件你可以看到是支持中文的句号断句的。9 R7 u. Z f/ C! H( \ X$ |$ ?
7 E5 w, y6 V' _6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。- Q" R: I4 R, E+ ~9 | x4 b) B
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
8 \9 ]) z5 i, n" H2 I8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。7 F# D; }- Z' P) Z; s; h. r
5 @8 }% t; Y. ?3 x
. h& R* e8 r! s/ [) y: b+ l( a8 f9 n, x
|
评分
-
查看全部评分
|