|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' _' m$ m, j7 s" K1 l7 F- V7 T) c2 `( d/ E
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, I& X6 u8 i# ~1 G效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。7 F8 O( E. _5 _; `
----------------------------------------
5 Y# U( U* T; j) j$ W0 r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
* ?4 N1 f$ C6 |: Z' e# ^在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。; K* M# A) O0 L
----------------------------------------
( k# M- _4 F$ I- ?4 E6 S* _. _https://github.com/guillaumekln/faster-whisper
( k7 ^3 h6 T& |: Q7 e$ `安装如下:0 I1 x1 z2 {/ [$ N
1, Windows 10& l {) J. D" [7 @% c
2, Python 3.10.114 H& F2 y3 p2 }4 U7 V/ O0 ]
3, CUDA 12.1: c! u6 n/ I' L, x; R* t8 T+ V' W" ~- c
4, 在python 3 中安装( N& ^0 i& v0 u; ]: C8 V# C+ r
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* I& f" T+ j2 x% S这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
C% D) c! f. F$ J5,pip install -U openai-whisper; F0 }" M( p o" i. r
这是向whisper 致敬,可以不装
: ?( ]/ e# O7 S4 W0 q6,pip install faster-whisper
7 z4 E" h! D1 E% {$ x- D5 t----------------------------------------
: x7 ^9 L* l: K) Xwhisper 我用的命令行,faster-whisper 我用的是python。* i2 o; N5 [+ T
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# i- X* |! e0 \: w
7 Z, b3 B& k8 u6 V; C9 L7 A
----------------------------------------
/ b: w9 U8 S3 w- i* W# V6 y
' g# [5 J5 {" `! u W: Tfrom faster_whisper import WhisperModel2 C# |# `6 a% A" M# B# X1 j
# Z7 G+ j) f: n9 X1 |
model_size = "small"
" X% r% V/ n& E$ D( t- [, p/ y! t8 c$ k/ q( h2 B
model = WhisperModel(model_size, device="cuda", compute_type="int8")
! z7 D9 c# s3 r" C, r% p: z) t& f9 h$ n
segments, info = model.transcribe(
5 W% b8 B3 G. U$ S% G1 P sourceFileName, 7 c& t9 R3 b3 M1 v
beam_size=5,
* t' U" v+ g7 p( l9 R3 \$ L language="en",
$ W1 e& A2 d& T a; N6 L% y task="transcribe", % k8 A- C' }1 P3 I6 N( }
word_timestamps=True, ' ~6 o D5 J8 x5 l4 d
initial_prompt = "Hello, welcome to my lecture."), I' r, W# v4 `$ U& p
4 p" }# j; h) pfor segment in segments:
8 Y! h4 C9 J2 U" l# v print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
7 L/ V. T( M; `, E5 w Z4 \$ c- L& R/ G* I7 D( B9 P
for word in segment.words:
( h* @( I0 ?$ n $ C0 `. z) j1 }8 R5 e2 i7 B5 Z
----------------------------------------# ^( X! t, P" {+ t# S+ I% Y9 D/ J
$ z A/ y: q0 E2 ?代码说明:- R U/ P3 F, [# q6 i6 ^
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。) M5 `9 Z5 e( i' J& L
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ Q& K$ U' K; p. P2,segment 本身是很粗糙的,做字幕勉强能用。 W/ t9 U3 c; C) J) l
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- f& z" S. Z" I; w4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中9 H/ g: z4 ~6 Q3 i" l/ H# f2 ~! `$ u
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。" n7 ~5 g. j8 ]& h
5,model.transcribe 中参数说明:+ T E, f# q% y& z
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
8 x* `, \) e7 E, I0 ]) W其中5 ~/ `. |! }. c$ n: R1 O$ j+ s
word_timestamps=True,
( }2 \7 g7 M/ t* |; n h, t) C保证了你能拿到 word,否则是拿不到的
; v( R" O% u0 A/ p! ?7 u* G initial_prompt = "Hello, welcome to my lecture.")
% k5 z0 [# s0 G. F保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 h$ C, }5 N4 r/ t( E- c% A, A其他参数可参考源文件:
7 t( V; _9 _" Dhttps://github.com/guillaumekln/ ... isper/transcribe.py
% c7 Z8 ~6 e; I) k( t152 def transcribe(
+ \. S. ^2 K" e' Q- O6 W从源文件你可以看到是支持中文的句号断句的。* d# ?$ u; Z& D( K {
( q3 [" S# a* X+ t( Z: \6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
: \7 T$ f( K3 U9 O4 K6 Q7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。' l' C- w9 o! |7 {# o
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ B. {5 T+ _& Z
2 U+ I/ M# s, m. v) C
4 {" T! u2 |+ g) S& y
/ V/ Z" {( |/ Q |
评分
-
查看全部评分
|