|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
3 `4 g7 F' v* L& `3 R% I0 p
x, p7 L# y+ B0 \借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。; u* E) ]5 Q5 w7 \
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ w. U( T u3 |/ ^----------------------------------------
2 C2 n. g( Q5 i. ?: Z* c' Z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 X# `* a J+ _. K8 c: U E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
4 \ Z- b- _: G+ h. \7 c1 }5 w----------------------------------------% H. t' Z3 L( W" v" Y3 a
https://github.com/guillaumekln/faster-whisper/ ^% E3 {7 D1 \; T; c y. |- g
安装如下:
8 i7 {" x% C7 X2 B( R( A; b& ?1, Windows 10
3 m6 d' E! a4 U8 d1 T# W2, Python 3.10.11
6 E A9 \, W9 q& `! A) D; |3, CUDA 12.1! `: d# Y o) w9 j5 K4 }8 z
4, 在python 3 中安装
, `+ u/ C" X' F) `' K; P* n: j% Hpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
0 ?. `( u1 f$ a7 v这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。, g U X1 I6 z3 \
5,pip install -U openai-whisper
7 g- t3 S7 Q1 x- w% d0 g6 V这是向whisper 致敬,可以不装
! ~, Y8 d8 ~3 ?6 S+ \6 L6,pip install faster-whisper
! F2 l/ P* e* ^8 ?----------------------------------------8 k6 R' i! S8 [
whisper 我用的命令行,faster-whisper 我用的是python。
9 U5 _: ]' N' f/ }9 o下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:* h% h4 I# H6 k4 H
% r1 x/ x% A- S$ Z V( i
----------------------------------------
9 p- ?4 A! J6 x2 g. V0 |" ?( D% O% a6 j* O' y) P0 d4 F5 M3 a
from faster_whisper import WhisperModel4 t t+ F- q0 }& c
$ M! |+ c0 V0 c3 k8 f3 F
model_size = "small"
8 G9 x4 m1 a" d" y) t2 c) _ h' N' G* G7 f" ^" M- f% s
model = WhisperModel(model_size, device="cuda", compute_type="int8")6 F, ?* U# n+ i+ s6 f# q
! r. U9 A+ b* _6 W8 Msegments, info = model.transcribe(; |( ?' n1 A; E' }* T8 i. e8 E
sourceFileName, ' O& N0 v8 L; b9 _1 R& m
beam_size=5,
" W' }3 H" C1 @" V language="en",
/ R, j6 [8 R; g. M task="transcribe", " l7 ^7 f- h& j7 F/ n
word_timestamps=True,
1 b0 E" y+ r8 T+ G2 \! @: k3 v initial_prompt = "Hello, welcome to my lecture.")
8 L6 O$ M1 ^; X# u% t' n3 _4 v9 L) U# a
for segment in segments:% O) X- }8 s* s0 t# a
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)); M9 Z' e/ U$ q" _
! Y4 b0 c( j& V6 I7 p B9 C' H for word in segment.words:
# c' P8 ]9 }& F; P z
! F" O6 Z: u6 a) X----------------------------------------; { I/ D- \& c" K+ @- N
( N+ d0 R! A: H( T
代码说明:
5 I0 }! ?1 @; H! D1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。" z* V/ W# S& M+ Z
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
. z b& V- n2 ^& `6 o2,segment 本身是很粗糙的,做字幕勉强能用。
4 m; q% H% d/ g$ h3 Y$ V3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! ]! B! e6 a7 ^4 k4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 [& \3 I- e9 U k
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 ^6 x* f% q4 p y6 E% |
5,model.transcribe 中参数说明:$ J( |1 }9 [% L4 ?: B/ f! D
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
$ k4 k9 M1 [3 ?. K0 ^* r1 x其中$ ?: a% N6 [& M' D
word_timestamps=True, ( K5 ?& S8 R6 C- }# D% c1 C* A+ ?9 }
保证了你能拿到 word,否则是拿不到的& _8 ?/ ]6 ^! b* _$ h2 b/ X# T1 b; J
initial_prompt = "Hello, welcome to my lecture.")
2 ], J$ G9 p( J: r( U, P保证能尽可能准确的断句 punctuation,但是不是决定性的。
( d: f8 I9 {" D4 H3 p其他参数可参考源文件:2 }( U8 O1 E: b- k" I* c1 u
https://github.com/guillaumekln/ ... isper/transcribe.py. Y+ Q, L; o2 V3 x
152 def transcribe(
- b3 V/ X }5 d从源文件你可以看到是支持中文的句号断句的。( B' q* A& Q* W; \+ _% l$ Q
6 F" o8 X' B! Q$ s9 X0 ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。+ [7 C- K* x& S8 H1 o
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
], W) n. `9 E( j6 u0 [! @8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ t4 p8 g: c8 }
9 M1 G" p s$ A; P2 m. m
# q k" s: g8 D" `3 R- T
. y3 j1 W. j6 A |
评分
-
查看全部评分
|