|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* ? Z3 e( F9 w2 S& H! N! t9 \& C, j% U! m" E2 W' D
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& E% b& e c+ ]
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ w( A. O P0 b% _. H----------------------------------------
& b# c6 U- \* e7 t3 M显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。, W$ t4 y& F& O5 A; d- U- Z# @& L
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。, _* {& r5 G" {5 N5 D
----------------------------------------
+ q% L U& V9 u" {+ `0 d, Nhttps://github.com/guillaumekln/faster-whisper
5 A% V7 u6 ]. G1 w5 n1 J* X! s1 b( z. W安装如下:
# e( K1 K+ r. v" ?; t) Q/ k+ V1, Windows 104 Q( z0 T( B% G3 D; s
2, Python 3.10.11
9 k7 ~. a) R1 l" H* N3, CUDA 12.1
/ H) ]' t7 G# [" p4, 在python 3 中安装
5 J* A% |: |4 j) }pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) k% w$ ^) P/ \这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 {4 m6 |' ~/ E. z4 f/ g4 K3 c
5,pip install -U openai-whisper0 Q: q0 A* B. Q3 E3 t
这是向whisper 致敬,可以不装
& ~7 M; s; Z3 o8 y6,pip install faster-whisper
6 s; a7 D I6 B b1 W3 x5 i----------------------------------------4 C b1 C* o1 e: O$ S
whisper 我用的命令行,faster-whisper 我用的是python。
( J8 Y- ~* b. C! Z$ l下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
: h6 E1 q$ l* k4 J7 p
$ N2 _9 t5 T; P, d+ j/ k0 h----------------------------------------
: R) M! I; a3 c8 w8 z7 ~7 E
6 x. q+ s& Y$ d$ n8 hfrom faster_whisper import WhisperModel& P+ n. n9 y! G& d; }5 k3 q
0 n" h3 H$ [+ Nmodel_size = "small"
, r/ H3 P0 t# o
4 U+ U4 S3 R$ c1 U, \. A! _model = WhisperModel(model_size, device="cuda", compute_type="int8")- Z) o3 \4 C. l' S* ]$ p# e5 ]. @
' W- c" [1 ?' {; ?; Y3 S
segments, info = model.transcribe(
& P! Q$ J/ Y g( N9 I+ _# {# o sourceFileName, 5 u2 T: g& H) w5 t4 J
beam_size=5, & T( Z M; w6 i$ V: U
language="en", 3 a# c7 T$ O8 E. c# H! e
task="transcribe", 4 H w& g- d. Q
word_timestamps=True, $ U, G+ ^6 A! E1 s7 J
initial_prompt = "Hello, welcome to my lecture.")
& w2 f: w# {5 a6 G V$ R5 [( f' A% j7 ~9 {
for segment in segments:
9 j, B8 ?9 D B print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) V5 ~7 E) w( y6 v" R
* e7 b- X. J7 V7 i9 g for word in segment.words:+ b2 s. y) X5 B U2 s
- O B+ |) J# p+ p7 [; }7 J3 N----------------------------------------
1 U. V- s4 J* N( A! o5 {( [; w {
) y" B# t4 i0 X$ A$ b0 x6 k# y代码说明:6 v/ ~! H; ^5 \) g/ l
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。8 O, K1 p6 M( V- ` l; I9 w
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。$ `& x2 M0 J6 S6 P# Z- \0 V1 W
2,segment 本身是很粗糙的,做字幕勉强能用。. Q. S# `5 Q+ H/ G
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。# k% R) f: u V* i( J9 h7 ]
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- R3 M3 Z! z3 v# s) r
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。. I0 S" N1 p; K6 B6 y" y
5,model.transcribe 中参数说明:3 t, B: a; j% [. i/ C' W
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, n9 ~6 r, ~/ ^. P* M其中
5 \8 g5 q& l q, V. x word_timestamps=True, ; A) O: x. ]& V0 i% D& K! X9 @6 a
保证了你能拿到 word,否则是拿不到的1 F: t' ` V" @" L- b7 u; W E1 T
initial_prompt = "Hello, welcome to my lecture.")5 a( ?4 K4 H7 |& K5 N9 r
保证能尽可能准确的断句 punctuation,但是不是决定性的。8 T. p+ L/ d. h
其他参数可参考源文件:+ _6 ^; D5 K! W; B
https://github.com/guillaumekln/ ... isper/transcribe.py2 W3 [9 J6 I, Y! s
152 def transcribe(
: s2 a1 U# r [% L) [从源文件你可以看到是支持中文的句号断句的。
n3 I: A3 i$ B/ d9 B* G9 ~8 {9 j# j) @! u
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。+ a* X# I9 {) X' |1 N
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# Y' N( Q2 O, |5 d8 `( j1 R+ h8 m& _
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。/ b5 `7 B4 n c, j5 m1 L. l6 [9 Q
0 i0 e( D5 `2 H
' v2 t5 J% l8 c4 b) R$ n
6 S# x8 C* }4 r0 l- Z |
评分
-
查看全部评分
|