|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 . U8 K- l2 p3 I4 b
6 D. T! |1 ?! P, E
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。$ _2 j& @6 w& {
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
! B( f# b& | `( f: l* N j----------------------------------------
2 X+ s# x( t/ y/ [显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: A3 \& Q6 Y: i, L0 f( {) M' e7 T) X在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 l; I1 D* m/ k% F! L
----------------------------------------& L$ B9 Z8 _( J; i0 L! {
https://github.com/guillaumekln/faster-whisper& `8 D2 ~7 Q0 L0 G
安装如下:
9 Q: Y! p: ?% x U- U! D1, Windows 10
+ c% t; l& N# q4 ~1 q2, Python 3.10.11
9 v5 C* |' I) l# i' x7 O7 [5 J3, CUDA 12.1
2 w3 b n2 J4 s4, 在python 3 中安装
) J3 h% a+ h6 M# E) j* ?) k8 r zpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& O9 I- U# L. G# l" Z m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 w" }5 x" s5 A# u% ?4 L5,pip install -U openai-whisper
, F, P# R( I7 M: h. \- N f这是向whisper 致敬,可以不装
8 z" N6 i2 |# Y. z" [, D% ]8 V6,pip install faster-whisper7 Y' A* _5 T" [- ?- ~
----------------------------------------
! V. w$ E* f' ~; hwhisper 我用的命令行,faster-whisper 我用的是python。$ h& s, I" D) [ H0 V: N6 _* r
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
3 S6 P$ F% r* R* a( `% c
; G9 ]9 ]5 ?0 ~( _- q8 G----------------------------------------7 ]# o- p8 v0 o
' ^& e' O4 K- S( f; [8 Y
from faster_whisper import WhisperModel8 p+ V8 ]" x. {/ l2 ?5 o
4 L2 r' R8 c0 A& E+ omodel_size = "small"
0 G9 M* d/ K ]" r8 l1 o
, F! {& i% M" ]4 l+ _model = WhisperModel(model_size, device="cuda", compute_type="int8")& ]* V, p8 r) i! E' F
@" [7 z& ~4 z0 e: msegments, info = model.transcribe(
- K. H. K8 l6 u: B. w. N; J& h sourceFileName, ; X, {6 P0 T3 i
beam_size=5,
9 E: ^! g* S6 {& k5 k language="en", 1 E @! ?% o3 J" x
task="transcribe", % I* m0 U v/ T. }) P
word_timestamps=True, 4 Z$ i7 l! y( K/ D* Y# R' y+ k
initial_prompt = "Hello, welcome to my lecture.")
7 D7 o5 t5 b$ K/ {( A& p6 \+ v, Q
& N j% M' d8 H* z. L- xfor segment in segments:
h8 D o2 ]; x3 H, o" R/ C/ q print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)): V' Q3 v7 ~& f8 Q- s% o
, C/ K8 Q% P* s+ \6 z2 A
for word in segment.words:
- c; @+ S% y7 f3 e
# e# |3 U1 |* X----------------------------------------
0 h7 \& S: v" w; M; {2 a E5 A7 |" V# R
代码说明:( p2 V% v. U. d" I8 c; _+ X
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
. n8 q2 ]+ p- N) G( x3 u9 j但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。' y& e" \* l. M2 P* w
2,segment 本身是很粗糙的,做字幕勉强能用。
, ]: [9 v! Z: m: I! |3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。% R( z6 S/ A, t* J* M
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% k2 y8 \# `' w$ t0 P: j比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。& ?% X4 H% ^% J2 b1 K$ }) N
5,model.transcribe 中参数说明:# O# \0 ?5 o* O, G# W9 S' B
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数; H& o% c( N, k) x- I
其中& f) e; L- J3 s8 g/ Z" e+ R
word_timestamps=True, # c8 K3 h4 x4 }3 C3 c9 S- ]
保证了你能拿到 word,否则是拿不到的
7 j. o2 {5 O; P @ Q2 P initial_prompt = "Hello, welcome to my lecture.")1 J2 W _/ l* e+ Y# N: W0 ~: v
保证能尽可能准确的断句 punctuation,但是不是决定性的。
- E% a: ]+ p3 R; j* y其他参数可参考源文件:- x2 D: @$ x3 h# `! I1 ]8 b
https://github.com/guillaumekln/ ... isper/transcribe.py$ D9 j S8 e6 u0 R: e* i) ?" _; ^* H
152 def transcribe( @4 V$ R d6 v1 a. A
从源文件你可以看到是支持中文的句号断句的。, @( m& d" s9 T B8 s9 }; U
9 C' U2 X+ a( H! c/ n4 z# J, V! |. [9 t
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。3 o- _" ~- t% g0 ~; |
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
9 q8 Q; ]% q/ j1 D8 e. ^1 t8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
7 U. Q8 L, N. c6 c. D
# k3 }; A/ J6 h& {0 ^
6 q+ W& Q4 _" X9 x0 S
" J/ K; a& S1 F$ n* K, ]7 R) b- ~ |
评分
-
查看全部评分
|