|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 . k$ l) v2 X9 W0 |2 `, ]
3 r7 { G1 y; ~
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
# W# m" H4 V$ z& v7 u效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。4 i! I5 a' c0 f) F* h, y9 M/ V
----------------------------------------
/ e9 v: N' @6 r" y( S7 ~ R显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
' i/ r6 v6 ]4 N) E* y! Y在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
4 w7 U. e/ L+ h" `----------------------------------------
2 s/ {3 {8 E7 g! e# k0 Khttps://github.com/guillaumekln/faster-whisper- C" ]+ q2 R, p4 t. y% {
安装如下:3 \( W% @1 P" e+ E; H5 I
1, Windows 10
4 D4 [ e9 Q3 s+ W+ J2, Python 3.10.11
, z8 x1 _* w5 ?0 H' J. F0 ?4 a3, CUDA 12.18 X1 i/ z+ U7 u1 e$ B* h
4, 在python 3 中安装
# J3 v3 G3 M: epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" {( i# _, o5 X
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。5 w- s5 Y3 b+ \5 D& R1 P% Z( R% i
5,pip install -U openai-whisper( B) |" W4 i8 ~. M
这是向whisper 致敬,可以不装
/ } n% v2 V. \1 \4 v% \! q. t6,pip install faster-whisper P8 ?! J+ v7 k! J5 H
----------------------------------------
1 r+ k6 g2 A2 S% n! D4 swhisper 我用的命令行,faster-whisper 我用的是python。
# s+ v9 K. Z) b. ~) H3 f$ b- O下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; H) p; T$ g3 F, Y* ^9 f
' U* o( s& K n& _, u----------------------------------------8 m( F: j0 y6 t6 p- ^! Q! Z/ S
7 ]1 T. w" J. c5 t' Y$ M3 ofrom faster_whisper import WhisperModel
% a, I4 K$ m% _( i
) E. ~3 l: Q2 n" @. Y7 l$ kmodel_size = "small"
! A. k. L: }2 {" o' _ X1 m( k
) g5 p8 U, t- O) c( ~model = WhisperModel(model_size, device="cuda", compute_type="int8")8 [* c! B( X" Y; P
$ r9 R" E/ V6 s1 T
segments, info = model.transcribe(
% A2 E, S( \1 h$ G/ b5 _ sourceFileName,
5 {; f) I" H( g; x- a5 a beam_size=5,
+ e/ Z# @# [! F, l. [: E. a5 l language="en", 9 ]& ?1 ~$ }# @ A* N
task="transcribe",
, C2 ^. W, H, K& ^5 } word_timestamps=True,
3 T. ^# ^9 v* ~$ ` z3 m: g initial_prompt = "Hello, welcome to my lecture.")2 v( x- `* b! T7 q
' b( W" G" _ b) C1 Z' h, i
for segment in segments:
5 x" V$ x6 Q0 K3 v print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))# D% z& E2 U: G5 D+ F
. T# Z0 K2 T0 E& Z' m% _ C5 e
for word in segment.words:2 G, P }4 B% n; W# w) Q& j
" L8 S C9 a" ~9 w" p7 N7 }
----------------------------------------
2 E! I7 i2 E9 |3 V3 K1 w$ [2 |/ X* `9 u! s
代码说明:
8 E, x& }" }3 ^3 g2 Q- _+ F# q1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。; h5 T* y8 J D0 a9 C
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 K8 \- W6 s2 Z5 Y# r: |5 ^
2,segment 本身是很粗糙的,做字幕勉强能用。
' @: A$ E9 {$ U) @- o5 B% L3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。+ c6 W& {% F3 |
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中3 V* l( O; o0 X0 c2 q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。 ?* Z8 g& T- l
5,model.transcribe 中参数说明:7 V" W$ O8 ~6 }# M
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数. P# P* e0 I+ m/ A
其中) Y+ w! C9 ?- |0 j7 m8 M
word_timestamps=True,
: L4 @% C9 E# }5 Q/ y, \) |, S保证了你能拿到 word,否则是拿不到的/ C S! ?; S* @6 t, B6 m# O, ^
initial_prompt = "Hello, welcome to my lecture.")
' S9 J7 v; s. u m' U' K保证能尽可能准确的断句 punctuation,但是不是决定性的。* U2 Y# o- k% z. b
其他参数可参考源文件:) w: l( I; C7 E
https://github.com/guillaumekln/ ... isper/transcribe.py3 _7 }/ @9 Z j6 f) o5 ]
152 def transcribe($ I, R- C* d/ I! I8 {1 O
从源文件你可以看到是支持中文的句号断句的。
: u3 _, V' @ Q
% ~4 c- M) l' V; @2 i% h6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
& M$ t$ i( P1 X! P& r+ R3 A7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) Y0 H; y. r3 G/ b0 x2 R3 U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。 F0 `1 a' [8 Y. x
: `. `% l6 K1 ~3 C4 {; b; a& E
( l5 j& Z& y; [3 d" t( I: Z# C' Y) J
|
评分
-
查看全部评分
|