|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ) q D, A2 ` n
3 [) [4 h6 T. s$ Y
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
' |3 V/ F, }" r. g7 A; c" W效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。! }, L9 q1 L7 ]+ z3 L
----------------------------------------
5 V0 p; X0 d% f显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
- i$ O- C# a5 \ ^0 N在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
3 R/ k# [% c5 u; P----------------------------------------: e2 l% D% p& @
https://github.com/guillaumekln/faster-whisper- h+ ~/ c V1 O; |, S+ W0 ]
安装如下:+ x# F0 m+ v" v
1, Windows 10
' O6 h/ o7 Q( Z+ S ]: E0 h2, Python 3.10.11( @8 Q. M( h- m8 Z$ d5 C6 G* d' d
3, CUDA 12.1
1 U# n( J6 g. h% `4, 在python 3 中安装
' c0 k' |- s q+ f, N% n& p$ w! Tpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117$ N/ c1 l( x9 r! k" k, Y- ~% y
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
, Y- Q3 p% r, E: T- B5,pip install -U openai-whisper
; A! x5 U- R& k4 G" u% ~& S: _; H这是向whisper 致敬,可以不装
h$ e7 Q- C% e7 F6,pip install faster-whisper
6 C' S, S* q6 x- A# K2 D6 F4 g----------------------------------------
. T' I5 U# k9 Kwhisper 我用的命令行,faster-whisper 我用的是python。7 d8 q+ Q: `/ M. P1 K/ v
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% L. ~9 K$ I4 s8 y4 ?3 I6 Y+ v- x) L) A$ Z$ N
----------------------------------------: B# L% W9 }% O E
! E# \4 P+ H& N$ T1 }/ Ofrom faster_whisper import WhisperModel
/ G5 Q9 M7 z# g
& \2 {6 R% s7 v( O) xmodel_size = "small"; ]+ l6 K; s) s
# }4 i* e, ~! `2 F9 _1 r# dmodel = WhisperModel(model_size, device="cuda", compute_type="int8")# ?3 r3 Q D' D
& Z# A# F6 U: F7 W# u7 [
segments, info = model.transcribe(3 a, x: Y5 \0 k7 ~1 j! X" ]& v
sourceFileName,
: H9 k% ?2 {: ]) k beam_size=5,
8 ~% s& K3 `2 |4 I f; p language="en",
$ E* K' N2 _: o' e% Q task="transcribe",
" {* J" o" D/ E' _$ O2 _, G word_timestamps=True,
3 p# R, z( U e/ { z$ O* w initial_prompt = "Hello, welcome to my lecture.") G4 X) n5 L- X' n( i
! t3 B4 e3 N" M Z: t: z3 W5 K& c
for segment in segments:
+ z2 D; k/ l; L \) `* _3 O print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
0 G5 c6 N2 w3 j- s8 R1 L/ s
+ ]; V3 {; {: r8 [) q1 z+ h for word in segment.words:
% C' n# X5 _+ t+ }% z - k5 [% L6 n1 {+ h
----------------------------------------$ W: B3 S! x/ Q5 E( T
& Z3 _3 s1 j2 s* k7 T J" Z* m代码说明: N( b: H2 G- s3 n% ~ i1 N6 Q5 T
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 P7 ?6 B/ m# X. g4 k ^& B' J( J
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。- t y3 n( O3 m" I+ H
2,segment 本身是很粗糙的,做字幕勉强能用。
' f! F5 e7 D) s% L3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 s# ~ Q# \* g6 @4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中/ o% O) }/ Z; U
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
3 b# x+ b: r5 ?; p" B7 b5,model.transcribe 中参数说明:
$ K2 n: x2 Y% k) c) A. d: f% K: g你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" H S ?1 }9 o1 G3 S& x5 m5 B
其中
1 [$ f" o( `2 P word_timestamps=True, 1 H" J6 x' f8 q; \# X; `: ^
保证了你能拿到 word,否则是拿不到的
7 L b% J. l, N initial_prompt = "Hello, welcome to my lecture.")/ N" h- R, n9 k3 V) ?5 d2 _
保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ p/ ?1 T, r B8 F" j! L3 S) b其他参数可参考源文件:9 K. s% W0 m* T$ G) w" ?; X. I" J
https://github.com/guillaumekln/ ... isper/transcribe.py
. @: k+ f* r. v152 def transcribe(
4 h3 Y+ o$ X) j! o. B! l从源文件你可以看到是支持中文的句号断句的。2 @' q. |- J! S. D" y; c! j
' n _* T& i6 Q
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
8 K2 A! z9 z% @/ W7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 D5 {4 o1 @0 i, G
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
5 ], A( g/ P0 @1 y
) X ~- D* d/ d# L ( R( D0 f* c5 h$ o+ A) ]) g
3 n* {+ ?% v3 I# g2 m1 @) z2 T |
评分
-
查看全部评分
|