|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' N& z# o0 Q2 O, }! W: r0 y% H+ h7 \
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- K# `: S$ M) y) \效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. W$ N" Q8 X2 f) l# q7 B
----------------------------------------
( p1 B- e" [5 S; I7 B5 V* [9 i显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 w' o" a/ {5 a/ s; ~8 s在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- u) M! e# _+ I2 D' e$ l
----------------------------------------
* ~( f- b# q/ @https://github.com/guillaumekln/faster-whisper, J7 c$ w1 Y/ o
安装如下:( g+ Z! O& R$ {8 {' s
1, Windows 102 Z* q: P* W( Y8 v
2, Python 3.10.11% v! d# i8 A- ?: G9 ?0 g8 \* J/ B
3, CUDA 12.19 S+ e- Z a. Q a( }+ V/ [
4, 在python 3 中安装
9 B% k6 p% `* [8 e- _pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1174 i. B/ E w& V# x+ a' R D E
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
N! G$ l0 V8 G8 T! n" H5,pip install -U openai-whisper
0 G- [7 S8 T+ B. ^ L, ?这是向whisper 致敬,可以不装1 T! [- B/ \% ?
6,pip install faster-whisper
) U. Y# K- t$ @( |1 E# t----------------------------------------
: }# c0 }0 v: E4 Pwhisper 我用的命令行,faster-whisper 我用的是python。* ]* |! p* ?% r9 q2 s1 y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:! F; `/ t- i+ t f* d
, N [7 [3 M; U; f4 H: V+ c* V----------------------------------------
) n& @+ t5 W! P7 @: R7 z
! A. E. w0 I: R" k" }from faster_whisper import WhisperModel
. ?( h$ M5 e; G' r. I( y3 n1 Z$ _. O+ U- y6 H9 _
model_size = "small"; v7 B( n, h* T' l9 w
) H, |: a' U* }2 n( \% `8 _model = WhisperModel(model_size, device="cuda", compute_type="int8") T4 |2 U; v( Z. e/ h$ p7 V
, X* Q: w, n' E: H
segments, info = model.transcribe(
: Q8 W: Q5 t1 L- J6 |1 D+ f/ J7 c0 K sourceFileName, 3 ?0 Z( l K! A3 S' A) M/ j
beam_size=5, 4 O2 b; _. w) V4 S- L# ^ P
language="en",
* [# \( T4 M: F# c% g task="transcribe", 9 z F) K" g# t4 S5 F
word_timestamps=True,
2 t- j+ n ?) ^$ K4 s initial_prompt = "Hello, welcome to my lecture.")" F5 G. N6 g& g: Z' U6 ^+ P" B, I7 y
: e% k3 g8 R& Q' f3 ?) C Bfor segment in segments:: I/ Q6 c. ~- w9 L6 q
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 |, \! o: F/ @8 u9 I3 ?. m
: T4 j, y4 D1 p2 p/ a+ x2 t8 r
for word in segment.words:1 c7 q" T2 A2 K6 D) q- t
+ V" R1 m0 Q+ Q+ f5 d" `3 f----------------------------------------; \1 A, g0 U0 P* U3 J* ?3 C
6 r0 {% X6 A9 Z: f) O代码说明:
4 ]' K2 `* K8 s$ y4 o1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
w: Q9 |9 t% r# Q3 T- J/ j; A但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. G/ x5 p; H& ~4 B. N5 i5 g5 h3 a
2,segment 本身是很粗糙的,做字幕勉强能用。3 {+ J. q2 R6 y8 i2 V* A
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 W* t) V+ K6 D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 k& t e4 o6 o& L8 T% W M& d- R比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: y9 O, V# Q' [" `6 e8 A( L9 U5 G5,model.transcribe 中参数说明:
w3 |6 `4 r" W0 {6 U你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
* X) T% h6 i4 b其中
; m7 E) Y2 H$ d' K4 W word_timestamps=True,
( w& K/ o3 A) V: k, @6 `保证了你能拿到 word,否则是拿不到的" c$ _6 R p( G8 C
initial_prompt = "Hello, welcome to my lecture.")
: }7 o- W0 Z5 A M, C1 K, N* d保证能尽可能准确的断句 punctuation,但是不是决定性的。$ L; M) l: Y! q. o
其他参数可参考源文件:& ]9 h9 D5 A% C$ R8 X+ ?
https://github.com/guillaumekln/ ... isper/transcribe.py; Z( ], C& k) J+ F {7 `
152 def transcribe(' w3 n6 W( l0 i4 a' L
从源文件你可以看到是支持中文的句号断句的。) m. ~+ X+ S: D! }& R4 m4 M
4 e* l+ ]" E4 t; ~5 }6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- f& r0 ?6 {& m1 M7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) E# H5 c/ {- {' O _; F
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
3 E; A- ~" p) q( a) t2 @; W) i
& k$ ^4 \' i9 G5 N+ L" q1 G* M * O G% p% b- ~) h$ J
2 B0 n: l+ N! b, I) L |
评分
-
查看全部评分
|