|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
. P6 D% s' b: m1 h- u( m
: P' ~5 l3 J2 T" E' R借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
8 N/ F* A! V* ~1 ?. z效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。) H& H: L5 M8 v& F5 ^% y
----------------------------------------
! a1 X& J- f. _/ I) E显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
; d( d( a" ?& h) _$ A; `3 y% w在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
& K. a7 o9 G5 e2 [ n; {" s @, f----------------------------------------
/ `. e& e! R3 y) w' Nhttps://github.com/guillaumekln/faster-whisper
0 y6 v+ n( Q3 A2 p& ~# H' B/ N安装如下:+ D/ n( M- t% g! n" ^* j
1, Windows 10
# a% X; r" [% \2 E9 t2, Python 3.10.11' e' f% w$ r/ o/ ]5 _
3, CUDA 12.1
+ k8 g6 l7 k' [9 P1 e) Y4, 在python 3 中安装8 ^5 C$ R U& p. }* [
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
6 ]6 ~* _$ O9 E/ f这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。% }: C8 b) c- `
5,pip install -U openai-whisper
1 g, @$ N7 q# `! ?0 S& O) Q这是向whisper 致敬,可以不装
3 Q$ h) ^! c5 y% G- e8 Q6,pip install faster-whisper
. e5 ?, \( u% M$ i6 K: N* }- l----------------------------------------, \: S ]: O+ a' p2 s9 b b
whisper 我用的命令行,faster-whisper 我用的是python。2 `( e- i0 C: \7 Y7 f5 i
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:( K/ m/ F* U4 V* V6 q
X( r4 x( ^/ w8 j- a( e! z----------------------------------------
3 k9 j" M( v$ ^3 o) M% L7 ~- I& ^* C5 K
from faster_whisper import WhisperModel4 a, b: I" y* Y% p
. B* f# Z, {% y! Z( wmodel_size = "small"
+ w3 e: P9 Z) a0 [
7 [) \% P6 o' N# N$ b; rmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
U. E5 s# z2 {
, O' `# ]. e5 Q, k3 X, jsegments, info = model.transcribe(
* ^) k8 B. w+ k5 r sourceFileName,
* ]+ [8 i3 S# }3 K* ` K beam_size=5, - ~6 C% h) d. U8 l( O
language="en",
0 c. \- n/ ^: J task="transcribe", 4 Y" z% D- e. \! \! `' x8 H
word_timestamps=True, 4 R" t5 i- }. V0 P) Q6 X3 v, [5 a
initial_prompt = "Hello, welcome to my lecture.")/ J: @; g+ j7 v* S$ {! K
- g2 n4 W, q9 ~* ~& Efor segment in segments:
) B. d7 A7 T( U print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)); K3 C% S6 u7 \2 F8 P8 B0 k8 M
$ ~% i$ b# |4 \$ y) K for word in segment.words:% H+ e" w( O, n$ `/ Z, J
/ s- ^* Y/ ]2 M/ L----------------------------------------
) x/ m3 j- S0 T
8 A$ a* x( g+ \! r- u代码说明:; k$ s5 U# G) d% s/ z0 v
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
/ m0 B/ Q! m% A* j' t F但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 C* Q9 W2 X. S/ x( |2,segment 本身是很粗糙的,做字幕勉强能用。4 ?. V/ S* q6 p' j) ]0 R/ _3 Z' ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
6 V9 N/ D# L0 n3 }4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 r- p. n) s$ m/ H! S5 [0 i比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
; f8 H6 H6 h3 M3 V) S5,model.transcribe 中参数说明:
, O1 ~4 K, k) I T* [0 z, g你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数3 c' w4 T( g9 ], @+ D/ w* b, x9 D
其中7 q0 U$ h' k1 S0 i: V
word_timestamps=True, 4 l9 \: x& C7 i
保证了你能拿到 word,否则是拿不到的
" V, L6 J4 O7 {1 z initial_prompt = "Hello, welcome to my lecture.")
* Y! O1 v4 D3 t4 W保证能尽可能准确的断句 punctuation,但是不是决定性的。
1 l6 v1 l H/ b% ~其他参数可参考源文件:
9 T) Z" w3 n8 r6 h6 g" {8 x4 Bhttps://github.com/guillaumekln/ ... isper/transcribe.py7 i& Z* s; L2 v A G8 A( H
152 def transcribe(3 g0 y% R: r. P F3 Y j! P: L
从源文件你可以看到是支持中文的句号断句的。
* q8 k$ c O' O* }# ]6 c9 _+ F8 _- M, _" d1 {
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
) s8 @5 K: I. ^7 {# u _1 k7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) z s; K1 K q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ y2 m+ S5 R2 i+ }
& c0 w3 z; y" b3 f. N5 @9 u $ D c( I( q0 s0 z2 h3 y
5 h! ]# [( q3 s% x# r; c% H
|
评分
-
查看全部评分
|