|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& Q6 V7 s' ?/ m* a$ E1 L% X5 |0 b6 P* ]( G; {
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ n1 T8 j b! V# C, V- Z2 V效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
' B6 T7 {6 e- X& s- a----------------------------------------
! B1 F# [6 I1 R/ ^% r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。1 R" c- x4 b/ I
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" `6 K# x$ a6 ^: M----------------------------------------
1 N' J* b% H/ Y. m# Dhttps://github.com/guillaumekln/faster-whisper/ v$ R4 e, I; Q2 v
安装如下:+ Q. ^% x, p+ V1 C+ R R% t
1, Windows 10
* s8 f% O% w5 a! M2, Python 3.10.11
5 A8 v( _; [$ F% @+ c3, CUDA 12.1
7 ]7 ?: @1 A( a2 h2 y$ s4, 在python 3 中安装
7 P, }' D; v7 s5 jpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117( F+ b) G- T9 \$ T7 N
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。, f/ ^9 F: @2 b( k5 }; C( W3 d
5,pip install -U openai-whisper
+ v+ N1 O4 T# A5 i/ ~6 s' ]3 B+ L这是向whisper 致敬,可以不装
0 d' ~, v" Z" |7 z$ {5 x6 |6,pip install faster-whisper
% k) b0 Y: K1 j----------------------------------------9 @5 \" M, l2 j( u5 y
whisper 我用的命令行,faster-whisper 我用的是python。/ Q4 E \4 J# S. ?1 H, L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ O$ F& ~8 a% {, r7 e I
( D/ Y: ^' O7 j+ K----------------------------------------
6 B" H. W, J3 v& E: ^! d' e2 C. j9 s+ [+ B2 Z% C* _9 V7 ]4 L) z. i
from faster_whisper import WhisperModel
) s/ o5 _) e. b/ I& e& k; n
; `! g* Y5 U+ Ymodel_size = "small"
2 s0 q* j3 W5 I) [# H8 H
- a/ y3 B: c3 `" bmodel = WhisperModel(model_size, device="cuda", compute_type="int8")' q; k8 l, E( f: O- {; Y
- t: Q: R% B, k; t, p8 D# N
segments, info = model.transcribe(8 k4 `0 m. k0 e6 n [# Q" b6 z
sourceFileName, & k) j& x/ C J% N
beam_size=5, . q& |1 {: P. v. L: q8 \* q
language="en", o) O7 ?4 b: B i# b
task="transcribe", * D6 h6 L5 D0 W
word_timestamps=True,
& v' E7 Z7 m9 r- s' Z3 b initial_prompt = "Hello, welcome to my lecture.")# V( c! x+ o, }+ H" D
" A5 V2 Z/ ?3 B/ u- ]4 V& P* g/ f4 D
for segment in segments:
1 l5 L1 Q: w* Y print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
! C8 G" e- O, p- G. J ?9 {+ ~3 E
for word in segment.words:
* ^* _. B( Y7 Q" a m: Q
/ Y/ _1 X o% D; y# m----------------------------------------
! x0 i4 _# R" X# ~" V( x6 h. Y" @, h; C: O3 |
代码说明:
2 q6 c: ?& Y; G4 a- y1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ c# I# ~: o# F2 ^) L1 U0 x但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。# O; {8 Q' e: r E
2,segment 本身是很粗糙的,做字幕勉强能用。" c* |& z! f' P' U! u) f0 [5 G1 x
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。" n# x+ Q: C. G. K0 ?0 h' V
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# x2 F/ k( R! W" C比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
R: x- h, S. ^5,model.transcribe 中参数说明: a( v0 Y3 P# H2 A
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数- y" E1 G# |& c# n) [9 V5 p+ |
其中
# Q% Y- d* } `$ s3 b word_timestamps=True,
) y$ n/ Z/ c ?5 ~保证了你能拿到 word,否则是拿不到的
3 f. T+ ^- T* W) J4 m- M initial_prompt = "Hello, welcome to my lecture.")7 d! L3 X7 p, m' J) n
保证能尽可能准确的断句 punctuation,但是不是决定性的。
9 X* I+ C8 o' b# p! [其他参数可参考源文件:
' @4 ]$ U3 T8 h) D8 j9 B+ i3 hhttps://github.com/guillaumekln/ ... isper/transcribe.py$ h$ g% [9 r* I4 m
152 def transcribe(- J: m" C' y( @0 Q& Z; @
从源文件你可以看到是支持中文的句号断句的。
. N/ k2 T0 \ i1 b. |
+ i L @( X0 }# H6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* l# o- _4 J% q, E/ p0 y7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# P; |6 f0 L- h$ r: l# L1 b$ r
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ Q& O" y. ?# _2 C4 o2 X
: M) D$ _4 ?# J6 `! S3 M
- ^ A( b5 x) L- ]; n" V9 k% T9 u- o; M W# c
|
评分
-
查看全部评分
|