|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* s4 Y% A9 M5 E) O" o2 m( L$ C4 b' z6 F* C) m: D
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。$ H1 M- F$ P7 @- Y
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。' \% o+ S) Z+ \: l$ @
----------------------------------------
5 G/ A1 A" U4 [; J. \显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。3 r8 X6 \. f( ~) p
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
/ R. u+ ^% a$ r' A----------------------------------------7 m5 u& A; W8 f/ w7 K8 _$ M
https://github.com/guillaumekln/faster-whisper* @6 B- ~$ y2 i _: h3 v/ `
安装如下:
. c, E3 ?) ]# y1, Windows 10
1 F w# y/ Z& U- r2, Python 3.10.11+ f, f4 j/ k8 F
3, CUDA 12.13 _& W. W( J: {5 M1 j+ ? c* A, S/ d. G
4, 在python 3 中安装% r( D! S9 o# w R' U/ Q
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" f+ M# k0 P6 B* o- s
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
2 X- @. z3 L7 Z2 p0 y5,pip install -U openai-whisper
7 j' a* d* f+ d" T$ u* M这是向whisper 致敬,可以不装
) I, [: o+ k j( d3 Q( C6,pip install faster-whisper& w: s- z7 o# o3 M
----------------------------------------# S0 \" ~( _+ I8 V/ W
whisper 我用的命令行,faster-whisper 我用的是python。5 u$ g1 J. J/ A. j3 c# X
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:: g) @5 q5 |: y7 s
$ m5 n- X3 H& b8 w* H: G----------------------------------------$ z& v/ Z! X7 |: c# ]3 m
( g/ w) d% H6 d+ P7 a/ e! Q4 w% Wfrom faster_whisper import WhisperModel
( _. }3 r/ D7 h6 U% x7 m* l" I
7 X' ^- x* S$ G: e! I3 @model_size = "small"9 o4 }8 l" X4 g% A& n
. h, z2 \: K& M( ~ fmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
Q, L! X: _5 n' ?* ~# i1 ]: S; I4 E, }. L3 i ^6 r/ t' l' C
segments, info = model.transcribe() ]3 h+ a" \4 J
sourceFileName, 4 E: j2 K! L( [: C' H) I
beam_size=5, ; {3 ?9 @. g/ @3 \/ a& O+ K
language="en", ( f' }2 ]) x1 `- X8 e1 H
task="transcribe",
8 X4 L" y6 |, {! N' M7 P word_timestamps=True,
& s7 k# v/ G( F9 }% ~9 Y7 o initial_prompt = "Hello, welcome to my lecture.")
2 @; u! q- x( B) |% T" t+ @
6 R9 N& P! \- M& [ I) m2 } ?for segment in segments:
4 d2 B1 C7 l% P( ~! ^ print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
3 j) E2 x8 v5 z5 R1 K+ q4 b A5 G
' U, t# y. q, M6 c- l& V A ]5 Q/ q for word in segment.words:7 L" k( I) T3 T- X; s2 U
3 ~" i" }% G! K$ V
----------------------------------------
+ o* L$ D! m! d& N
$ w$ A! ~3 K# Z/ Q4 K$ L代码说明:
2 f7 q- _# ?4 j. F* q% R1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# T3 w7 q; V- u2 h, P5 s
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
) W! x, J. i3 Y4 z2,segment 本身是很粗糙的,做字幕勉强能用。
; j- L' P& H @$ z1 Q' k0 p7 j3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。) w8 M% V- ]& n# G9 C- D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中7 |- G* s% H# Z, _9 A/ k
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。2 {; b6 m2 t$ R
5,model.transcribe 中参数说明:
, \, m5 d7 F7 y. p你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数; k! A+ o; M4 Y8 M4 J
其中
0 F4 ~, h* G9 i/ _) ~0 d word_timestamps=True, ) Z8 \8 B5 q, e; a* z
保证了你能拿到 word,否则是拿不到的$ w, Y& K. d; J+ H
initial_prompt = "Hello, welcome to my lecture.")! D$ w$ b$ l4 v1 X6 K, @. _4 B
保证能尽可能准确的断句 punctuation,但是不是决定性的。
9 J, F @! q9 l: l3 A: ?其他参数可参考源文件:
5 l. {4 y( R5 s5 ghttps://github.com/guillaumekln/ ... isper/transcribe.py* @/ C4 l, t) l. B& N+ x z$ F, H
152 def transcribe(
% w3 [& P% m7 W# _从源文件你可以看到是支持中文的句号断句的。* ^+ I8 I) ]5 X! G% w
0 s, P5 [6 P# `2 J: l
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。 [( w5 D+ Y; N4 ~
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
: ?4 k0 i5 i0 ^& U, `9 z8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。4 f9 I& Y' T6 n* W
+ `$ v' O7 ^# r6 ?+ O4 ^
0 v0 x2 r3 h, n, z) [4 O+ C% ]/ D8 y% a# J7 `
|
评分
-
查看全部评分
|