|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, W, [: k# W" n" I! ]/ T8 V/ D' _# ?+ L) n. t
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
! S+ T' b7 Y* q5 \# m效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
4 B- V; m; k8 L4 j----------------------------------------
. W. c/ d+ K7 P+ q+ e7 t* M显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 C3 H2 X. T7 n1 Y; h( ^在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。" _- M& f( {- x2 @+ o; z
---------------------------------------- F& G1 _! b0 z% `
https://github.com/guillaumekln/faster-whisper
' Q0 r4 z0 f) H1 ?安装如下:
( @' M; k: a, H2 n" }; s% h1, Windows 10
8 h! o' f# @8 S. v" ]0 v; g+ L0 [* {2, Python 3.10.11
2 B1 m) t: r: [. ]2 q3, CUDA 12.1
- Q# r* y# O. Z: M$ n% m4, 在python 3 中安装9 x# k/ ^; v6 G+ h4 x
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1178 |( ^7 o; C. L3 a# _' @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ U- @; f1 P1 o% c$ `# \5 i0 h" I
5,pip install -U openai-whisper
* W/ X$ }! U, M这是向whisper 致敬,可以不装9 q3 `! c0 J* w4 r: G) C/ j
6,pip install faster-whisper. Y f" N+ F3 ^& [% p! [
----------------------------------------
8 p8 U/ a- F: y. Wwhisper 我用的命令行,faster-whisper 我用的是python。" z6 Z; V# D+ a& U/ S7 I
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:' b! t9 { O3 c5 K
, d d$ P5 X4 l0 i- I4 H6 P, R* a3 {----------------------------------------5 }# [' X# W# q$ B" b3 }, |
6 M, W$ G% Y' v! U2 jfrom faster_whisper import WhisperModel/ y, c. p& k1 d2 w$ {1 P# r1 X
* I* f0 ^2 s$ A! n8 _! K6 umodel_size = "small"6 U9 ?$ _9 H1 r, ~. d
+ [5 n7 G* [ S& ]! j
model = WhisperModel(model_size, device="cuda", compute_type="int8")4 y& c: w& j, y% h! k
5 n/ n: E: q3 y9 zsegments, info = model.transcribe(& O- {7 ]# Z, G1 u4 q" \0 e# n. a' }, ?
sourceFileName, " u, e8 H6 z( o, Y( w
beam_size=5, 7 V' m! w6 l- H$ R3 h- Y+ {
language="en", & P: s0 X9 ]9 _- k6 [
task="transcribe", 0 Y5 E" e" I0 `) @$ Z; k( M
word_timestamps=True,
* Q( i9 Q- ^0 C4 J0 ^3 |5 U& O initial_prompt = "Hello, welcome to my lecture.")
4 y$ `+ U( h; ^. B1 `; Q* ]% m% }
* m/ ]& @4 v! ^& bfor segment in segments:3 M; _6 y3 c8 F b8 n6 p2 T
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))( Q0 o4 H6 K2 \- S3 |
" _. V/ c* b0 @# I' k0 W) h
for word in segment.words:
5 v6 l7 h" v7 s5 P4 j& U' E
+ T) k# n5 W0 L9 q" J- j* L----------------------------------------
6 @$ O! m6 b# g: K1 ]+ w8 v+ E, c7 [' P6 e
代码说明:3 z1 x R. C' H3 g2 k8 g
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: o7 B/ B- j0 L: m但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 D* q. {3 a( }5 T$ K h6 Z
2,segment 本身是很粗糙的,做字幕勉强能用。
/ E# ?- f- I( x/ t% e3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。$ u7 ^9 j8 |- j3 K8 n
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
: d3 o ~/ l3 r( M5 t3 Z比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
% @' e3 q O# E: h" o, Y/ u4 m5,model.transcribe 中参数说明:6 `5 t6 q9 m# ]$ t j
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数* Y+ F, P- O5 e
其中$ w: {/ t$ `) O
word_timestamps=True,
& H6 j! R( A9 o! A# ~& [5 W; ]: m保证了你能拿到 word,否则是拿不到的
- s6 [" |, H9 v* t2 ~! `0 r# F& g initial_prompt = "Hello, welcome to my lecture.")" g' S( v( ~ K. v8 S
保证能尽可能准确的断句 punctuation,但是不是决定性的。0 n2 C9 [, `1 P$ @2 x4 e* s/ S
其他参数可参考源文件:9 v9 Q9 e' f8 L, w8 {
https://github.com/guillaumekln/ ... isper/transcribe.py
. {( L0 E$ V* B2 X+ v! R; N152 def transcribe(4 E; F& S3 Y A- G3 \' |" r
从源文件你可以看到是支持中文的句号断句的。* O9 M) Y, C- }" W8 I) p) a
! c9 d6 e4 U. M U
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
% M% G, j* |! F' U1 @$ a8 Y* S7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
! H" u# W9 F- e: M( }8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- u% q5 E8 I5 [) v) p" E5 ^
( @: q% W4 C+ |3 O " v" D! X' Q" ` A
R! o- i" G( J$ ^9 n$ B
|
评分
-
查看全部评分
|