|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 7 r- P6 L2 i: V
* @' Z; L* { Z, o# N
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& P/ i: g9 h$ r( T1 @0 ]效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ b! K5 _( ?: n& U----------------------------------------
; Y2 r. W+ C; F( R6 e3 {( }! f显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
; b5 m) z1 `7 i. B' J在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。. k1 Z) W/ `+ x3 u$ K. i
----------------------------------------
; D' F' D) J: w9 @% h& Z7 L8 _! {https://github.com/guillaumekln/faster-whisper7 s) s: Z* A9 w* ~/ a
安装如下:
) V! c0 Z; G* F$ Z t/ h/ h1, Windows 10
, ^/ l' h6 @" i$ Y3 b2, Python 3.10.11
' @; [/ E1 W( I' C5 S3, CUDA 12.18 }1 X( [1 U! I
4, 在python 3 中安装1 i g Q& ^2 B
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
7 D5 u h# Y6 U1 z) u3 C这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
1 N: t. i: H# u7 Y' D5,pip install -U openai-whisper: L: u# Z b a/ @+ Z5 q; F
这是向whisper 致敬,可以不装( M( b0 a$ W3 ^: v2 _/ j( _2 n; u
6,pip install faster-whisper- g8 P2 D+ O1 v
----------------------------------------: `0 W, G5 {! U7 S0 ]1 M
whisper 我用的命令行,faster-whisper 我用的是python。8 Q0 ?5 F2 Z# {- X% f/ r4 s: d
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:( R$ l! P7 b! o6 ?, k4 g/ R" j
7 ~; Y' v5 A) G; i. D! s" m4 r% A----------------------------------------
$ m5 u- r$ e- _5 }
& [& W$ K/ P5 J% \, gfrom faster_whisper import WhisperModel
( p+ ^- I) u+ n
3 v5 a! C" L+ lmodel_size = "small"
, I" v3 ?' @& ?* H8 S1 ^0 a
; D0 w5 d# Z7 Zmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
# v1 ^6 f, z+ ]( Y, S2 D; T7 h
+ r* B7 a. Q, o9 Usegments, info = model.transcribe(
, W% s7 Z) F' D4 Z; \: P5 Q sourceFileName,
. E9 F- y7 B! f$ E5 F beam_size=5, / c4 q$ z! s# P- v: L; x0 W5 v
language="en", # ^6 L7 l3 j. X" d2 a
task="transcribe",
`; _6 _. d3 m" F$ ?- P/ \) s8 y word_timestamps=True,
& ^6 A9 U3 K. ?; } initial_prompt = "Hello, welcome to my lecture.")
" U2 o/ q8 `( ~6 e6 i g; J
/ Q; _* V% @, a1 Hfor segment in segments:5 i( E! I" v% }9 C g8 d" }- i
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))5 f( k* A" v5 @/ A: E
( L4 {. h* Q7 `$ Z. {
for word in segment.words:! v. e- u, Z1 ?5 s" n9 d! O% I
3 w) B+ t7 D/ H' v" r! M----------------------------------------
* j, x. l, ]2 r3 h: }+ r1 S
! W, A0 [% u: s, s7 M代码说明:
) K# R: H8 A3 Y. i1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
( M. Y/ |2 f# E0 I5 f% }但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. o! u. O* H4 {5 W9 g* z
2,segment 本身是很粗糙的,做字幕勉强能用。- x# V- B7 n c* F
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
: U* [! l, F* |: i/ ?; E4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
! ]' H; D" T' j# ?$ s3 ~/ O" m比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 |9 s- V s2 t% j) {
5,model.transcribe 中参数说明:
/ {4 `# p) J% w+ v. B你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
" ?# n, ^) d! q9 {9 ?其中
6 e8 ]+ \/ [ I, A6 H1 p word_timestamps=True,
& C8 D: r0 I7 P保证了你能拿到 word,否则是拿不到的+ @5 G2 X! [5 [5 L# U
initial_prompt = "Hello, welcome to my lecture.")
- a; q" T! A4 B5 b& I% ^, a保证能尽可能准确的断句 punctuation,但是不是决定性的。0 |4 W# F* `7 f7 w* A6 b+ [
其他参数可参考源文件:
( c( w9 f" w* {( O/ K$ Whttps://github.com/guillaumekln/ ... isper/transcribe.py3 g, U5 b8 V: P0 \/ V
152 def transcribe(6 N8 B, y4 K, x2 V' j- Y/ \. V
从源文件你可以看到是支持中文的句号断句的。9 v& _! {" e2 l* L
- [3 c( [3 S. Q, d& N% w7 g4 U/ r6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
4 X4 f' h, S" Y# W& t1 D7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。! f3 _4 S1 T* J5 t, Y
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
" n; b2 X: ~ M- L7 V! W S, q+ A" J
* [5 X4 r8 }) i: v9 Y$ C P2 i% d8 n+ v1 P- \
|
评分
-
查看全部评分
|