|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 , H* C1 T- a' c
2 V$ h# |/ `( {% J6 ]借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。' s/ l& k' S) _* ]) k$ h3 H
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。7 U" x0 A5 D C% q+ F W2 C' T) q
----------------------------------------
1 X0 g- `: W6 o1 N) C0 o" v. {: E显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
! p4 n- m* f! W1 ]在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" Z8 W: l% m/ h& r6 J5 D----------------------------------------0 O* s3 W/ ~+ M. |: G6 s5 u4 s. l
https://github.com/guillaumekln/faster-whisper
* }& w1 t- ] n9 a0 X% E/ B安装如下:5 A" l( {" W+ q3 }0 y' o
1, Windows 102 P' o% M8 }: k# R6 o
2, Python 3.10.11
7 x' ]: h5 w& L6 _3, CUDA 12.1: o4 M3 H7 I! r1 O/ P
4, 在python 3 中安装3 Z- Q2 ^" R r, N$ q
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1178 X7 q# S) F! v; T0 \" V* L
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。4 S; ~3 ^4 W& f7 B7 O
5,pip install -U openai-whisper
' k$ W+ j7 g2 j这是向whisper 致敬,可以不装
/ E7 Y! \+ k1 t% |6 }8 Y! @, X: G6,pip install faster-whisper5 Z2 R* d( ?2 h3 e/ Z
----------------------------------------# l( U$ y2 ^( r8 }% M
whisper 我用的命令行,faster-whisper 我用的是python。
- w/ W ^( I- E. Q下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:2 ] ?; @ ]! Q
9 P# ?$ c$ u" K$ J% c----------------------------------------' L6 A2 B5 ]* I8 h5 c* V7 X
4 I8 ^ c, {2 M' S: Bfrom faster_whisper import WhisperModel
# U D0 `2 r( d; Q' t3 [/ v0 | ] ? V
model_size = "small"
/ L! x/ I5 s3 \3 h+ z( Q% `# `; P: }2 j+ o |5 S, s) L
model = WhisperModel(model_size, device="cuda", compute_type="int8")
. T2 u* ]: O Z
2 ]0 p/ c5 f2 r+ Xsegments, info = model.transcribe(% W$ h2 C6 t d# B* s! `
sourceFileName,
N' n) H7 r4 i3 U0 |) z1 M2 t beam_size=5, % l' O4 j0 j+ d( x' @! K
language="en",
! J3 w5 l# p% e4 k. R task="transcribe", + B: B: X, }2 D2 Q* y6 B( [
word_timestamps=True,
% t; r0 C7 S+ o- Z# W" J5 M initial_prompt = "Hello, welcome to my lecture.")
$ g9 w4 [7 m2 @9 w T6 X- g! u+ w0 z, A5 R' Z& y" i" N( w! o, L
for segment in segments:5 y+ T5 O4 c$ d' K8 O3 X
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
( ]! ]0 H& C$ Q( f* W8 a4 X# j4 M* t" Z, s+ V
for word in segment.words:
* [: {. [; F. B, U, A7 H) p 9 u7 ~* S6 j+ Z, |% y
----------------------------------------+ j$ i5 V3 f; E6 B( M
% D2 N3 S; O+ X1 F. g) s代码说明:
8 ^& S$ C4 f5 u. g& x1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
/ _! m) E: Y4 @3 ]' T但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ g. p1 g+ l( z3 s' L* q2 g+ u$ r
2,segment 本身是很粗糙的,做字幕勉强能用。
0 J+ @/ G' t; D- e1 t- w' R3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( X9 ^- y2 C1 S/ d2 n4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中. K* {1 a+ I+ D, {! g- U. H
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
$ ]" N! W) K q7 ~5,model.transcribe 中参数说明:' h4 K: N) r; ~" J9 S' d9 W
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数0 N2 Q$ O* j( Y* r9 _
其中
9 F# R, U' s% | word_timestamps=True,
! g) Y F0 A+ Q V+ I8 q) n6 X0 G9 E保证了你能拿到 word,否则是拿不到的
. c1 T; z* |3 k2 c8 H initial_prompt = "Hello, welcome to my lecture.")
; n; _, y* W/ h- ?. I% G/ d- J保证能尽可能准确的断句 punctuation,但是不是决定性的。5 p2 k: o L H2 S0 O+ s* Y
其他参数可参考源文件:
2 l% W# c' m: A0 a2 Phttps://github.com/guillaumekln/ ... isper/transcribe.py
) R* G' Y% z3 h. R1 ]6 U5 S152 def transcribe(
1 D( `1 Y. c6 x$ o从源文件你可以看到是支持中文的句号断句的。
2 s- ^9 S$ g9 t' A I2 K$ B& J {; g- }8 s/ F6 {
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。: S& G2 ]& Z- W# `% l8 \+ J
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 o" v. k1 A9 I! j, Q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
" I5 \4 y! B+ w9 V
8 _7 U& l1 Q$ N' r1 L- n
$ W; y9 `& Y/ m0 Y4 e$ F! C& H" _: Y: d; G6 l# `% X8 ]( X
|
评分
-
查看全部评分
|