|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* p" l. M) U9 \# @% C) H P* N# {& P7 M6 A% w6 q/ w. d3 m
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 Z# B6 m9 m" ?
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ ]- }# T4 [* T& }---------------------------------------- \) |2 l9 Y; o F @! o' J
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
8 Z$ Y2 S8 F6 ]" f在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# ]4 ^" o! ?! Q5 k3 r2 j6 m% K----------------------------------------6 J4 P- h# W+ I7 C# v/ Z' _
https://github.com/guillaumekln/faster-whisper) f. B- v# A( f3 n
安装如下:
8 }, r K) h4 B: Q# G* g8 R: ^1, Windows 10$ z2 c; d+ T" g2 ]2 G& l
2, Python 3.10.11# {0 _ M9 s6 b2 L: x" h
3, CUDA 12.16 g; d5 R2 h9 f& M1 T0 y7 _
4, 在python 3 中安装; U7 N% V( P8 K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
8 w6 a0 X. n' J: e4 O这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。0 f3 c0 q9 B; ^: Z) b( j% q9 N% [. P
5,pip install -U openai-whisper/ a+ [( e9 S t1 d
这是向whisper 致敬,可以不装
, ?- {# ~' y1 _" F) b6,pip install faster-whisper
& x. N ~0 W" B7 W3 u; J7 o----------------------------------------
- u" u* @. \+ Z5 n( Qwhisper 我用的命令行,faster-whisper 我用的是python。
F& G- @! J" F- ]2 A8 a/ |下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:' E# d/ Y0 c4 @, h
& ?5 h) P2 ~ f, ?8 R5 _) J----------------------------------------
: |, g& T6 G8 y6 x, f# F
" f3 x0 O9 a) c; K! |from faster_whisper import WhisperModel
# \$ }: A% R" d5 P1 v: A3 k7 U- b1 Q1 J- p8 o2 I9 Q' z$ a/ l& B. v
model_size = "small"- Z* _4 o2 K2 c" q
' {0 m% f* r' A$ p( A: `+ {- d1 h
model = WhisperModel(model_size, device="cuda", compute_type="int8"), ]2 c0 h' V& d F$ E2 L
- c- ~/ n" N$ e$ }
segments, info = model.transcribe(
" R- k1 h8 A( l+ h. Q sourceFileName, : I n' V' C7 \! e4 y9 p
beam_size=5,
. X8 G+ k v! Z$ L l9 o8 ^$ q: v language="en", # _2 d- k1 A/ y. P9 ?
task="transcribe",
! _4 G! }7 B4 t. w1 { word_timestamps=True, / M' `, s2 y* r9 w
initial_prompt = "Hello, welcome to my lecture.")
3 Z0 e" [$ t! w" \* R- F* U% L
: m9 G% f% m/ f' b" Z5 j6 k- ofor segment in segments:: G3 X( [ y; L* e2 T& C) R
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- S! q1 c& Z/ W- A) x- u3 u6 d/ u9 t+ |9 Y1 r( l
for word in segment.words:- O$ A# b& [3 D
* y1 u" N. |% c7 l----------------------------------------! R0 [& W( H2 ^7 p' L5 f
' P0 F# [5 D! k# Z, x" b& r& d$ O代码说明:
+ A% v/ X4 E+ `" t1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。( `7 _ |+ k, i: u4 c
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
4 U& Z& s+ P U4 m2,segment 本身是很粗糙的,做字幕勉强能用。
; Q2 k7 K% t1 w7 H+ a1 z3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。( _1 X. R8 r9 c
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# `" ?8 X9 H1 K" C5 I2 W, s% c& T比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。; B3 v' y# s) Y2 }: e( y0 }. ~: x
5,model.transcribe 中参数说明:) f% x9 H' d! F7 g. l# L
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; t8 v9 ]# i' p+ k6 i( |- r其中) ~- y# o4 d9 m
word_timestamps=True,
5 [: w J( H# x6 G8 \, y- N保证了你能拿到 word,否则是拿不到的
$ O' E& w2 s, t: x, U" L+ [$ i initial_prompt = "Hello, welcome to my lecture.")
5 k4 q* L4 v" s( S( ]' i保证能尽可能准确的断句 punctuation,但是不是决定性的。4 w' |+ b! h2 E
其他参数可参考源文件:
n4 V& Z$ A2 c: O. ~- @https://github.com/guillaumekln/ ... isper/transcribe.py) s* s5 L+ U& ]3 s! \
152 def transcribe(" M6 H E1 }/ B- Q! n6 m/ |
从源文件你可以看到是支持中文的句号断句的。
4 z$ Y' R$ k4 a1 y
- J: l- O- O8 X+ a8 b1 m6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。3 }+ }$ n- E9 G. [7 v0 `
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& N1 f$ y$ D) |; `4 S- f8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。, x: M1 t" c/ A% T5 a! w
+ V" A! G3 A T" w5 o; D
- a) X# W3 O5 W' ~- S" ?1 y" x: E6 j8 I( |) Q, _
|
评分
-
查看全部评分
|