|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 t) y" v5 Q: S/ N; k
$ _+ K4 K4 w# ]: U6 @$ _借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 r2 J4 T, x1 j- W* ^效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ @, h* s$ l5 v& \3 g
----------------------------------------
* Q. A3 b% } K' H* j* h显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。( n8 `/ Y1 K8 D. { b
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 E) N2 d1 _4 F+ w& Q. Q3 i' n----------------------------------------& l; T. H2 I4 j5 J
https://github.com/guillaumekln/faster-whisper: j7 R& P- A$ G$ @8 j% J
安装如下:
$ ?+ A m7 v/ v( H, z1, Windows 10
$ m$ @- x; N0 F& o/ {0 e! @2, Python 3.10.11, C. ]3 [1 j5 g* @+ E
3, CUDA 12.1
9 [; {+ x+ L/ B8 I% V0 c% Y' m4, 在python 3 中安装
. l5 p7 b4 L1 E/ T, Rpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 y) J, w1 c2 }( P
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ u8 Q$ G' _9 J3 r8 P5,pip install -U openai-whisper8 ^# U9 j2 H( e' O
这是向whisper 致敬,可以不装- ~1 I4 n$ G5 O/ v1 m6 b/ `
6,pip install faster-whisper
# H5 k6 i3 i3 }: r3 [4 x---------------------------------------- m( Z* \2 a4 p6 }
whisper 我用的命令行,faster-whisper 我用的是python。
" c) |4 G+ c9 p3 f下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:% a+ E. [9 w: G' b7 j: \( T- ^
M1 S, V" W' o( B' V' b----------------------------------------8 h5 ^" Q8 ~9 L9 H3 ^) @0 j/ Q
5 ?$ k& {' t" V, i8 ` Ffrom faster_whisper import WhisperModel
' P' e5 g& d" ?
' @# D3 l. U' I; c3 E- P1 qmodel_size = "small"5 G3 b5 Y, S6 p) s
, g7 Z& V- P) Y' C' K: w, s; k3 ]1 E
model = WhisperModel(model_size, device="cuda", compute_type="int8")
3 u. S H) c9 `! P0 f( x2 M9 Y1 q) a0 P
segments, info = model.transcribe(
) o6 O) o- V L$ c sourceFileName,
9 T+ G9 J( d( d7 p k3 M2 S beam_size=5,
* {9 t% ~+ z. K" w* \( P) b5 E) o language="en", ' @1 x% g& h* t8 F/ s, I+ k
task="transcribe", / c) y% a8 F. a+ {% V/ d
word_timestamps=True,
. ^1 C9 @9 T0 W9 X9 y% a& ] initial_prompt = "Hello, welcome to my lecture.")
% [) U6 v' u6 Z; p& \6 q( D. o! V2 \. y% w
for segment in segments:
! d& |: _ S. S& x r O print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' X) Z- K( o) @$ F* _. D1 j" F. k' T* {! j- C$ W" ~
for word in segment.words:
6 r8 F! u; A L6 R" X, m ; o* A: j0 f! A& N9 w
----------------------------------------& e; U$ K6 P0 t7 k
$ i- _! y/ X* K3 Z+ g代码说明:
- z$ G) f! b+ g& z o; x1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。2 N, D1 {. e2 R* C
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 }) j! g' F+ R5 u
2,segment 本身是很粗糙的,做字幕勉强能用。" p3 p, ^: i( u/ H
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
, u L7 x: ~, {( A' T4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中1 F$ T6 f G- `0 Z$ l$ y% g
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。: N; o. [4 `( {' L. i& Q
5,model.transcribe 中参数说明:
0 b8 O7 L. }# a" \ B# v1 Y8 [你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数& |9 f8 ]9 q6 x8 q! V9 D: A
其中
! M+ U/ R9 s4 ]- s word_timestamps=True,
$ p B2 n2 W% C% q. k: t保证了你能拿到 word,否则是拿不到的! }' K5 A% a9 V
initial_prompt = "Hello, welcome to my lecture.")* ]" ~8 P+ p4 I. t
保证能尽可能准确的断句 punctuation,但是不是决定性的。" |8 }1 m- ?1 }3 q2 I, F
其他参数可参考源文件:; _& ?. R E5 G" D
https://github.com/guillaumekln/ ... isper/transcribe.py% y2 H, A6 b5 k& g+ Z' k: h% O
152 def transcribe(' O9 i( l0 E9 L$ X0 G6 H
从源文件你可以看到是支持中文的句号断句的。: y4 K" M) s& ?5 ^ K
: @' U( g& O/ u" V6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 Y5 ] q7 f' t4 ?$ m, O0 W) {+ D4 L
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# t7 B/ ?2 A- m! r3 y+ L
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
% B/ s/ }* T" [' U# `5 R* L4 A, m7 c; e* {3 _4 _
2 [. ~$ R4 D" i
3 q9 R: @" l' r9 i4 l4 c3 l* Y
|
评分
-
查看全部评分
|