|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 . o0 w! K; _8 C2 {4 V! E
( s2 ^0 [# D) i2 K. A1 y- f
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
2 z1 U- j" o/ t& J7 q2 C效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ G% J( j+ ^% h, g9 O----------------------------------------
" k6 t; w5 ]9 O1 ]( C) h, _显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。. { K7 T+ s; }3 q( ~4 P
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ o+ `7 ?3 [. z( x( ^5 X----------------------------------------
/ U* E5 K/ w5 w, ]https://github.com/guillaumekln/faster-whisper, Z2 T C8 { o# a
安装如下:% _& P3 M. Q7 y6 N1 J) R
1, Windows 10& n1 W8 ]% p8 e" W5 M
2, Python 3.10.111 l: U' z5 @. ?( E5 t+ n4 Q2 h
3, CUDA 12.1
# W$ P2 U/ M: G9 n) M$ S- O. a3 X4, 在python 3 中安装* G$ w% m3 Y& ^
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1179 U0 V& `- P2 A
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。 a0 E7 x9 Q0 R/ s
5,pip install -U openai-whisper
- p' i5 N. m1 g8 t5 Z7 j8 R这是向whisper 致敬,可以不装$ Y$ P( ~4 |! d; d- c' I2 G+ i) a. C
6,pip install faster-whisper, Q4 U+ n9 ^) h( r
----------------------------------------
1 d% y: k7 R# t" w( n5 t# r% Jwhisper 我用的命令行,faster-whisper 我用的是python。0 J# T$ D4 e, `3 q9 L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 E# ?( N2 X9 K) V; `1 k+ h
/ V% _8 }. e' j# |4 U/ w! \) [: F* o----------------------------------------
: e; ?% O3 i- p4 ?$ f+ F Q O, z) L1 C( f3 z. M2 E* L
from faster_whisper import WhisperModel: c0 r" f& N& F2 h! G1 L
9 Y+ c* g) W8 Q! f/ ^1 M
model_size = "small"/ y* V: h$ _! H& C
; {, r1 ^# U* S: u& U% X9 g1 Xmodel = WhisperModel(model_size, device="cuda", compute_type="int8")$ c! |* w4 t/ V/ E
0 l V! y+ R" ]& b6 m+ U+ C% ?% ssegments, info = model.transcribe(6 e$ C: u! D" B9 a8 C
sourceFileName,
! [& _, s8 c0 A2 U0 ^% ^( q beam_size=5,
$ E3 k! D5 ]: J language="en", ) |" S1 Q3 \* {# s
task="transcribe",
" T h( g @& J o4 y word_timestamps=True,
, {; Z' m7 z/ h8 @; H initial_prompt = "Hello, welcome to my lecture.")# U# ~4 X+ Z1 u- o" I
$ p/ J* s( Q' s$ z
for segment in segments:+ @, A9 B% ~7 d2 c7 o
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))1 u' o9 i+ s( T6 u# B* O
: S6 G1 n: h U" B
for word in segment.words:( u3 f g$ I! @
+ ^8 n" U9 r* _' a. \: _
----------------------------------------9 b% H7 w5 Q `. V) w
4 L6 z$ w) v. R- c7 t# G
代码说明:7 a1 u, v1 p9 `2 S
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ h" J0 F3 m. b: C$ L X但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
1 [8 i& H) h( f- e8 y; ^( K2,segment 本身是很粗糙的,做字幕勉强能用。* {1 q2 ^ R1 [% x
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
. E: y0 n5 R2 y7 z4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中$ X7 O5 F. {8 Y+ Z8 \
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
4 |% V. ~6 Z0 ?6 b" E* ~* M+ K5,model.transcribe 中参数说明:
6 ?9 w2 ~ o' H/ w6 O4 |' t( |你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
- q# n; }& e3 c$ }8 o4 S L其中
& I X1 d! r5 o8 I word_timestamps=True, ( W" v6 y" B8 d; n$ n! w; e
保证了你能拿到 word,否则是拿不到的: v$ z+ ]/ @+ g7 D" B2 T6 V
initial_prompt = "Hello, welcome to my lecture.")4 Y7 l% y4 N9 i0 o: P' l1 m Y8 g
保证能尽可能准确的断句 punctuation,但是不是决定性的。" h* c, J( L" M7 l
其他参数可参考源文件:9 R3 `& e. M0 z1 l+ o# @
https://github.com/guillaumekln/ ... isper/transcribe.py
" _4 G& F: u0 u152 def transcribe(
6 A3 w5 L0 g. [9 }! F7 e从源文件你可以看到是支持中文的句号断句的。; x: y( P, Q; r! f
9 `! ^; i/ @: |/ U
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
9 K/ @- b% Q- P" I7 X8 s" L! v7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。& T1 e- _$ ?% x5 f+ O6 Y" {# @$ I
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
7 |& a( A& |& q& |$ R) v, h- d1 t9 k: j+ a5 b
( r4 b6 t1 Y0 t9 V# }6 W( |
* g3 V3 h0 p5 i+ a |
评分
-
查看全部评分
|