|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * _0 L# @' P @& C: j4 F
& t, n0 w" H* ^) M. V$ E
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* q b/ U% J6 K9 j3 G( {! Z效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
5 Z4 m2 t+ r- w----------------------------------------4 Q4 P6 k( u$ ^
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 ?' I7 l3 _) \( Z2 ^在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。" F# S) C) L6 y/ X* a. K& K
----------------------------------------2 h' D. A- g+ o {+ w
https://github.com/guillaumekln/faster-whisper
' ]0 A. t6 o' A; J8 l7 ?安装如下:% Z4 ~) z/ X, t+ T
1, Windows 10$ G+ J, Q) ^+ _: t$ O# s' s! y
2, Python 3.10.11
. t0 r" [% C5 \. g2 D3, CUDA 12.1
; u4 n% j' T" M* k4, 在python 3 中安装
; i# A3 | r/ j, Lpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117; U+ n" N5 f; e
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ c9 U" v8 A, h& I# [8 m" _9 O
5,pip install -U openai-whisper8 K- l+ o8 V& [+ g+ r) x
这是向whisper 致敬,可以不装* U5 d* ?& ~. W
6,pip install faster-whisper
+ D1 y5 p7 x& o6 T$ ~0 H4 f' Y* v----------------------------------------
: K( E+ \% \8 j+ bwhisper 我用的命令行,faster-whisper 我用的是python。
9 N. A4 D @9 K. F `8 t* J下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:4 r& {" D# r: n: H
: U/ D! Z: ~+ u. _: D: R
----------------------------------------
! K5 V" ]6 j3 x" G& Z5 T- `0 b% L
from faster_whisper import WhisperModel5 I' b3 M/ O/ m: n6 X' r
* c# ~, Q3 P% Jmodel_size = "small"! b) u# m2 w$ F$ h+ D
( S! X8 Q# s E3 v5 \' `3 X0 T, kmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
( Q; f3 D5 H2 X! K) Q8 S9 l1 x7 m4 Q8 Z
segments, info = model.transcribe(
9 r3 I/ h) w5 t% @8 |' q. ~# H/ G sourceFileName, 8 S8 p( }5 L6 r$ G2 Z0 E6 L. A0 r
beam_size=5,
& _! P7 I# q) ?1 m4 g; Q# ~ language="en", ( i, U9 [5 l; b, j2 `% Y- }
task="transcribe",
$ O, B: \/ ]! R7 n1 s! T6 a word_timestamps=True,
; ~' p# i$ H) e: R6 x initial_prompt = "Hello, welcome to my lecture.")& |. i- m& q* ?/ o# c7 U9 H- G7 ~# h
8 Z$ P) P7 g j* X: a4 efor segment in segments:
; {2 T6 w) F) ] print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
4 w; ~% |0 X; L$ H4 O; F" ^1 b) A# P2 H
for word in segment.words:& g: Z0 K. h" j+ M! Y
0 J6 M; t& a- k----------------------------------------5 H. N2 Q9 W. g- l- L/ T' R
/ V" h; q# M* _ {! T代码说明:
1 I, H( E$ {( J9 m$ l- n3 y1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
* ]& R; Z ?$ N5 i' I! I5 |2 n6 i2 b ]& G但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。" l$ M- S+ A7 ^- S/ M7 P& P2 g6 }
2,segment 本身是很粗糙的,做字幕勉强能用。& p7 F ~6 q+ B2 ?9 D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- N- s# N+ ]) Z$ V) \% H4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中9 `/ B- T2 T. {
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。1 Q6 B. w6 T; f. @
5,model.transcribe 中参数说明:$ ?! d1 L7 N9 @1 }2 c- L: Y$ u0 V6 R
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
8 y* s* Z# j! V" [7 B其中
9 ]1 u$ D% b& a4 O! @ word_timestamps=True, , b7 G+ g( F) C- M
保证了你能拿到 word,否则是拿不到的- _) G- v2 q" S: \
initial_prompt = "Hello, welcome to my lecture.")
. Q4 c" t( Y" I3 E3 x保证能尽可能准确的断句 punctuation,但是不是决定性的。! d4 J' w2 Y# i) Y7 Y/ g
其他参数可参考源文件:; g3 `/ t6 C" N
https://github.com/guillaumekln/ ... isper/transcribe.py
, d0 {5 f3 d; e& g# l152 def transcribe(/ N. B3 a) r' X
从源文件你可以看到是支持中文的句号断句的。. E/ i5 l) R0 I5 y5 i9 ]7 A
$ i& G. O( X8 s$ q4 ^1 i4 E5 e
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。! L2 J! n, ~: g1 |( G, K" q. n
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。3 ?4 i4 ] ~, a4 F7 J. a
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
" }% w$ O$ B" l( B" _8 ^9 v) T8 x: p
: p4 B1 G# m' W4 @5 \) ?
7 I4 T3 A" w3 B: i! E; W, d9 K8 E0 ~8 _1 T6 X4 K h/ K. h
|
评分
-
查看全部评分
|