|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
1 }- G& W( H9 D8 R; V- {* C& o) z7 g" I2 Q& c2 }' R
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
; {$ ^6 X, _( }1 C0 G效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
# m9 N4 U8 v8 F+ h) w& x----------------------------------------
- f ?: E; b& z% G# r' B) t显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
6 T. M7 k6 h- w |" d/ o2 K' A/ k在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
* ^& M) u, d+ {0 D----------------------------------------
, M" |( s1 f7 j) A* Vhttps://github.com/guillaumekln/faster-whisper+ h8 A+ g5 u0 N1 X
安装如下:* L2 i |6 F0 G2 g" W. D
1, Windows 10+ s; p! K! a8 ]! x X
2, Python 3.10.11
1 M: \0 A" b; d- B$ m( L3, CUDA 12.1
3 X2 D4 b. z8 z8 f" T( Q+ @4, 在python 3 中安装
1 G" l4 y; p1 U' z- `5 spip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117( {' t$ ]# K! q0 g
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。+ C% T7 Z) ~; ^) X8 E, }: j
5,pip install -U openai-whisper
! Q9 Y; T J% d* W4 e' H! o: D这是向whisper 致敬,可以不装
8 c- P, x! p5 z& U6,pip install faster-whisper- L7 N/ k: j1 [" Y) j4 K
----------------------------------------
; _8 s/ I2 Q. |3 n% Swhisper 我用的命令行,faster-whisper 我用的是python。
0 x' D+ D# s) k% r$ M, A9 [下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:. j) b- f/ D. `, s" C3 h
9 u' @$ U0 D9 i( k( n- `
----------------------------------------1 W2 Z) v/ j$ C- n
B1 R* W1 i+ `* g' c- Z
from faster_whisper import WhisperModel
4 ~# N" X8 ]- `5 A$ x' q. A1 X! `. Z' b+ @/ z
model_size = "small": P; K J& `5 L& f# x& p/ q
1 s Y% J, h! gmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
7 n& h, e( t, P5 T7 [. ^& a: i/ O% {( W, F" J4 d# [2 g
segments, info = model.transcribe(% A. h7 P$ T% h/ [
sourceFileName, 3 ]9 L3 R" v7 A& F
beam_size=5, 4 k- ]9 ? a8 l2 k! S5 F
language="en",
4 w/ Q# V+ u! N# V* f4 K; f2 j task="transcribe",
2 `6 \% X* j1 U. {. V word_timestamps=True,
6 C& t1 K! W. M! B* N8 ?3 b initial_prompt = "Hello, welcome to my lecture.")8 J( v# ^! p3 d1 Z+ C' L# y
( {& ~, w* q" r' I
for segment in segments:% o" ]! w3 I6 t1 g- q
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
+ ~9 a5 `& O0 s: z2 `
% Y9 ^% Y! Z7 }" u for word in segment.words:
1 h* Y4 a/ I L5 x7 ^
3 e7 ^/ T( A! o" W5 Y- d' p----------------------------------------" c* t* k$ K8 a' G
* X3 A6 D3 ]: `6 }4 ]代码说明:; i0 Z/ F; y4 a* w' h6 p
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
& v6 p: o" D4 L9 T$ ~5 g1 q+ u但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。$ J8 m8 o9 |) R6 X. a
2,segment 本身是很粗糙的,做字幕勉强能用。
3 V/ [$ W1 E& ^) \% `3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。* c9 M1 u' j2 `1 u
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
5 k3 h& D! H3 |4 {比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
Q" D+ z, }: @% i5,model.transcribe 中参数说明:- t+ W4 K$ v! z% ^( O7 q% M
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数. e9 e$ _+ b" Q
其中
, @1 r$ D6 d/ h% ]7 U) z word_timestamps=True, * p& h9 }/ F; ]7 a1 I1 `; H" I/ a
保证了你能拿到 word,否则是拿不到的
, y) q! L9 |4 Z- R) ]8 | initial_prompt = "Hello, welcome to my lecture.")1 H6 }* p5 _# k$ {; E
保证能尽可能准确的断句 punctuation,但是不是决定性的。0 I& i- N0 P. e) a6 x! Z
其他参数可参考源文件:( A) q/ [/ \, C3 y
https://github.com/guillaumekln/ ... isper/transcribe.py, ~: K: D# z+ F5 y( r) C
152 def transcribe(1 X5 Q6 a" R6 {$ L2 X; [9 q8 X
从源文件你可以看到是支持中文的句号断句的。
4 a9 ?, @, x! a
; f$ H" w; g! J6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- r7 ^' A% g1 p7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。 v4 d% S, E: q5 ~! {/ p
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。( }$ S% [4 V( u' |/ O" l o: z
4 E' }/ g# N8 E
, N$ F9 \* E/ X0 L1 R& F$ D6 P: v, R
$ i( Q6 w3 t& \ |
评分
-
查看全部评分
|