|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; _7 `/ [" w; [3 h$ S
5 a/ `2 Y5 P: M! y3 ~借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。% ^/ {+ V5 i& c: n. d1 m
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 v4 |0 `& Y! M----------------------------------------
9 i" p) i1 L( g4 s3 C显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。8 A+ Y, N; l' j7 l3 s0 m. r
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
5 J- U0 ? b1 s- B' h----------------------------------------
0 a) o9 C. p* Ihttps://github.com/guillaumekln/faster-whisper
0 r6 X0 ^# J" T安装如下:
X2 _& _( s: C+ G# U& [% L1, Windows 10
* f6 K; `: x7 z W/ O0 }2, Python 3.10.11" i6 V$ R; D$ c" p
3, CUDA 12.1: \8 I' n8 m7 X$ `. ]1 k
4, 在python 3 中安装* {$ x5 I/ B# u' P. U( g9 ~0 \2 Z
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
^& e3 R4 { X* f' L$ s% D这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
/ S5 y9 }( W) H2 Z/ w( l* R5,pip install -U openai-whisper& v! [+ J( Y6 \# p
这是向whisper 致敬,可以不装
! J8 S9 @1 ~) C* y, U9 d" J1 ^" t6,pip install faster-whisper+ T7 c7 y+ D/ q9 `3 g& ~
----------------------------------------
7 D- k! ]5 m9 g nwhisper 我用的命令行,faster-whisper 我用的是python。
6 Y- D: M( i! r$ F/ W下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% x; Z/ n3 c% S9 ^0 ?& L0 n0 Q2 k2 a" D+ ~. D, l- Y
----------------------------------------0 ~9 k9 `% J; s
) r3 H* E0 T, N$ _3 X
from faster_whisper import WhisperModel
* G* I8 ~: A9 Q. a; ]) ^" N1 P) \1 n( G6 I/ u* k1 q. q) V9 E
model_size = "small"
8 J% `# E# P/ S9 ]& E
( G& k* Y0 j/ S4 X7 m* j, Umodel = WhisperModel(model_size, device="cuda", compute_type="int8")( h9 @9 I) {% |" P+ h; L+ A2 P
! \$ Q! J# q, G8 @' Y
segments, info = model.transcribe(
8 _- s# W$ [' q; m% S sourceFileName,
# s/ z& u6 c H* d2 ?, [ beam_size=5, + G6 y4 F9 w3 o
language="en",
- X, e0 }. Y, T# m task="transcribe", - Z* A; k* h) H/ h
word_timestamps=True, ^, Q( c* G/ {; G# L
initial_prompt = "Hello, welcome to my lecture.")
, G$ j/ m9 j8 a& H6 _' v: C: H7 a2 u" ?+ |% V2 L
for segment in segments:" a! N" \5 W7 T: a4 o& ? y' u
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))4 A* T1 N8 M* [) A3 E% o- A
) g: U8 N; l- |6 P for word in segment.words:9 A2 Q" p2 n* {5 H7 M
9 r' _# x% E. ?' e% ^% n----------------------------------------
5 d/ ^( x6 c) ?+ e+ A# f' a; }4 y6 G! u/ T* g/ r/ q5 L: C0 k
代码说明:
& I0 ^# f2 [9 j+ w1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
& I( e/ x" Y2 f' d但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 g) J# ^3 E# v: o7 @, y: ^2 O
2,segment 本身是很粗糙的,做字幕勉强能用。6 r/ T% U1 g) u. ~) `
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。* A: v* e( A# [' O( F' g; i' a' [
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
6 ~9 j; Q6 N+ ~% L: Z" a5 p比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# K3 ?7 \, {2 w' }, }8 Q& r# \5,model.transcribe 中参数说明:8 Y5 X* E, f/ \3 L5 s
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数: w. |; ?* u! G! t* |
其中# M) C d2 U& J i. U
word_timestamps=True, 4 M! E2 Z4 @# Y$ `
保证了你能拿到 word,否则是拿不到的
4 J. T$ ~8 e) K7 O: V, @8 r9 w initial_prompt = "Hello, welcome to my lecture.")
8 S! i' n* _# _) l: p& d w: b0 N保证能尽可能准确的断句 punctuation,但是不是决定性的。
0 y* X1 j3 r c- z; q* r: F其他参数可参考源文件:
% C; T" t2 _0 e# i I' ~" O+ j6 [( yhttps://github.com/guillaumekln/ ... isper/transcribe.py
2 b# W: o! i1 @! @% k7 @' _152 def transcribe(
& x, v6 z0 D% Z! Z, y q4 o从源文件你可以看到是支持中文的句号断句的。8 v% {9 P3 D7 }+ N5 D% Z* M9 R. J' N
" b2 p5 E7 W& S; c p( [9 p6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
+ t$ V/ u% G5 B5 i7 e" ^7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% ]; {& N/ j. [& n: O6 t+ T8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。3 R9 \8 y9 w1 \/ r: F# w
! Y( v4 |% k& ~1 R
- ] Q" }' W- J8 i6 H- w
! f- O& w3 W2 d, `2 J |
评分
-
查看全部评分
|