|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * ^" r' B9 r2 H l. U' ]$ N I
. d) Q2 W; J2 c. K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。* j0 V6 }# r M8 w7 z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; D* ~$ w- f ?6 p----------------------------------------
* z- @. d S, H0 U* [5 r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。, ?1 P2 B; R6 R1 R$ a6 `9 a1 d! F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
8 V* t+ A- A' p) S1 n ^----------------------------------------
4 C E# ]$ b3 G9 h+ m! f6 J& ?2 dhttps://github.com/guillaumekln/faster-whisper
/ [3 Y/ T9 C2 V8 K& D% i安装如下:: t7 M+ V9 E- L: A" ]3 J
1, Windows 10: d* r1 R- o' P$ d2 H; y# o
2, Python 3.10.11
7 N7 P; ]/ I; ?" k" ~! V8 b2 H3, CUDA 12.1
, M5 @6 f- \. G0 Z9 {/ T4, 在python 3 中安装' \0 ]+ m: M4 F& v# A
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& f* u+ O1 r7 ` k
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ {# P8 m1 Q$ y! @2 h
5,pip install -U openai-whisper
+ Q$ G }; T* Z1 q1 C这是向whisper 致敬,可以不装
& Z o0 m: F( v" b2 b7 j6,pip install faster-whisper
$ ]( u8 L% H" i& g( E8 `! @----------------------------------------% ?# k+ U3 a* q8 \! r3 g
whisper 我用的命令行,faster-whisper 我用的是python。
`. u% t' h! B- m& I下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- l1 |8 U! |2 V4 g0 b% S+ m
2 g' V. T" ~7 r----------------------------------------
0 M; ~' ]% n T5 [- [4 J) Q! w' W' w4 p( B3 Y( |, L
from faster_whisper import WhisperModel. m+ T: _- m% D+ C
; N# W/ `% o' Y0 ~' {5 Hmodel_size = "small"! c6 K: \, k# r, a/ I) s
% R( j& H- K# K/ c1 Z6 G2 M$ b
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' O6 b; n5 q2 g6 {! v" X* a5 a6 H, J& W" v, B) Z! `
segments, info = model.transcribe(3 E( R6 a4 N/ N! @1 c) t
sourceFileName, & Q) Q. O2 x c( j
beam_size=5, ' ?$ f( K) ]" A1 E
language="en", & i* j& A0 h9 b; N0 q
task="transcribe",
" L5 E2 p$ f6 I( T$ {' D word_timestamps=True,
, i6 z- _/ J) L5 K7 y* a* D; d initial_prompt = "Hello, welcome to my lecture.") t/ e% m% t: g- k! e+ X
; Y0 [& ?1 W" e/ w6 nfor segment in segments:$ Y" ~* R. r/ e1 e% O _
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)) r- ^# k h' ~" w& R& {
, x. h$ b% B3 T1 ~, E/ ~7 ^
for word in segment.words:: I- v( E+ c, Z5 t+ K4 K8 D8 o' S, h
* G& E# l2 }$ I' l' Y----------------------------------------* N$ i' D* S/ P
* m2 r1 E( a5 @3 p" j# @# ~" D
代码说明:9 @7 }" v9 f. J% _$ g/ J% b
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ t7 L. |: C. J/ Y但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' A1 u( x7 N; I2 D; K% ^; x% \2,segment 本身是很粗糙的,做字幕勉强能用。+ i f& S+ h0 L" C
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( M# F+ k8 |2 p! H. Y* o4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 {& Y+ ^, p, d4 k/ [
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 m; ?4 _& @# Y8 a5 F( ^' h) ?8 }
5,model.transcribe 中参数说明:: d6 _& q ?6 v3 D9 P- D0 n
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
: V4 ?0 I( G7 K其中
0 i0 R$ L7 H6 I word_timestamps=True,
# F4 ?+ ^3 P3 f/ f* p保证了你能拿到 word,否则是拿不到的
- B8 |% C: K" ]# c5 M" s initial_prompt = "Hello, welcome to my lecture.")
! `) @; | O6 ?5 j保证能尽可能准确的断句 punctuation,但是不是决定性的。% w1 n- i9 E! R0 k. X0 c* U2 m" a
其他参数可参考源文件:) `! u( R, n* s) N) M S; ~1 c
https://github.com/guillaumekln/ ... isper/transcribe.py/ A& f) |- Z. }/ I1 n, j
152 def transcribe(
# {- _1 k' Y" [; s; b! {从源文件你可以看到是支持中文的句号断句的。
5 r7 S% f Y6 m1 [/ o; m1 b3 T2 f) T" s1 g
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 @5 z8 \1 ]/ M
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。& ?( e4 O8 ~& E' v8 X6 ]; p
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。$ y# V3 C) |% k, W) [' I
c1 A ^' g; ?8 h# ~. h1 [7 |, F
! z* U6 _" J* S. b
' s2 u" ~. ^1 O4 O2 k
|
评分
-
查看全部评分
|