|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
$ S) H5 m5 S- ^% x/ p7 J6 p5 b4 B9 T0 m3 T1 J( H/ Z B! G8 f0 l
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。7 s& y7 f8 q* e5 a6 }+ O
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
' ?5 J. u3 t3 ?: t: R# o. V----------------------------------------0 s; j2 a# N: B' g1 u
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
7 _" z0 x ] w' {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。( c6 t1 Z# i3 \* y, {. p$ a4 l: l
----------------------------------------
9 u+ e2 i. O: f {8 O. k4 _0 Zhttps://github.com/guillaumekln/faster-whisper7 t! p* B2 k2 ? U( A
安装如下:1 I9 P3 D' F) H' s
1, Windows 109 p( A/ n% Y) M7 i p. S
2, Python 3.10.119 a9 l6 y* R/ \/ n2 r
3, CUDA 12.1
! k' E- f; z) I: @4, 在python 3 中安装
$ Y" M( F- m" fpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117* }6 c) C7 R2 A) C q
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
$ w! I% A+ v% `* o% x+ A% \5,pip install -U openai-whisper
* m4 Z0 N' {6 E; c0 F" d6 k这是向whisper 致敬,可以不装
/ o6 w$ P) ^: I/ F6,pip install faster-whisper ]" r# d) O# t f5 \4 w& m
----------------------------------------
# u: @2 K) a5 qwhisper 我用的命令行,faster-whisper 我用的是python。2 \! ?; p- \: r
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:) `, j6 }% r+ s: A
8 u# c W5 W5 y9 [----------------------------------------! \* G' e, |: c0 s |2 ~7 I2 F
9 ^* S) h' r% T' a! y$ ~/ pfrom faster_whisper import WhisperModel
. b7 f, a* @' l& M" T4 W! m: Z# F: H' T' f9 g* S0 Y' C
model_size = "small"/ f5 Y& W$ G1 h. V2 ^
9 `, x! A4 I- u$ fmodel = WhisperModel(model_size, device="cuda", compute_type="int8")7 J, a! Z. P9 c
* T [# W+ q& csegments, info = model.transcribe(
! M( I5 U2 Z* e# e L3 W sourceFileName,
' B+ u6 G% h( s) V, i! A" k6 I/ K7 D beam_size=5,
3 U+ p! F/ y O) W: D: B language="en", ; o( b# r7 x; m7 \
task="transcribe", 4 P& I4 W2 M0 p2 }$ O
word_timestamps=True, 0 {) t/ q% x* C- c8 s$ T
initial_prompt = "Hello, welcome to my lecture.")/ E! ]5 ]' V1 q9 M- b# H
) k9 M# f0 T: L+ {4 c# r3 J
for segment in segments:5 ~1 k- H4 [& m- t4 y% |. ^; O
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- e7 X; ]* [2 X/ `7 F$ d# f( A
0 X4 Z- L4 h _# O( ?- j$ ~ for word in segment.words:
! b6 ]; V9 U* a2 \: [7 N
7 R5 i, ?9 I: `% V& \3 N---------------------------------------- ]+ k W" G% ^8 ?' E* Z
0 U4 N' M c# h, ^! \# c+ k3 N代码说明:5 }7 i1 R! b+ h. A
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。* {- y6 S6 m/ x8 r9 Y1 U& w# U
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* Y1 U$ ^. w; Q3 F
2,segment 本身是很粗糙的,做字幕勉强能用。
2 F) D& s1 t6 \- C1 k3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; u- ~5 x5 M' T9 L6 ~0 |; v* [4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中2 Y( C% r+ F& X; K! i: H2 }
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- O7 b5 e$ e8 C% I! L/ A5,model.transcribe 中参数说明:
0 T/ K7 x, }* Z v' h2 Q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
) a: V1 m1 o0 \3 O' h" m J6 {其中
5 D+ J# q/ z& ?; M6 e) o5 _ word_timestamps=True,
6 z! I( g" H* `# G, C1 O保证了你能拿到 word,否则是拿不到的
3 h4 m2 }+ D* V4 d- G initial_prompt = "Hello, welcome to my lecture.")
8 z+ t2 n3 b+ e L( t2 h( A, U0 N保证能尽可能准确的断句 punctuation,但是不是决定性的。6 T Q: d2 z& T* r4 [! {) e$ e/ i
其他参数可参考源文件:, ^/ P4 b" E3 c
https://github.com/guillaumekln/ ... isper/transcribe.py' m3 t, G/ ~0 [- |1 ~6 Z
152 def transcribe($ `8 `9 h+ I* ]2 w
从源文件你可以看到是支持中文的句号断句的。
6 R4 Y$ M$ w8 V# t0 `; \- D/ w$ q
4 O% W$ W, v- {1 V3 P* @6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。9 ]* y) t4 l' D% P
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 H4 ]: B- u0 B a8 }4 }6 c# b; }8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。) O$ T! N. f; e* `! D+ s; G9 c
+ G8 e" I# C2 F2 B: ?5 D2 w
: ]3 n5 r. I) s# U$ ~0 f/ n4 n8 a- @9 g" E/ ?3 a
|
评分
-
查看全部评分
|