|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* a. f$ H; @8 @
; M% `$ K! d" H" Y借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。! v& Y8 i: Z; F
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。+ D' I4 z/ s) t/ A/ x9 _
----------------------------------------, } y" ?9 x" E$ m- P
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。' Y$ X/ ~. ]% ?- d( D6 c% U
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。! ]3 \+ C2 n! y( p+ d0 t5 R
----------------------------------------3 {) x% |: c7 C) o+ w. @0 Z+ D
https://github.com/guillaumekln/faster-whisper
! X/ w& R& Q9 n9 F1 J2 M安装如下:
% ]3 h" ]. z, B- [0 C- j% i$ G7 @3 R y1, Windows 10- J# P9 ^- r0 T' R9 W
2, Python 3.10.11" A) W) C& i* G9 X5 Z {
3, CUDA 12.18 ]% O7 T3 Z/ n5 E
4, 在python 3 中安装6 n/ @) N* E7 x5 E# k4 _, ?! U! R* P
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
, i& M2 U, p0 Y: u这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
2 S3 K/ k C" B5,pip install -U openai-whisper) P. c1 C* p3 g( A1 p
这是向whisper 致敬,可以不装
/ I9 M1 k2 Y# n. S% Z6,pip install faster-whisper7 D& S' q) \3 S! x& s3 [' U
----------------------------------------
: J2 L9 z4 v2 R) f$ Hwhisper 我用的命令行,faster-whisper 我用的是python。
1 N% f( P( G4 K下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 ~( k8 b+ h1 {* c F2 C( {9 [! v+ J
) ^1 W7 }) o0 X+ A: f( U( v) d----------------------------------------4 V* w! A! S$ `0 p8 M
% K+ y* V- W' w% {0 Y! jfrom faster_whisper import WhisperModel- @) R: c3 [9 k' M/ B( X
, s# [$ G O+ @! c
model_size = "small"
8 ]$ b- m s& m: p, `
/ H5 F$ F! X% kmodel = WhisperModel(model_size, device="cuda", compute_type="int8")8 ? o" Q2 d# o: _) c/ R# D1 G) Y
9 m4 T! r+ W# W% y0 q
segments, info = model.transcribe(' l" z" w4 c. C
sourceFileName, $ |! c: }' s6 M5 A: ^: I
beam_size=5, ( N/ w8 i8 I/ F' g& @ Q2 M
language="en",
7 n- a4 o2 m* |' }% g task="transcribe", ; c6 C9 R. O- ~6 D* W$ a
word_timestamps=True, 2 N: |; w6 H) N( e9 i5 J8 g4 Y
initial_prompt = "Hello, welcome to my lecture.")
( t) D6 `+ T: k3 A% F% T2 W
, @. i0 V$ h" U9 ^( mfor segment in segments:7 f, `, B) s+ K$ d% e
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))/ \9 e* w7 \* v- W9 s. v
$ P; G U6 ^5 G1 ~ for word in segment.words:
" x. T1 d/ z, L* h0 |! t6 K- m( ^
& d+ I2 i& i' i d----------------------------------------' c! U" C% V3 ]4 b' m& ^- E7 ~4 s, ]
, ~. ~$ }* F2 |' }/ Y代码说明:
4 h/ V' t: e$ U- q2 {1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
" E! g0 {8 t2 b* T但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! `+ o- U) N5 X0 Z
2,segment 本身是很粗糙的,做字幕勉强能用。, A% u" f' d, T, l% D4 @
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。4 D' }* ^8 ]4 Z' M3 ?4 i( M
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
* L% o# @% i; [& p- m- \比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 P: p: }2 g% M# F6 _9 r5,model.transcribe 中参数说明:
2 K: }+ m& S6 O5 [" W+ w/ |你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 d+ }: l6 O+ g: C; Q1 V- L其中3 M/ g( Q% t4 P0 |' C
word_timestamps=True,
' ~/ v3 N# C. F( W# i$ V保证了你能拿到 word,否则是拿不到的( w7 P+ W$ @+ ]9 H6 O
initial_prompt = "Hello, welcome to my lecture.")0 m+ X- e& U2 i9 F3 Y$ H# g/ M
保证能尽可能准确的断句 punctuation,但是不是决定性的。4 [, O; g( m! P, M
其他参数可参考源文件:
6 S" ]5 u3 [, a- ?; P' R D" Ghttps://github.com/guillaumekln/ ... isper/transcribe.py1 n# n; q7 k1 _2 z6 M
152 def transcribe(+ Z$ s }/ J4 @' f8 C; p
从源文件你可以看到是支持中文的句号断句的。0 k6 a' G) p, h W
* b! ^& p& X# m% ?. h
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。) M8 I8 G6 B& t
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 H1 N' X% U( B. Z0 D! u. c" c8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
. U( H* v* S% N- o/ c1 o* g0 G* R" x4 j
1 Z- K# a# p q: q Y3 y( w Z }
9 T9 w) K( s2 ^/ G6 K* N: ~ |
评分
-
查看全部评分
|