|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 0 ]) ^1 t) [5 D1 J9 \/ V1 S
# V P+ s5 s( q" x) j借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
5 I1 Z" z* W S8 L. ? z效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
8 ~! z: G0 A7 w. Z----------------------------------------
8 ?& Y8 ~6 m1 @1 k L显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: h" `, V* i8 V2 M5 B9 y在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
+ M* `# ^$ O" B: i----------------------------------------
" t% G- H1 O( N4 _6 x5 `3 } Lhttps://github.com/guillaumekln/faster-whisper
7 B1 X5 p$ Y+ ^ I3 o8 T安装如下:
0 p# X2 H8 T5 D# @+ `3 U0 [/ ]1, Windows 10
; N/ t- i$ o7 n c6 y& p3 b i9 O8 j2, Python 3.10.11, Y# I/ u1 q# Z. |# s
3, CUDA 12.1
6 U& |8 a, S7 y( H4, 在python 3 中安装
7 l9 \, W' _& O+ p0 |! ^8 G3 u& ipip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
! S/ ^( M% B1 i这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。6 l1 p+ n( B; ~5 n# s- U+ ?
5,pip install -U openai-whisper: H" Z* M7 \- D X/ G+ O, ^
这是向whisper 致敬,可以不装
% d( R" z+ q* `! t! {9 m6 _6,pip install faster-whisper
* K. I+ [5 [4 C1 \9 K I----------------------------------------! q! K, j- S6 A& U
whisper 我用的命令行,faster-whisper 我用的是python。
p" T) Y6 U3 S2 X1 E" j下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:. v1 z5 j; R( ] G9 P: b" F
! C" @* f6 Q' V& f( w a' o9 P
----------------------------------------
: @8 U3 |5 C" m5 E+ b3 n7 f0 h
+ @6 R# U1 n! q. E" Afrom faster_whisper import WhisperModel
9 ]1 A9 I$ l) w' g' _8 N" I! y$ n1 F9 {" W y e8 w- b; |
model_size = "small"! ]% L+ v5 A/ x) M% J0 l' A+ u, d) ]
; U3 M( |: }! {5 l- [; K& ]
model = WhisperModel(model_size, device="cuda", compute_type="int8")
; ~8 s, R+ C: W, J! r* C
! C/ T. ~8 W% f* A( qsegments, info = model.transcribe(
5 K; Y& D# i. M sourceFileName, ) h9 e5 c- V" E, ]- p1 [6 i$ |/ m
beam_size=5,
( @; I! g: b+ t: h' _% a language="en", 5 u `" x/ Z7 B) r9 `
task="transcribe", $ W$ W& T0 ?; z; k
word_timestamps=True,
9 n( r& ^8 x* L" n) r0 N6 N: O initial_prompt = "Hello, welcome to my lecture."); @/ j) o3 ^0 h& f
1 ~8 E2 `- d( P0 O2 [1 {& Y- Kfor segment in segments:
0 z8 `% R4 n1 U7 H( p print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))4 m2 c. c1 T8 e* S, c
1 e$ f! w3 G5 Y2 x( m" H
for word in segment.words:9 o0 N9 w5 o' R4 a
6 s. W3 U& p* ~, [6 r----------------------------------------
6 \: o! U5 Z% O. F; t- v
; T7 Y7 z- E/ Z( ^代码说明:- x; E4 x: C% a9 h2 d9 G) L+ |- N
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。" ]! f4 W2 E* L. S1 }
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
# `1 r) S4 C. H$ g$ @3 o2,segment 本身是很粗糙的,做字幕勉强能用。
" _1 a4 `: u: ]3 B3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。4 F3 |$ i0 X" b( A. F2 u
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- ?7 {. Y/ @0 d% y
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。8 N8 A( g! R- n! G; }1 n& x
5,model.transcribe 中参数说明:% d: F1 ]1 m* a _# x% r% h% l
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数# E- X8 x3 r$ }2 ?6 {2 R, D" s0 U
其中
: w7 Q1 B* q" _. o7 Z5 b word_timestamps=True, & q2 b4 y" P: Y7 w
保证了你能拿到 word,否则是拿不到的- r' q o8 v7 x
initial_prompt = "Hello, welcome to my lecture.")
6 y; e% R+ }# k, P. }保证能尽可能准确的断句 punctuation,但是不是决定性的。
# J! K* B4 M e9 T* q1 L4 n2 l g其他参数可参考源文件:; w" k Q6 }/ W& n0 }; i
https://github.com/guillaumekln/ ... isper/transcribe.py7 R5 |# k9 O+ R- D
152 def transcribe(4 x9 f f7 I/ w% `
从源文件你可以看到是支持中文的句号断句的。. @1 n* c+ U5 f" g- g8 G4 t W: t
4 S, e/ [4 h5 y% V, K6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
7 ~) R; ~1 N4 y7 G6 }8 R) j& m$ X7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。$ }8 P! r' z& c4 }; f4 B+ t* [
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。6 h- @3 q( o) W& B: _4 Q
" b( s8 j9 w1 [! h1 B: P9 I
4 Z1 v" E8 t: g8 @% e+ v
5 d6 W1 n$ f. |* O8 T% l) S4 p: c |
评分
-
查看全部评分
|