|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * e5 ]3 _7 x0 l* W
3 W; w" B8 l6 k8 j: F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
. Q% y$ L/ a: N9 d! _* a9 K效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
0 h6 w, K1 @) P. D @----------------------------------------
8 L- R j% N5 C) e8 v4 g5 q显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。: `9 C( ]* c9 p$ ~6 V3 ^
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。0 v7 U: n" f7 Z' y2 J
----------------------------------------. N) f/ R9 `3 Z& Y7 A
https://github.com/guillaumekln/faster-whisper& {: j& _0 ~& Z# F; r) q) t% d/ Y/ Q
安装如下:
$ F9 Y \) l' b4 |0 ^6 |+ {1, Windows 10
- k- H3 _/ P1 ~2 H! J2, Python 3.10.11
1 F. j+ U5 p) o. n1 n3 k% U! ]* r, ~3, CUDA 12.1
- ^" b v4 }7 W) B1 u4, 在python 3 中安装5 E, y$ j4 }9 P$ W* A" P$ r+ C
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 Z; B! x7 v. K3 B$ B5 [
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。' Q& b2 t1 m6 d( u1 U% [
5,pip install -U openai-whisper
1 j! X2 L6 A( e# W这是向whisper 致敬,可以不装8 M# n D+ R0 E! f- @
6,pip install faster-whisper: `/ p5 ?3 B: I: R: N+ [$ Q5 e6 f
----------------------------------------; I4 w; @6 L3 x" m8 ?
whisper 我用的命令行,faster-whisper 我用的是python。
! z: Q7 s/ O1 _. V7 m$ @下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
+ C# v, S! b. |% @2 y7 a& L3 }: {$ l* A
----------------------------------------
6 L9 h: z* M3 r; P+ Y: }! M6 e0 k0 `7 S7 I4 `1 c3 N
from faster_whisper import WhisperModel
& h4 H t& m. m1 n5 }9 ~% `+ j! r+ O5 }1 q
model_size = "small"- T- j+ s! e9 S/ k5 V7 D
) s- i, r T \0 T7 Xmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
6 c4 N) G( @, c3 X. P. P; J) S! o- g( m6 n7 |/ z
segments, info = model.transcribe(: }. t: m* o+ m/ e4 R! M* S# ?
sourceFileName,
* h7 R8 X& m, F, V beam_size=5,
7 G" B' w/ u( U S& n language="en", * i* n1 s: t. E+ }
task="transcribe", ! [: P( Y% d6 `3 |( N# Y
word_timestamps=True, + R5 f! c5 O0 c% R
initial_prompt = "Hello, welcome to my lecture.")6 G: @: d6 T" f: C
. M0 W0 @" \# v* M2 V$ f Tfor segment in segments:- U# _& O. H, Q4 J! R
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
$ k+ x$ [9 N1 n% ]
8 d. y+ P6 v3 I& \: L. _, E: s for word in segment.words:; h: o. H8 z0 u% u" Z
6 _% t, ]4 ~3 k" [( T' f----------------------------------------
, B' d/ e% @& T4 r0 h& C V% F/ y+ F/ a+ h8 B; I
代码说明:0 ^ o1 r) B: A3 O
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
, K/ O5 `1 J! C5 |2 w8 z3 [但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* Q0 r; c/ R% |& s5 J2,segment 本身是很粗糙的,做字幕勉强能用。
& R* H* }4 r* b) y3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& h( l2 @7 N4 S8 v5 @4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ V/ H# U0 ?! |+ K' @比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。' L, M. D' N0 G- K; N; }" k8 {
5,model.transcribe 中参数说明:$ _$ V# m1 g- j. M- \) m
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数0 y2 {! r8 Y N' m
其中) u8 Y3 |# a- O' h
word_timestamps=True, $ P8 _5 G, R8 q; I1 w5 h6 m
保证了你能拿到 word,否则是拿不到的& m% W+ V' \+ k# {: y2 m
initial_prompt = "Hello, welcome to my lecture.")
; m) M! J! M6 r e" U5 G$ B保证能尽可能准确的断句 punctuation,但是不是决定性的。
( D. o- c$ @" \8 i0 e+ p其他参数可参考源文件:
1 h. M* L/ y2 J Xhttps://github.com/guillaumekln/ ... isper/transcribe.py1 \! A6 _. t: z4 K# O# B' _
152 def transcribe(
. n. b) q" x0 q+ Z( F$ d从源文件你可以看到是支持中文的句号断句的。
! z$ T. [! w) m. i( j4 C+ P6 v+ ^! z% R
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
& v0 }2 B' l5 J& V* I7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。6 C j2 g5 p/ ]4 o4 I
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
; e! n! k1 G1 h, A; H$ u$ Z2 E8 n: |, N! O3 j
4 K3 E2 f' r. J9 b. N$ t# O
( H) A; |! Q; j4 k! |& n4 `3 p" d |
评分
-
查看全部评分
|