|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 j& g! r1 ?7 e. [% T ]% o' C. j" X2 |" j* M6 A) m
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。. [ u2 G; W: J. y
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
# p7 B1 Q* \. n& c9 H6 P0 V- r$ X----------------------------------------
( Q8 ], X3 I& b+ T6 d5 ?' R% N显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。/ A' ]3 s7 C- o( f
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。/ F' R* T9 U ]# Y }* `% p% P
----------------------------------------
" L8 ~9 A! X3 q6 r8 p/ s; }& d: hhttps://github.com/guillaumekln/faster-whisper$ O; z) w ]& R
安装如下:2 z, `4 [. n, ~- N, N/ Z- R3 t
1, Windows 10
/ `: _3 S5 O' e/ v4 h2, Python 3.10.11; X. r, C! r Z( K4 ^2 ]5 n) s
3, CUDA 12.1, M/ ~: b/ }* y
4, 在python 3 中安装
+ F9 U% J, a+ [6 [" N! @1 P, upip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
1 ? R/ Y3 z0 f' [) {这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" X4 d/ z3 H3 J1 B0 j: {
5,pip install -U openai-whisper
- N9 j s3 E. ?& R0 h3 O这是向whisper 致敬,可以不装
2 }0 ^: _+ ^3 x; q6,pip install faster-whisper' g e& X+ P: @. A# O& v
----------------------------------------' P! Y# g2 S9 G* I ^8 g( O
whisper 我用的命令行,faster-whisper 我用的是python。
/ U5 i! f W+ L5 H9 }% K下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) R. B6 a5 g+ U( q
0 z# d# l, `* g: H----------------------------------------3 n, t2 p& P% p5 g) f
4 s$ s: q7 R- [0 B! ~' K
from faster_whisper import WhisperModel& u9 t1 |. D! l
! F' b' N1 K6 s* N6 P+ ?& b
model_size = "small"" b4 _# L7 E1 u4 G; n+ X, `
0 @& l/ \5 W' v! k: \model = WhisperModel(model_size, device="cuda", compute_type="int8")
/ ]4 P7 E4 L/ I7 S+ K7 `
4 _ C7 S8 o7 A; F- y, V8 `' \+ h8 Fsegments, info = model.transcribe(
' Y$ F) N3 d" g( W sourceFileName, 8 {# I. k% N' P }, }- m/ I# M0 D
beam_size=5,
4 Z# i, X& z: n; J! m language="en",
8 ~0 }7 |" k& o$ [* U; a task="transcribe", " \/ r7 {2 `2 Q" B6 T- x* o
word_timestamps=True,
# D. `5 d& }% c& l8 U initial_prompt = "Hello, welcome to my lecture.")% d0 t1 T3 q" M5 E
* R- g8 W6 g* Y0 zfor segment in segments:( y5 V8 d5 G0 }# V
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)); b+ q( v' P' ]# W/ ~
& n% L7 o' ~* x( j& F6 ^9 S for word in segment.words:
6 i& o+ R% k' J5 y6 b: m8 D
$ f4 r; q& G: a/ \----------------------------------------
( P) ]6 o9 e: h( v
' `; v# q% f1 z& P7 E代码说明:
4 O" @* O4 M3 i+ A6 Y4 @; F) E6 G+ X1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
. G( g9 N* c* g但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* {! ]5 x+ k% h
2,segment 本身是很粗糙的,做字幕勉强能用。
7 R N. F2 z& x. g- p3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 _6 s$ j( B1 H& a, A& B4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: k& {; A" x/ [- y( A. w6 I. @比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。8 T" i& t2 H. p; d) y) h, H
5,model.transcribe 中参数说明:& W- S$ w- S6 m! K# r$ x8 Y0 o/ W
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数) N6 X L' u, i+ j
其中
0 o8 _# Z! O' p$ z word_timestamps=True, ' b1 |/ n& P2 f
保证了你能拿到 word,否则是拿不到的
6 A# s) j0 x/ Y; R2 v initial_prompt = "Hello, welcome to my lecture.")
' d# E$ l' A" ^1 m+ D9 M保证能尽可能准确的断句 punctuation,但是不是决定性的。
7 P! l; G4 S% }2 o1 d$ m. e其他参数可参考源文件:: _3 k3 k& L7 A% a& c1 O
https://github.com/guillaumekln/ ... isper/transcribe.py
9 n& I. D: [1 g+ U" T# a; ^7 e152 def transcribe(
. n5 O( z! ~* f! L, F0 V+ v+ c- s从源文件你可以看到是支持中文的句号断句的。
& O$ O2 E% g: |5 A7 K: f$ I! W# _7 S! Q" l# }" h1 q: D
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。% Z9 ], @3 C/ i; B `% s3 n' o9 T* H
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
) |1 T' o- C# A i8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ Z, u6 n4 @0 ~" f _
" W7 I' W4 h4 j# L0 ]+ v# r$ k- D
* X- J+ B' k% @( `: O, j! D
" i( E, c. r1 s9 c# t |
评分
-
查看全部评分
|