|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; @& q* l& K. \" P% F% k' h& e" O3 D! Y: G6 N( t
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。. T0 Y4 {3 J' C
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
9 D; }, x! S/ @! N1 z: b/ l# b----------------------------------------
6 ~, Y( K" q4 d( `+ b显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 F# \! U) f# R5 V' t在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
/ D: U& O" E0 G/ V' ^----------------------------------------; @" U& ~: j# e
https://github.com/guillaumekln/faster-whisper
9 J2 _( y6 Q$ D& v安装如下:
9 y# b- u$ @5 A1, Windows 107 O; Q {: v: u- K
2, Python 3.10.11& f. _/ W9 @2 A& s' O# E
3, CUDA 12.1* D% C d3 S- W2 Y$ H
4, 在python 3 中安装
- R( f7 t& E+ _pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117, E, O% X3 H6 A* u2 k* q" t
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
4 f1 X1 d) `1 r+ I5,pip install -U openai-whisper. G5 U& n. |4 L: V" \
这是向whisper 致敬,可以不装
: S" T$ `' G F* S1 C8 E. A6,pip install faster-whisper
7 k' V7 r9 x$ n4 |# s( q----------------------------------------( f4 W* q5 \/ X6 b8 S* P6 I
whisper 我用的命令行,faster-whisper 我用的是python。
, V% y$ G' D1 U4 d3 X下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
1 w% f3 r4 n( |# ]. z o' m9 ?; Y& V
----------------------------------------/ b$ H, f1 D% `9 c# |7 i, s! n
% ^; @- \+ S: p; D0 Bfrom faster_whisper import WhisperModel: h; O4 S' K0 d
* z" G+ @2 G3 u$ _4 F& ^model_size = "small"
6 `) H" T! V% l9 v5 J# O3 ^
6 }$ q4 r! P# h8 d3 v: ]" B; Hmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
5 S. H7 R+ H& |2 ~( \# v$ |+ f8 E+ N- {6 W
segments, info = model.transcribe(
' k& S& @1 ]) h8 c sourceFileName, " ~5 j- I0 v* D# k3 _
beam_size=5, 8 e B) b0 ?' d9 U5 [' e
language="en",
# r0 V1 T4 i" Q: L A$ F task="transcribe", 2 W9 X" }9 v1 r4 S& D4 W" w; p/ B: Q
word_timestamps=True, 2 J- E% K/ H% @6 S6 J
initial_prompt = "Hello, welcome to my lecture.")
! B! s) X/ m0 S. Z) h- G c, B" W! R: ?* N
for segment in segments:. i3 U4 u# {- L3 g2 s: X
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- m8 ?8 [+ e+ A9 @( x/ e4 n' {: O5 d. W- q
for word in segment.words:; H; w3 z1 N) {- R3 u; j
8 t1 P/ P2 w' i8 z# ~- V----------------------------------------
, ^9 ^7 |: R. \: E, J5 f7 @# D7 H4 U8 M( o9 |
代码说明:- C, c7 `. [2 ^$ V, T
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
9 {0 l/ x/ I( I9 K但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 A9 W. s9 ?- [+ H
2,segment 本身是很粗糙的,做字幕勉强能用。( t+ u" r/ D. L
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。7 \1 x, y6 }+ Q* c$ ?5 I5 s4 X1 h
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
# ~, P4 o+ P7 ?7 {8 ?; i比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ C6 I0 @( u7 @1 P) U4 e9 s
5,model.transcribe 中参数说明:
# C9 \- {/ G/ G你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
9 ?! U' y }( A其中
: f7 F! z; f/ l j5 I' h word_timestamps=True, * C. R5 u) E5 _; p% [2 M
保证了你能拿到 word,否则是拿不到的% z: x6 l" L1 h* k
initial_prompt = "Hello, welcome to my lecture.")0 R% W( L6 v b6 }# g
保证能尽可能准确的断句 punctuation,但是不是决定性的。9 j5 N7 g7 w& p3 ]; x9 `
其他参数可参考源文件:7 t; m+ G5 m1 T% e2 y3 C
https://github.com/guillaumekln/ ... isper/transcribe.py0 t% g# j4 d3 a
152 def transcribe(
' P# S* J/ B0 J; ^从源文件你可以看到是支持中文的句号断句的。, b# D3 B* s8 N% |
7 _( w, W* T: |6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。) s- |% f' c' f6 r5 j
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
6 w: t9 x6 w$ l5 ]. W( I8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! m! }' {6 Z7 Y, E
! C0 C0 |. g! x8 I8 z, X 5 Q) ~+ y( `5 O
6 Q, G" n3 s6 x& B2 Y) f |
评分
-
查看全部评分
|