|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 B4 ?* ]7 a+ S; A+ p' a+ h9 m: r* p! ]3 v5 |* t+ P2 b/ R
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
4 D; ?0 o( e. `3 Y; Q效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. | d0 j( z$ L; s9 E% n
----------------------------------------& J) M8 L- J0 {
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
# g) e# d6 r0 e0 r0 x9 }在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" D! r% g' ^4 |+ D. v, z----------------------------------------
6 d- \; e) P0 r" ohttps://github.com/guillaumekln/faster-whisper: C/ g2 T: r+ S3 W
安装如下:
. U0 h9 H$ g4 m0 A6 X1, Windows 10* b" W9 w6 j( I y, O0 M
2, Python 3.10.11. @, I4 | A m) f' j9 F
3, CUDA 12.1
1 l0 H- ?* F7 z4 l) g" K6 f4, 在python 3 中安装
& N2 T3 U* {5 }: N4 xpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117) g; b8 h, I; j
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ E# G( a' _# M# E5 [5,pip install -U openai-whisper
9 C; P. [$ j1 q# l3 n* c+ R- j这是向whisper 致敬,可以不装
/ L, H5 d: C8 [0 v9 a0 B' S6,pip install faster-whisper- a. u9 m) o$ M0 q' c5 y$ k
----------------------------------------: i$ t( D! K% O0 D8 g$ M' \, s7 z$ `
whisper 我用的命令行,faster-whisper 我用的是python。# e; H9 ~, B: H% n" J
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; V* r( q7 W: D. }% g7 w4 ^1 [
! q! j" g! _, J9 M7 J! V+ o----------------------------------------, f: [: j c: ^
, B$ R3 }7 U+ C6 Q. u
from faster_whisper import WhisperModel! s _, n5 w! P3 w* y( J& Y B
' _" q F$ D1 L2 v2 I2 I/ U
model_size = "small"4 @+ u" c/ L* L! A
+ O, l' g' h- [( Emodel = WhisperModel(model_size, device="cuda", compute_type="int8")
/ ^0 P4 }- ?7 o( D
8 H& h' T1 ?" B& l6 I3 Usegments, info = model.transcribe(
4 c5 \0 o+ w4 {% ? t sourceFileName, 1 @' w' a8 Z9 L$ o% s7 m% b- S" u
beam_size=5,
* F1 _3 o- s* b; T2 R- t. J/ m language="en", & J# [$ [' F3 p [% \/ F1 L# \9 x
task="transcribe",
. j$ F3 W8 _' C1 w# @- k word_timestamps=True,
5 D4 q# K, ~0 W4 o8 T4 L initial_prompt = "Hello, welcome to my lecture.")
& F4 ^( C8 o3 W# e$ q( R* n# N7 [# {3 O
for segment in segments:
3 B( F: _5 S7 x( Z, |1 B print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))/ ~* t( L0 d$ L5 x1 Q) I
* M1 ^8 q6 H6 J3 t4 j% u Q for word in segment.words:
7 r$ A W& b! j9 O0 M% k
( V# D9 n' E& W% C----------------------------------------' P: a$ N6 y' r3 A# c
! G% b- |5 y/ k0 B* C9 a# e. U代码说明:
; [/ i2 V# r+ R0 W6 q$ L) o1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。9 v3 x6 @, N2 k
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。# o% Q/ a+ s- H% ]( f H" J$ ]
2,segment 本身是很粗糙的,做字幕勉强能用。
# a+ E. L: \: c9 s) X0 I+ J! [3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
/ Z5 [6 i4 { ^ G+ I3 G4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中5 J2 ~! j5 L% C+ b( I
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。8 M6 B+ a+ x- n; _& H! S" B$ q
5,model.transcribe 中参数说明:
3 B- c C$ Z' |% {/ ^) }. c7 ?你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数8 l$ q' P, p4 F
其中3 k; r- ^5 Z4 ^' @) u+ X: {/ M* S
word_timestamps=True,
! a( n4 r% x& I# d保证了你能拿到 word,否则是拿不到的5 \9 n6 C/ M% B+ V+ _7 g' g
initial_prompt = "Hello, welcome to my lecture.")
5 \9 X5 E0 z& i4 c7 e保证能尽可能准确的断句 punctuation,但是不是决定性的。8 c0 E* @% ?, X3 x: z8 ?
其他参数可参考源文件:
3 ]0 A% s9 [5 h$ }) b/ Jhttps://github.com/guillaumekln/ ... isper/transcribe.py. Q% O; s8 p+ I' r5 H# U- M) u
152 def transcribe(9 w; L" `) X% n! ^* I8 p" j2 k7 l9 q
从源文件你可以看到是支持中文的句号断句的。
: S0 K! q7 d" B1 o+ i% O, G8 [' R+ M+ L
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
# |) J7 e& E9 O+ m, x0 N" ?7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
9 |0 v! v! s5 Q N; ?8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。, [7 D6 Z$ \0 L4 r; N; D. X/ j
, J$ y( x+ Z% N% w* \
" R: ^ _0 [ i. p+ R
; T! F& J1 n6 [ |
评分
-
查看全部评分
|