|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
, ?6 Q9 v2 A- K! T9 ]8 l, C: p) J+ O0 a& G
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ O2 b; h+ I7 @: v9 u效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
! I# W' Y$ a" e4 H1 O/ e( h----------------------------------------. \2 Z N5 V' O& k+ t
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 I6 b, D2 r; m$ |7 ~$ B在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。' N; s' P% _$ w
----------------------------------------, X# R5 h6 `. B9 y
https://github.com/guillaumekln/faster-whisper X4 R* L8 c. D: x3 U' m! I8 y( b! `- ?
安装如下:2 R% t6 v9 S3 J3 D
1, Windows 10% d- b! X8 u7 s% s( v! e& L" R2 S
2, Python 3.10.11, t- t m2 W$ A6 x1 @/ q
3, CUDA 12.1+ u, M+ s7 Y& m$ p4 a+ ~
4, 在python 3 中安装
& F# z* ] ~. P1 y, q' r' Hpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117, B% }* p) w* a
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
; |& J6 Q0 o* A, g4 V' o5,pip install -U openai-whisper1 ?4 Z% P4 Z6 r( O: u. _; r" \
这是向whisper 致敬,可以不装
T- e0 U4 M& v5 D4 b% w L5 g6,pip install faster-whisper. W3 i2 ^: M/ _
----------------------------------------8 Z: M% V( k) [$ S$ `7 G
whisper 我用的命令行,faster-whisper 我用的是python。: I0 _2 v* z8 z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
0 u) ` ^4 O" [5 }
! W" c" B+ A' D1 b g, f----------------------------------------) T' u4 ?. p9 m+ y
1 p6 ~, O1 n9 m% J3 ]; Y: bfrom faster_whisper import WhisperModel! d6 N3 Y1 N! L- g: w) y9 M
. Y1 \$ A% w$ }( Gmodel_size = "small"
- \7 T \ P# A7 A/ _
1 P6 t) D+ O& W0 _model = WhisperModel(model_size, device="cuda", compute_type="int8")0 g- I% U2 W @0 k$ ?! \* D3 L0 r
+ |, z, T) S9 L" r' q1 {6 P; @ ^( z# csegments, info = model.transcribe(. X5 Y4 W/ M. m" w
sourceFileName,
* q/ g8 M: j% [# h0 M2 I beam_size=5, * ^( \& b5 F% K- L3 d* U
language="en",
e( ~9 B" n, p Q, k task="transcribe", & [5 H: G+ h! x
word_timestamps=True,
( Z. z9 }3 |8 n initial_prompt = "Hello, welcome to my lecture.")$ [, f4 i- ^$ E# X$ K
2 d0 r/ Z, m; |/ \! `2 [ R9 A% Sfor segment in segments:
X/ \; |$ v$ r y g. S6 t print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
$ L/ J! [& v9 g" ^: \' l: u, B( h3 ~! t+ z% Z
for word in segment.words:% I+ d" _8 R) Q# u. X
+ j5 \' W+ P/ C# P----------------------------------------
# h4 ?( y* z& S# {+ N+ \
4 H2 ?8 J$ q- m; ]+ k& ?1 _' X" ?代码说明:( }8 ~' q# f+ W! x2 l# Y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
% u* {0 r4 I5 c; @% B& P但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。( t! |: `! ]( K8 t
2,segment 本身是很粗糙的,做字幕勉强能用。 I y {$ T# X
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& q7 h% ~" ^4 E6 q l7 [) L1 }9 j4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
" b) f5 n4 ]2 `( P0 s比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 T% B0 o" [( g- R$ m
5,model.transcribe 中参数说明:4 x% h! F. w. s6 x, V# O5 J% b* _
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数% |9 K; |; r1 f$ O5 F
其中
' g+ E: k! @ d) V3 z word_timestamps=True, & G4 J6 J* \3 j& ] d: J, u
保证了你能拿到 word,否则是拿不到的
3 Q6 m Q' K- z& Z; u2 u initial_prompt = "Hello, welcome to my lecture.")
2 {9 v# d+ K& n& R保证能尽可能准确的断句 punctuation,但是不是决定性的。
. K+ b4 e/ S% s其他参数可参考源文件:9 n# H8 t3 g! T
https://github.com/guillaumekln/ ... isper/transcribe.py% r2 U* N* `& O- \
152 def transcribe(
7 G# ~' _1 j, D. l& Z( [; |从源文件你可以看到是支持中文的句号断句的。
U3 L1 e' n) q$ O
$ d$ w! c( ~ u8 q6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。& o* Z" M( o5 W9 \5 {/ r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。, l$ w$ Z2 _' l, n$ h: r2 u
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。. f# H) l0 }: `$ E
2 [$ Q/ N+ k$ o
+ e' k w% e1 ^5 d
4 Z4 d$ O+ O7 c: |! E |
评分
-
查看全部评分
|