|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; u- p+ E4 I' d' G! o9 \# N
7 o3 E4 C6 e& o1 h2 C借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
q7 L/ t0 N% L6 y+ I效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。3 A3 @8 J/ A4 e* p/ V$ n
----------------------------------------
1 z) t! B4 Q. z) i显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 S, R g2 `. C/ ?
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- t1 x! R; u1 G) I R, Z
----------------------------------------
7 `: p; Q& U F* D, Chttps://github.com/guillaumekln/faster-whisper3 X4 J( R1 s+ U: m# \( J
安装如下:+ w: V+ d+ H e3 V+ Z
1, Windows 103 ^6 X/ W7 u9 x
2, Python 3.10.117 h: H- e4 F8 p. c
3, CUDA 12.1# h# j- S: s8 v. f" B; U3 v
4, 在python 3 中安装: b1 I4 ^1 A! i1 i8 P( X
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 u0 f( e: H, D% {
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& X' E( A1 e% _' |/ w( A/ K- e
5,pip install -U openai-whisper
; @9 y# R4 H2 u4 z这是向whisper 致敬,可以不装4 X* x3 W8 j% s
6,pip install faster-whisper
/ P; p- ?6 G9 d* s8 ]; u9 Z----------------------------------------/ ?8 B8 w) [5 T7 W
whisper 我用的命令行,faster-whisper 我用的是python。. q8 W1 p3 O2 U6 d
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:5 @ C4 j, Z* J
2 I$ t9 j* ]8 N7 y7 z. L
----------------------------------------
. W3 y7 e8 Y+ Z% u( B3 }
& Q$ q3 E& g) Q9 @# `from faster_whisper import WhisperModel2 p4 }3 y6 x/ d1 K. D+ W
6 Z5 w9 A0 l# z( L' H7 o* B; R
model_size = "small"' A- P2 N( W+ l i6 h
3 X& f) B9 p2 Y3 G; S
model = WhisperModel(model_size, device="cuda", compute_type="int8")
9 h# C0 R+ ?1 I/ w, f; |! Y
+ @7 L! J5 e5 ?" Z5 J5 \# }segments, info = model.transcribe(3 ^/ @" o' r) A1 W G
sourceFileName, 0 T& ^ L3 D I/ h4 t7 [
beam_size=5, # y$ Y& z" H/ \3 l# c
language="en", ! {: ^1 [, L8 Y/ x
task="transcribe",
8 M+ l/ D$ Q, O7 p* n word_timestamps=True, , a9 U; P- f/ S/ ^1 c5 C
initial_prompt = "Hello, welcome to my lecture.")
' N( @6 g1 Q( i5 E4 J9 E9 Z- }9 ]9 F( |7 p G
for segment in segments:" F+ [2 i5 I/ U* u% _
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))# P* d& P* C% F' |6 l2 @1 n; S4 S( [
+ y( p6 U; T, A- [2 ?% N0 A
for word in segment.words:9 J" d n' H; \% y$ }1 v. F
$ d4 i/ t1 s) [----------------------------------------
# p! L+ |- U2 d( E4 \% x! J! X: `( p) @3 t7 w
代码说明:
+ {. T$ T# a5 [. a+ J1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。: V) D% n& \. R. i' l5 {
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. p) M; ]& t8 X# t
2,segment 本身是很粗糙的,做字幕勉强能用。- a ` T* _) j1 n# B, }/ o% X
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 S G* v% R( \1 S" E4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
P3 p) u) m J* G- l/ G% z比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。5 ]1 L" H3 z* b% F r
5,model.transcribe 中参数说明:
1 r' U3 e1 G, X( Q1 F你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数3 d$ R( z& X3 t" i' H1 J
其中1 g% m9 ]/ ?* |
word_timestamps=True,
7 `3 H( t3 G+ a2 K0 [6 _0 e+ O9 n4 G保证了你能拿到 word,否则是拿不到的
1 X7 y) Z* P/ e& R: C initial_prompt = "Hello, welcome to my lecture.")/ Q& ~0 {: s% X
保证能尽可能准确的断句 punctuation,但是不是决定性的。/ K$ B0 O7 ^/ F$ E# c' ]; c. S
其他参数可参考源文件:9 o- [4 @, D) U. t
https://github.com/guillaumekln/ ... isper/transcribe.py
! s3 l& s. I8 N# r$ v/ c7 u152 def transcribe(
0 E1 T7 ]/ c q" `. S: H& l从源文件你可以看到是支持中文的句号断句的。
R/ g# S1 C k6 q5 t6 x$ s' y/ O+ Y+ S; G1 _6 F4 W% F8 F; m8 x
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 K0 l# J( {6 Z0 d
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# t+ ]+ U# p2 j* f0 q8 o
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。1 Y# }; H. n$ n) ^( c7 c$ a# d
* p& p. y: ?# u1 Z5 }" Q: K V) D0 E 9 [/ r; P7 m. V! X0 m
, u6 R" Q: ?. u2 e8 p+ {( A |
评分
-
查看全部评分
|