|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
1 D( _& M+ a9 ~% }6 O$ Q/ d% C+ w* A# A& ]+ k+ c' n( `/ E- o# y0 N
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。5 F1 `) O$ b- Q- i. T( @
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
6 X" ]& p( H- ^1 [$ X" M( ~----------------------------------------
& r3 f7 U; |1 v/ d显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
0 g# |) N. Z$ }4 ?在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; \& D5 R# W$ p# g---------------------------------------- | S7 E4 i# v+ X0 X' y r
https://github.com/guillaumekln/faster-whisper; y, W Q2 O: ^) N
安装如下:
$ q2 j, _4 u9 Q. B1, Windows 10
; @% @+ }8 G9 X1 ?8 }, e6 o2, Python 3.10.11 _) s+ F8 X3 v( d
3, CUDA 12.10 x) S, V4 B* k. Y& b$ b: P
4, 在python 3 中安装
; T# ~. ?' w7 O% Upip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
, ?* z! W# D6 ~5 P/ S8 l这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
2 Z: y: X0 ]5 |( R5,pip install -U openai-whisper
" m7 y" R. i9 S+ F, J3 Q1 B这是向whisper 致敬,可以不装7 `8 @1 A/ l3 K- A" T" [ Y
6,pip install faster-whisper
0 M6 A) @: V5 z; g5 R% d6 D----------------------------------------9 s4 {( a2 K6 |' q' M$ C
whisper 我用的命令行,faster-whisper 我用的是python。
: p/ C$ j' T$ \9 Y b3 t7 n下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
/ T; U: o2 {+ F* c2 r( W" N6 `7 |7 b, _# M( i( o
----------------------------------------9 j* I3 H2 ] }/ C0 E! A; i
$ O* |! S; H$ p
from faster_whisper import WhisperModel m' t d' e7 q* M) a( o
4 }. `- J% k! z5 a( Omodel_size = "small"
9 f. i! x% W: l: _2 [
" {! r, X& B9 W2 Y. T$ y& umodel = WhisperModel(model_size, device="cuda", compute_type="int8")0 n/ g" I+ b0 I: q3 U7 W* e. z$ O
' u( l: P- [8 O+ N+ i' Z& B9 G
segments, info = model.transcribe() U x" t! y" {8 i. e4 _$ y8 C0 _
sourceFileName,
% p5 |8 `: ~. [ beam_size=5,
: c% N$ f( q, V$ n$ m$ v K language="en", 5 S5 }6 J2 U1 C* ~" i9 H
task="transcribe", ! Y0 I0 W+ q& T0 }* Q
word_timestamps=True, % O3 u) g8 b# H0 e \7 ~
initial_prompt = "Hello, welcome to my lecture.")
/ p- v* k M6 T1 ^' \# H" j8 ^0 q" l# N& g2 H* b
for segment in segments:* B2 I# f; s- M! A6 S+ r
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' G8 {; A9 ~ h' ]4 M4 J3 W6 q. X0 M, z1 v( N
for word in segment.words:. s& ^1 `& c) j
2 J1 E1 q5 N; \9 t: S) C; f----------------------------------------
6 ~+ y7 U& _* Q' w- e" T1 U% _7 n1 b
代码说明:
3 Z9 _; m) |% S9 n8 H# _1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。2 w: W. C5 o3 h1 _: z* j
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。9 Z5 d" u3 X+ W
2,segment 本身是很粗糙的,做字幕勉强能用。
- O0 x1 W3 W1 B: M# H3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。+ a# X7 u9 o. l; Y; @+ ]) C
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
* Z' R* q3 o/ r% I# y比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ O3 s3 o# L. V# `3 c: }* V
5,model.transcribe 中参数说明:
/ U3 u! E6 ~/ O- ]; c- ~ @2 @, m你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数- v( {; s) l2 V, h1 N3 n
其中 ?: V J1 R" `6 C8 {# A
word_timestamps=True,
6 [6 H1 H, M' c- ~9 d保证了你能拿到 word,否则是拿不到的2 |3 V0 k. B; Q
initial_prompt = "Hello, welcome to my lecture.")
8 \- u3 Q4 S( H; x3 m T8 y保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ d. T5 x6 w+ Y5 E. _2 ]其他参数可参考源文件:
9 q" E/ H. C( y4 xhttps://github.com/guillaumekln/ ... isper/transcribe.py5 {* b# ~5 }7 j2 f2 x
152 def transcribe(
! J' k8 h' i6 [4 Q, W, D从源文件你可以看到是支持中文的句号断句的。
4 x' l1 L8 y' m9 R8 ^$ a, L) c
5 {8 s1 P( ?) C8 P& C& E* G F6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。. F+ }' D$ u% K* z8 Y- d( ]
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
/ S7 o5 q/ }7 l. }+ p+ T8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。- {' L% U0 A, }5 |1 L+ S# B H* M
$ ~, O! W! Y2 t$ q ( d2 f% M& p5 w$ {) ~3 _
& L. K" q3 h+ U- p2 T
|
评分
-
查看全部评分
|