|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' L* D( I, }% h/ j0 H' l
% ?1 c h _1 Q1 G借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 a3 t0 t3 G; L6 E' `, n! d- L8 Q$ Q效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。) o6 ]; J' k2 }* [2 i$ s) P8 R
----------------------------------------0 a+ e# S( O9 j( s% r
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。) T2 O1 y% H3 ]
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! L7 v0 j: |, ^: D/ X- r& C! l----------------------------------------
7 D' n3 ?# O% Q+ `& }1 ~https://github.com/guillaumekln/faster-whisper
8 M" Y; g; H: p g: l3 n% g" Q: l安装如下:& }. Z% u4 J5 d# L+ ]1 }3 B: l
1, Windows 10
* F6 v& F5 F4 S" s! T4 w0 O2, Python 3.10.11: w, T& A; w5 t5 }5 @$ H- o% \( i
3, CUDA 12.1
7 [" U4 v3 ~9 M5 R# B4, 在python 3 中安装! U x' `& t" Q" q- S
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1179 d4 d+ T4 j; t6 E% y; c$ n
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. F0 F# w A+ e& p5,pip install -U openai-whisper
' T/ X7 |9 g" r这是向whisper 致敬,可以不装
. d y. _9 S+ V1 z; O3 G6,pip install faster-whisper
# q7 n0 l0 ?1 S% }) T----------------------------------------
* m' @- A& p' O6 A4 L& \( `whisper 我用的命令行,faster-whisper 我用的是python。9 F3 O# j% j& l
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
- h4 E8 x2 T# D0 ?5 H
5 I/ E6 s0 o4 {5 k. e9 J: T----------------------------------------2 K! @: [' D/ i# b; T4 k5 _0 e
8 i! j# O$ v. d& b, i
from faster_whisper import WhisperModel& D4 h; O2 ?9 \3 e4 g, L
9 K6 P; Y3 ], }- H! l% U' f
model_size = "small"
# a6 ~" F1 V/ c' H5 G! {
2 H5 x" J$ `. e, Q2 k9 gmodel = WhisperModel(model_size, device="cuda", compute_type="int8")( q4 B) b" O# N3 B
! F/ e2 {% f7 l9 ^$ Ksegments, info = model.transcribe(
! ~" s9 {. ~7 D5 ? }+ x& P sourceFileName, - C3 R }; ]6 Z1 l, w" f
beam_size=5,
( N9 F7 V* S/ G c ^* G( f language="en",
$ u% y# C1 k/ l. ?# k task="transcribe",
$ N! u/ V3 p9 {# G( j word_timestamps=True,
* s$ G a7 A5 ?0 t initial_prompt = "Hello, welcome to my lecture.")
3 |, w8 i6 M" }8 C% f8 ]
0 W2 ?! d) I5 A" o' Wfor segment in segments:: ]: P" ~4 [2 E. Z6 |
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) h _& G8 W C" v& N. E( W% e
; `; C. K& F0 v: j' C# u. X for word in segment.words:: _: t. o) G1 V/ ]+ U6 h( D1 v: j( D$ c
" s6 d0 _+ t5 |" |4 O* L+ ]& x----------------------------------------1 P/ t G5 p c" |: D% `
5 q6 t' _7 Y M& C1 V- l' U# C: `代码说明:
; w# G/ G6 r) C$ T1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% n$ e( [ @3 H* @3 {
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* [$ f# s* Z# L2 @' E5 ^8 [% I
2,segment 本身是很粗糙的,做字幕勉强能用。3 {; x5 O* E& s* z$ C+ R J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
% Y: X* X% O. h7 L2 y, O8 m4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
. u$ ?* h5 P& W/ H0 w3 |比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
+ @) |8 [8 O; z8 G7 n7 @2 [, u5,model.transcribe 中参数说明:" _& ?3 n- ~, U
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数/ |) p/ Q7 W: T# p
其中 D# M$ P3 \/ Z
word_timestamps=True,
) h3 |" A. K3 g9 T: ?保证了你能拿到 word,否则是拿不到的
7 P E2 Q" u9 J% H8 \/ R* \& G& d initial_prompt = "Hello, welcome to my lecture.")( H3 P# }1 K, S4 `1 r
保证能尽可能准确的断句 punctuation,但是不是决定性的。/ c1 U5 r+ J. p4 y P7 g5 `
其他参数可参考源文件:
- |0 A, L; ]9 V2 \! e3 r8 A8 Ihttps://github.com/guillaumekln/ ... isper/transcribe.py
3 a' C4 f8 j; F# B/ B3 h152 def transcribe(
3 r* e* s, z0 e' `9 _! d& ~& g从源文件你可以看到是支持中文的句号断句的。7 g3 M1 E0 O: r
# T' Z9 ^" o2 p) i0 X8 v$ B! }. B) X! ^6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。/ w3 f5 B9 d2 l7 ~
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。/ Q/ U7 p3 o- g) A: @* V5 U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
& r" z0 F9 P+ A) o y6 B O, i
' D8 B" s$ I4 n1 w2 `% { 4 J) ?) @1 k& S* L. U3 h* Z
& F. k" D6 r6 P$ M* E1 G |
评分
-
查看全部评分
|