|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 8 j; u8 p0 C9 o& h3 d# r2 E9 \8 b
# b" w; I( V# `& |, w: h借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 y4 D: L+ r3 `- V+ Y# x+ M效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( V' v5 v) P1 `/ J----------------------------------------6 F9 H) C v& |: H/ {, i
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( h1 f4 Q D. n在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
5 o# i7 S7 g% {0 Q c----------------------------------------4 D. }5 b ?/ r
https://github.com/guillaumekln/faster-whisper
$ e/ o4 F0 ^/ `9 U2 |4 R; o8 V" b6 |安装如下: J) r' d6 m, L& M8 i4 l, h' S1 Z) x
1, Windows 10% o$ W, b0 t/ K2 k
2, Python 3.10.11" x: e5 c% y, L) O- n- h
3, CUDA 12.1
1 k9 ^7 e# \5 m: v- y/ P7 Z& x4, 在python 3 中安装0 F! j) e* N6 @/ l w1 l8 B7 f7 z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117% S7 h+ p9 A* {9 g# I( u0 ]
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。( i5 p# Z5 J B
5,pip install -U openai-whisper
) r0 Z6 |9 v* v+ T, z$ c这是向whisper 致敬,可以不装; i' T, T3 v/ {, j$ M& C0 F4 Y4 u- ~9 Q
6,pip install faster-whisper
( K6 \4 ? Q& a0 r----------------------------------------6 x/ J* B2 J& t; D
whisper 我用的命令行,faster-whisper 我用的是python。7 i! P! j' ?5 P1 {! ?
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' Z/ o: S( s/ J0 ?
2 ?1 \4 g9 e. j! m- j----------------------------------------
2 [: E5 @- L j- t8 B6 r8 X* o+ v6 H3 v6 _( R* x' N4 k( I( b
from faster_whisper import WhisperModel
: @+ }7 y; t& ]! X% {4 |+ Z( i
- [3 Q+ l! y1 e! P, w, { D* M, c [model_size = "small"$ @7 @% R2 \, E2 d7 U
. b* i6 `8 w* S4 Z! S' Amodel = WhisperModel(model_size, device="cuda", compute_type="int8")
0 T( T3 {, s+ ?% x- a5 Y! G5 A" F/ Z0 s* C. H% b. n, \2 H
segments, info = model.transcribe(
5 O1 d- m5 }" `, b- K sourceFileName,
# o: u3 p' S! R' \2 l' t beam_size=5, 2 ]4 m" p7 n) Q+ ]# x
language="en", ; @9 g$ b6 l5 d
task="transcribe",
% ~* j# P2 p: a' i" E- A word_timestamps=True, / J2 w& p7 z5 K+ |! B+ ~
initial_prompt = "Hello, welcome to my lecture.")- g5 `; k/ w- ]6 [& I
1 A$ G# ?; h7 E l: X( p0 M
for segment in segments:5 F) I' R; z, a( r" x
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))" H" D1 B4 F4 J w% q, p, @+ F1 ^2 f
: u" Z. D; T! N F for word in segment.words:$ M/ h4 m3 _0 Z+ b4 B# y( J
3 t3 R# P7 g9 `% A$ f/ u! E; H5 u----------------------------------------
+ O u |4 u @$ G/ S4 k9 B: X9 b4 v% X c, I- S- t+ p
代码说明:
, |0 F8 f" ^1 z0 U: Z1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。9 N$ @2 o! U( B5 q
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。1 G3 s$ I) K9 T4 I- R, _
2,segment 本身是很粗糙的,做字幕勉强能用。1 U! d5 Y& O( u+ ~/ d
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。4 Q. Q4 N8 x" k$ @
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
! e% v& N4 q" d. S$ E8 a比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
$ L( [3 Q% b/ _2 G4 B. ^, U6 j5,model.transcribe 中参数说明:0 V* |" R- N' o* L9 H
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 z: u6 d c5 [- _其中
% ~2 V! R g/ `( u1 o2 A ?6 q9 j; I word_timestamps=True,
7 K* S r v; P! O6 D保证了你能拿到 word,否则是拿不到的" Y( W! ?' J4 d5 b7 }4 m
initial_prompt = "Hello, welcome to my lecture.")* d0 u: l, `; K) o5 M; |- }
保证能尽可能准确的断句 punctuation,但是不是决定性的。8 d' F# }- w& j
其他参数可参考源文件:
3 n! e5 w+ D1 W9 M' nhttps://github.com/guillaumekln/ ... isper/transcribe.py9 E. A! G _) p4 Y& J* U7 t' Q. ^
152 def transcribe(7 P/ R! R6 d0 n4 G6 g$ e4 x) R" E" o
从源文件你可以看到是支持中文的句号断句的。) D4 W5 c! Z. Y" a% L9 D- J
. B9 R" d5 G$ D
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。7 k i/ u# { r( B6 L2 s
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( a5 g: {2 Y ]3 n! }2 l7 n ^
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
3 ?; l' U& ~! A) L U3 o
9 Q; Q" A# I8 v3 A
/ C9 D2 F! s, R8 c6 z K- _/ O4 L+ }. M3 m I8 v! j( L% m0 c3 v: ~) _4 T
|
评分
-
查看全部评分
|