|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ! s, f# H. G7 {# f+ `
0 B! ~, u# D8 N6 F) Y6 ~
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
, h" J ?2 m9 k4 z/ E3 L效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。# Q j2 e2 y R, e* j# o
----------------------------------------' G2 B8 ]: N) S$ j
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
3 `, Z8 y! y( s" ^* G7 F在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。& q7 [ H) O: B3 i0 H# u* p
----------------------------------------
3 x; i2 J' a/ Ghttps://github.com/guillaumekln/faster-whisper
( V& H( @- x: W3 X' v$ `0 y安装如下:' y& h. ?. z- W, f
1, Windows 10& [% N# ~) t4 Y' F0 J
2, Python 3.10.11
) j H4 r4 i0 Z% t( y i3, CUDA 12.1& A4 G5 A7 r3 n$ M) x1 x
4, 在python 3 中安装
- V% d( A- V7 G$ t6 h$ ?7 \2 F4 {pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1171 p. f% d- c! O/ F2 Q& n
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& K/ B9 O8 ^2 K4 Q2 i+ H
5,pip install -U openai-whisper3 | Z; V7 ?3 a$ b
这是向whisper 致敬,可以不装
. }. [6 X1 Z7 @4 C8 b% Q2 G6,pip install faster-whisper
' Z9 ^$ a& j# A4 D' ?# T+ W# H: v----------------------------------------0 b. ]: M- X$ ]! ^ S# `
whisper 我用的命令行,faster-whisper 我用的是python。% P. x6 D6 h& M8 W# G* v2 A+ H
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
! f1 d1 M7 y% k8 i- U4 n
7 y j8 v* M; a; K& y----------------------------------------+ _3 U: @" R8 f$ A: G
, ~4 \8 Q( K: A9 Y, k
from faster_whisper import WhisperModel* c2 Z* ~- M. Q3 }$ Q9 }6 C
! L; M1 `& I0 q& W9 |model_size = "small". e ^) `2 d, |) P- K
5 L% [) g8 b' j) w1 T: A
model = WhisperModel(model_size, device="cuda", compute_type="int8")5 g% p7 B" Y! v; x2 M
& F+ ?( g$ P0 P$ w2 ~segments, info = model.transcribe(
1 ?6 N3 L; Y, p6 B sourceFileName, 1 v3 {* C! Q# e* ~7 i8 b/ [
beam_size=5,
, G, r) _+ o; @7 G language="en",
/ M5 j7 H& A3 w task="transcribe",
- q0 {, H' u9 I9 X4 A2 I) ] word_timestamps=True, " x" C4 @, G7 W
initial_prompt = "Hello, welcome to my lecture.")$ J) F% p5 l' o5 K% ^! h
3 |7 E, m, S; {: ?( Q; j8 C+ Cfor segment in segments:/ p: ^0 S: t) m* o1 d# f2 H
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 P- S; z$ S; \* g1 p: G
; v9 f/ Z2 S& K) C9 Z for word in segment.words:3 v, v- h# ^6 r
& X6 T, [. s; E+ a- g/ x: ~
----------------------------------------
2 u2 y% l6 I, p8 @) c4 @5 M, E3 h' y$ v A, _; ?
代码说明:
' @8 W3 ?- \. A3 [' X1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。6 Z% x5 r. m% F$ I
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 c: z3 H Z+ {6 w
2,segment 本身是很粗糙的,做字幕勉强能用。
1 ^4 J' ?- k2 G3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。9 T5 ]5 p7 U! ? x- ~- G( V
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中. j6 O. Y6 N s$ u) t
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
0 J W! J, o& v% U4 i5,model.transcribe 中参数说明:4 A- x' [: w m0 x/ \, o. a! \
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 J4 T, n4 `% Y: `( O& W
其中4 v8 r ` `+ ^5 y$ c! x) U& p
word_timestamps=True, 6 K6 A1 \* H0 T; v' \0 C
保证了你能拿到 word,否则是拿不到的+ b' |) i) n$ ^" P
initial_prompt = "Hello, welcome to my lecture."): {- _6 @ E j7 ]" g' J) o
保证能尽可能准确的断句 punctuation,但是不是决定性的。: R: K" ]( e% } Z& Q
其他参数可参考源文件:* c, \7 Z* O4 U% A5 J+ d
https://github.com/guillaumekln/ ... isper/transcribe.py
+ j7 |& j3 c( b7 L5 N0 Q152 def transcribe(: r3 I% o4 d5 S" |9 X6 ?
从源文件你可以看到是支持中文的句号断句的。
! c1 m* t0 N& u. w2 b$ W& b8 ]( ~1 j- i
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
! \ v; }! R$ ^$ K7 [& X' ?9 k- Z7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。; l$ g0 t) k8 R2 b- q. I5 ~
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。) ~) q" L& r, P+ Y$ o. M
5 Z- I2 k( r: y0 J l
4 [- h) ?+ D, }4 s
) C7 q3 c, d. \0 D" n |
评分
-
查看全部评分
|