|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
% F3 q0 D, C0 Q- z) B, U" i$ J8 W2 B" l
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。 M+ k6 @2 `5 @/ x% B
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。# G2 |' o. O! q# Z$ m1 c9 T# o% x
----------------------------------------
+ K' b3 J+ a. l G; f' o7 ]! s显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
; m7 d% r& X+ y' o, h3 ]在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
3 M: J# c+ y) `6 j4 T( h5 s8 y----------------------------------------
% M" q6 A- H) {6 v/ J* O V( fhttps://github.com/guillaumekln/faster-whisper: q, l# ^5 x c+ z
安装如下:- n! r2 @+ c" w g9 K
1, Windows 104 |, q \* ?4 _6 |2 j
2, Python 3.10.11) E! A, C p- ]4 A
3, CUDA 12.17 ~ O3 z1 d* G1 ^7 B6 i
4, 在python 3 中安装9 ]- H0 u4 `" {9 k, P' Z: O
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& \- `8 C' x2 Q9 Y3 g o( Z/ @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 [1 l2 d2 W& Z/ a+ Q) S' o5,pip install -U openai-whisper
. X% c1 B6 n1 i* l/ l这是向whisper 致敬,可以不装
% }+ s6 U/ Y8 e8 s% @( v3 c6,pip install faster-whisper! {- X' _9 k4 y4 @# m
----------------------------------------
# W0 ^& q! \" b \4 j" \: G: Q& H2 ewhisper 我用的命令行,faster-whisper 我用的是python。* `$ V3 w. N; k z# {
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 B* D2 ~5 ]' T' o; |" [2 l |4 \2 a9 \3 y
----------------------------------------; F: P: c% V1 |' e2 W/ x
2 K p; A7 J/ v* V
from faster_whisper import WhisperModel! F3 m" F% d k' s( `
- |2 l; S" L, Vmodel_size = "small"* B" h" o/ d. Y
) u3 u7 ~: |; {, {) ~2 N9 Z: p" _5 Kmodel = WhisperModel(model_size, device="cuda", compute_type="int8")% ~8 t. k: E, ~, c! x* D
2 P# L5 x* i+ l( S1 Fsegments, info = model.transcribe(
4 P* Q8 O+ s; ^& t9 Q# D% ~, Y sourceFileName, 9 _' w7 r" j$ l. W" P- M
beam_size=5,
4 y$ O2 p+ j( R9 E' i language="en",
) K. ~4 h( v, M. F2 ^5 L4 @ task="transcribe",
0 e3 l' w! v o8 E+ f) R2 [7 M" C word_timestamps=True,
% V4 _/ o1 o, n! M initial_prompt = "Hello, welcome to my lecture.")- z/ f, V! J: b! D n/ {6 N6 x
& `* \6 Q4 i5 n+ Qfor segment in segments:& F. p5 Y9 y0 [: [# j F2 i
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))2 Q( r0 v+ i9 T m4 ^
! j: `& q$ `) D
for word in segment.words:/ j; y- N% D2 [" F+ m6 J
9 @' X: T; h3 G2 P6 c
----------------------------------------
6 A4 l. }) a! o& Z) U, t+ {
; ~% }! h* ^& G) O& q# j代码说明:
) W7 i0 ]% q& Q: T1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。6 Q: T# L9 V) o
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。0 L3 S ]' e! v. b9 f
2,segment 本身是很粗糙的,做字幕勉强能用。+ f7 X8 G P8 ~7 ` Y) f( o
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; I! Q5 j, W( t4 c4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中9 z. ]# D/ b. W+ T' f
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: s( g' S5 o& R/ y5,model.transcribe 中参数说明:2 R+ E, }+ [# V2 m$ M; l
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数$ P @6 R0 b+ v0 C% J9 K
其中0 l, A6 |! n# d$ D) k
word_timestamps=True, 6 G. `, B3 R1 d$ V
保证了你能拿到 word,否则是拿不到的7 h n7 X* \$ ^+ m8 ?3 {( N6 A" p
initial_prompt = "Hello, welcome to my lecture.")
9 ^, l& u, [) t+ D9 _, G( K保证能尽可能准确的断句 punctuation,但是不是决定性的。
. R6 T* |$ N) J* F" k' ~其他参数可参考源文件:
' w4 }, n/ A$ ~$ @$ E& E8 Ghttps://github.com/guillaumekln/ ... isper/transcribe.py6 M3 x) k m( E! g
152 def transcribe( B0 y+ m, e' E2 I% y
从源文件你可以看到是支持中文的句号断句的。
5 F, M D4 I a, e9 Y+ ]: z: j
' G4 W3 f* L3 d0 G6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。' u! _- l4 z" L. T$ O9 x
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。7 }& C# l) M8 }- B/ W7 C
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
/ U, P( I: U7 M
' y& y8 L2 `* J4 @8 Y" [2 d ! D, n! }/ l% ^8 b; U! W
5 `) U: y; K8 k x5 d
|
评分
-
查看全部评分
|