|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 - a- R9 ~: r9 a t/ S8 [
$ M, L4 O3 @3 [ N. ~
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 A& r6 j% j1 X( |效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ k5 t Y& U8 `7 U8 R) s+ |3 `% y+ ]& a----------------------------------------
0 |: v6 h$ F7 M显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。+ P, U% N6 G* @/ z8 E8 X& F4 ]
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。 f9 T# h6 x9 W. o9 a5 b* x1 H
----------------------------------------; z/ ]7 y2 m3 Z- ]3 f. l; A% v
https://github.com/guillaumekln/faster-whisper
" Y5 s$ b* d, l2 q% K+ I3 _安装如下:; X `# w3 f5 ]8 g
1, Windows 10
; y/ Y4 n4 l+ g) l7 z& Q. y8 x2, Python 3.10.11
# b/ f8 \$ k# r9 f4 `9 |: Q3, CUDA 12.16 P& B3 a- ]- v
4, 在python 3 中安装+ `* w/ s+ A# ^/ c4 a
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 A }8 f+ u! J. W5 d& A3 O" o
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。1 o/ `* m: p ] V; F
5,pip install -U openai-whisper1 w* U) e8 e6 L$ a6 B9 e" [
这是向whisper 致敬,可以不装; e! K. A% V. }" m' N) w# m5 o
6,pip install faster-whisper
, t+ @0 j- k4 z1 ^# O7 `9 m* s----------------------------------------
r! a9 ]! ^4 Q9 @0 jwhisper 我用的命令行,faster-whisper 我用的是python。5 X6 J+ J h( B/ X
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
1 x1 D9 r9 _* X5 p7 R9 q2 D
) z) W( N* s" N) [9 y) d9 z% s----------------------------------------
e" h! s2 ^- {8 Y. `. }; ? y* y) G e8 s4 o8 a: v
from faster_whisper import WhisperModel
4 _. g; x1 |8 x! J! |3 y a- V- J2 J6 w, {5 T5 ]2 J8 F
model_size = "small"
6 ~4 ]% W1 J' p. U9 p; F$ H6 }1 l0 a G8 V- y2 M& ?3 y4 A- v
model = WhisperModel(model_size, device="cuda", compute_type="int8")7 N9 F% c. [! i2 J7 d+ ~
7 @/ G! t& {4 B, H7 h1 G
segments, info = model.transcribe(" h% y+ _8 X' Q
sourceFileName, 2 r. Q! W8 W/ t
beam_size=5, 9 V% a& e+ ~" A$ o6 E
language="en",
7 ~& i/ k5 g( x+ s h( I task="transcribe", : k! f$ Q" U2 B% K
word_timestamps=True, ) U- d' U- Q( P: O9 W O) g
initial_prompt = "Hello, welcome to my lecture.")1 {% ?) C: R' ^' ^
8 t7 M* a5 ?9 v$ R
for segment in segments:6 I: m: v. T. b$ H
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& c" i& y# G( d, V- W) e3 ?- ], y9 v4 u" a. {
for word in segment.words:
' J& W' P) V ~2 Y* p0 l+ ~
0 D/ S* D/ U7 ?' m. w----------------------------------------5 \- T* R. c* I# g
% l8 J; i6 D$ q( j g) C
代码说明:
* d* }3 k7 s0 I; M1 Z' ~1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。) R2 a6 G2 t( S/ w3 {
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ V: r7 N0 b, o3 q9 K6 H3 _. A3 l/ Q2,segment 本身是很粗糙的,做字幕勉强能用。0 p6 I" s, c9 {
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
3 ?) x4 G i& L% P4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
" X* w- {5 q( w1 \6 `比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 V0 j& A% U+ v0 H0 \- ?% M7 R5,model.transcribe 中参数说明:+ u# {1 H' v- N* M/ P
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
7 h" u/ [8 \8 a8 Z- \其中6 j, p+ R/ ?9 l# b$ y8 D& l: V
word_timestamps=True,
" w: ~9 o) b- o5 a5 z7 E保证了你能拿到 word,否则是拿不到的
6 ?7 {2 S/ U6 [. R8 Q; u- s initial_prompt = "Hello, welcome to my lecture.")
. V, f2 t# h, Q7 b) U. I7 t# P保证能尽可能准确的断句 punctuation,但是不是决定性的。& _: `/ C& F: G0 R0 d: U
其他参数可参考源文件:
7 i% E4 E% e2 I; X( X7 ]9 ohttps://github.com/guillaumekln/ ... isper/transcribe.py! m+ J4 g; ^) s( e5 G4 k1 s8 B
152 def transcribe(- h" ^6 T, \1 \
从源文件你可以看到是支持中文的句号断句的。5 e# I% b, r/ E
: ?: V5 Q5 Y2 G; S4 {( d
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。* W6 V( o1 v" Z3 A8 p
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 S, @ \ y" ~. a9 S$ U. L2 T8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。! Q( X. f, N& ?$ {
) h. k1 N9 W% d. b9 x
5 C+ K K G \6 l* a% ^2 I" w- n
& X' _7 f2 i# I- ~% @ _2 M" k |
评分
-
查看全部评分
|