|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
4 J4 ?9 R7 Z9 t; ~5 Z' e
: R. P; c1 a# I+ | B. K; _借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。- b1 T& ^1 X7 j- q% l% G
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。 [& N" s% E5 ]& k. }: a9 O: }
----------------------------------------
# r$ p5 [$ s+ b显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。& V2 H9 d9 e6 g( r+ O5 ^
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。4 ?/ m' E E* r6 H9 W S! ^) v, g2 m
----------------------------------------
$ ]# i/ s- @( ^6 X( [https://github.com/guillaumekln/faster-whisper( E) O5 E7 O7 C, n5 e5 F, U
安装如下:
: Q% Y1 p0 `& q% f' b- @1, Windows 10
5 L7 `0 K1 I, p9 g B4 {2, Python 3.10.11- v4 j# I( V. m* ~1 X
3, CUDA 12.1. G0 J3 h' \& g" \& _2 Q1 i
4, 在python 3 中安装
; V% X7 D5 U" Z npip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 G6 W3 J- o1 t0 ?+ `; w
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
1 \; Y; a1 Q7 M0 g% d( T5,pip install -U openai-whisper
' i2 a6 u* x6 i, z; b4 U这是向whisper 致敬,可以不装+ f" F) O1 S* k1 V
6,pip install faster-whisper
. o$ } Z+ g4 ?. v% n/ Q5 Q4 c----------------------------------------
4 n, ?8 U0 O7 [0 K5 dwhisper 我用的命令行,faster-whisper 我用的是python。' x. \- \ S5 V2 v* k% t, n$ a5 T+ A
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:7 ]; _- h `2 l
. R1 V2 R) V0 D# _
----------------------------------------
W0 L8 W+ m K, A. b6 I4 L" i5 b! y6 a
from faster_whisper import WhisperModel8 q8 ?9 |2 B0 `# Q4 z
Y' Q I; T: g1 @+ t, nmodel_size = "small"
0 V1 q. [& A0 ~6 l3 b+ \; e
5 _$ q1 j% y" b- Umodel = WhisperModel(model_size, device="cuda", compute_type="int8")3 ^/ p8 R+ [; Y( Y: Y% P
: b6 B2 e) k% q( ^, o
segments, info = model.transcribe(6 j+ H$ k/ ~7 F% Q& G2 \8 H
sourceFileName, & t: |( W0 [) i
beam_size=5, 2 ^6 C8 ]0 D8 `' n8 U
language="en",
" @" } f# a3 u task="transcribe",
5 C5 l/ g5 e% ^ g9 D word_timestamps=True,
6 ~$ B" l9 t3 y- v5 ^ initial_prompt = "Hello, welcome to my lecture.")1 m n8 h+ Y& b9 k G: N
2 Q2 U, I3 i# pfor segment in segments:1 [" f4 p" \' I$ i& H7 j, s
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
* F+ `. T! e ^7 Z0 E
7 ^' B" D n2 w7 g' Q: F( C/ Z1 Z for word in segment.words:2 [5 h1 }6 k# j; F0 L
6 r! u3 b: i) Q1 ]+ T1 V$ ^
----------------------------------------
5 {6 G. o3 A; ?8 J4 p! ?
: e% T2 G" _/ G- F- r代码说明:, \$ ]) `4 b$ \) L/ j- a- [
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。, B/ t; \2 f4 i; |& K+ I
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。4 K3 u* m, A! B8 }* k
2,segment 本身是很粗糙的,做字幕勉强能用。! w: U3 t0 [, j+ K e# M
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。3 e ~2 ]" u: C& w% ?
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
. |3 z3 m$ q5 O& @: r$ Z! X比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。. G% ]1 W3 q; e3 E
5,model.transcribe 中参数说明:+ D7 e- M' {' P+ W) K0 E
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
5 W# A a) A3 H$ P其中2 b _# y; j8 m% P
word_timestamps=True, 9 d4 z# p8 | r1 ]% ^# ]# {$ ?+ l
保证了你能拿到 word,否则是拿不到的
# }# Q4 P8 C* z2 ? initial_prompt = "Hello, welcome to my lecture.")
+ _# W9 k4 y- B. d$ n. r/ Z+ k保证能尽可能准确的断句 punctuation,但是不是决定性的。
! y) d) _$ h$ B* Q2 V其他参数可参考源文件:' N* D: b- n- F' Q
https://github.com/guillaumekln/ ... isper/transcribe.py
& L) l# i9 X) g* @% {) K* I152 def transcribe(
& \; {: K3 e5 e D从源文件你可以看到是支持中文的句号断句的。5 X* s4 y0 z* a# K* m
, {/ f# N* x I* @6 b/ y: g+ Y' R6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
' Q# N+ P+ C# b# Y3 Q2 X) Y0 w7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。: D0 p5 a+ `' Z x3 [& G) Y2 y8 ~
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。. G5 b) f X/ s# T" Y
- l: f3 n4 X1 z# ?7 j; {( L
: k3 k0 o2 k5 L5 S7 ~
* _% z5 F& ~4 ~2 e/ U1 U0 x5 k |
评分
-
查看全部评分
|