|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 4 H2 c% P9 G' C) A) f
' J! r: k( c; k) L. u( J! {& D/ D
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
6 E0 e+ @; o0 G* M2 h效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ q. f, z! \9 s
----------------------------------------
8 d* z3 h5 h5 I5 p; T显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。' S4 B D, X; A# @1 U5 ~
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。8 p* K$ b2 O/ {
----------------------------------------9 N6 Y9 D$ P: i# K8 ?3 j# z' J
https://github.com/guillaumekln/faster-whisper3 ]$ R$ i8 D- i
安装如下:
6 d+ l2 Q. C. ~! Y- S" p; a1, Windows 10
: S8 g/ ]$ e/ S9 e; M" l8 \1 _8 q2, Python 3.10.11
3 {0 ?) |3 ^4 @( Y3, CUDA 12.1
+ Q5 j. O4 i9 o+ }- x6 }. Y4, 在python 3 中安装
4 G9 J4 j& |( B) A8 r4 k+ Spip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* V4 ]3 c/ @1 d9 l这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) J/ Q5 @3 Q0 S2 O* ?2 s5,pip install -U openai-whisper% Q: l1 B8 Q8 {+ j, S; p! n
这是向whisper 致敬,可以不装
: ^5 P" K; j" m& }+ A# |6,pip install faster-whisper
, _ |# }3 n5 Y1 S+ Z9 }- n----------------------------------------
2 @0 I& \" [3 |whisper 我用的命令行,faster-whisper 我用的是python。
; W8 z% F' p; y, E下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:( p6 L; B) S6 }: m* V5 n9 j3 W
8 _# h1 O2 m2 i5 D6 Y7 H3 |
----------------------------------------( v' ]* x/ R# Y/ u$ N: L" h
8 e3 \0 I! E& n' e& k D* }
from faster_whisper import WhisperModel
! d; |: a( w9 v5 T
' t. ?$ C% B. b. S- Bmodel_size = "small"
, O$ s' G( e. y+ h% h4 F# _7 n0 e) w( j( d
model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 j! Z! E. U# W z+ g' Q H- }# z5 W, |& E- ^9 }
segments, info = model.transcribe(
e2 S x, X' j. O5 P* b8 ?0 w4 s sourceFileName, b0 ~" z( a- b. M
beam_size=5, q0 |. W: V/ S+ m7 s, D
language="en",
+ m5 L# F0 v+ M& x3 z task="transcribe", 6 {8 y" K: M9 c& }; q' W( V
word_timestamps=True, 9 P. ]6 i# w7 r- A7 o, u
initial_prompt = "Hello, welcome to my lecture.")
0 ~/ g2 I; W6 X. r% Q5 e8 G- a2 ~; f5 @+ Q
for segment in segments:2 u) m* g3 y0 ~) E8 t5 y7 h, O
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: Z" }& p9 J! P$ ]) _3 j! W! B" r3 @0 F3 ?, }# [5 b1 a9 W
for word in segment.words:# i; b4 ~4 p% P. r9 T2 N! A3 g
* _- U3 F8 k9 `# [, u8 T
----------------------------------------
. r+ F0 Q4 H3 W* L# d
: a- E. [) ^7 e8 A代码说明:
M% s6 `1 B; B; }. R. a1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
) N: q6 l2 C. Y7 V' ^但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
! q" J/ L3 F- I, I/ T2,segment 本身是很粗糙的,做字幕勉强能用。
: N( S0 h5 K l3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
0 s0 [1 p) ~$ d; K& w4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
" ]9 R0 Z9 T% S3 U比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
5 f: @6 {$ l e8 G5,model.transcribe 中参数说明:6 s! N7 v' C U
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 U2 [( d# x/ d% j1 E: Z其中2 d0 J# _2 v$ n K, z8 [9 G
word_timestamps=True,
' j3 x8 @7 [ g保证了你能拿到 word,否则是拿不到的
5 [. K0 f' ~, h; i9 O initial_prompt = "Hello, welcome to my lecture.")
* D7 C6 s5 D3 U o. G6 F保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ I/ I k8 e& R其他参数可参考源文件:
( O$ ?1 X5 v G2 \8 h1 a4 Dhttps://github.com/guillaumekln/ ... isper/transcribe.py
. T) J5 F# m6 g" g! W* Y4 j152 def transcribe(
* t6 v& J- X- t4 a从源文件你可以看到是支持中文的句号断句的。9 \5 k. H/ g: a1 F3 [7 c: X
. W/ @# G% \7 F4 Z5 {0 i6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。1 O- N( E" t; y+ z% u! J
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
6 ~" @1 M. Z# ? l* D7 `! j" E/ P8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
# L! s, ]. f7 |* X5 L9 V( _
" ~! v: ^5 K$ f# w% x0 Q9 D % E5 x; V& q3 f V& W
: I2 M% g& F. ^ R; |; J" r
|
评分
-
查看全部评分
|