|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
% R$ R4 V' Y U6 Y
, ~' Q3 [% h: z- _' ^借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 c' W* o/ n9 \( |$ s! h7 C2 m效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。3 Z: p7 q! ~" h6 V( a
----------------------------------------8 p6 r5 x9 ~; F! g2 b0 H& R" }7 C6 b
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。* A! Z8 x) p+ G+ C5 o$ h% `# k# _% B
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。2 @! T' J+ d8 }, x5 {
----------------------------------------5 l; O3 d: S n3 j$ s. q6 U% Y. j. W
https://github.com/guillaumekln/faster-whisper4 s" x' ~4 [8 c: X1 b: ?, }
安装如下:/ o& W& ^9 S6 _4 Q* ]; D7 g
1, Windows 10
p( p: X1 P( b6 n$ N# T2, Python 3.10.11
! A, c d! Z) \1 `9 n3, CUDA 12.1; F7 ?" q' r! O X: { F# O2 B
4, 在python 3 中安装. C' N. d( I& @
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
" }" O I/ }# `- x: S这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ i8 ~2 H+ H# A
5,pip install -U openai-whisper
( A9 \0 U1 T! a6 j: b' U这是向whisper 致敬,可以不装
! c& j A5 d0 _3 a6,pip install faster-whisper, e" q: }3 U$ _$ s5 ~' d
----------------------------------------+ D% b) \( n, V+ l% q& G2 q
whisper 我用的命令行,faster-whisper 我用的是python。
7 y/ @+ g! e! ]& |# R. z下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:, A9 w1 S/ K I! b* R% t- u* n
( N. P4 a @% {+ S5 J& j1 K: q; [
----------------------------------------
$ H: O2 ]9 L- k0 p8 f" b
8 \1 B- c f, a( qfrom faster_whisper import WhisperModel
8 e2 T3 p/ k- o" ^, l1 s7 ]9 ~6 D/ z; N
model_size = "small"
3 U6 Y/ G4 n( _$ V; I
1 \1 r) q% [, z; l" i$ f! _model = WhisperModel(model_size, device="cuda", compute_type="int8")
# @' U/ k, G$ t% k
/ N; A% }: D& p- \8 ~segments, info = model.transcribe(
" n8 W$ A4 N5 E f0 J sourceFileName, 9 x2 D1 W' {& g2 o
beam_size=5, 4 x; W& ?- f) _% Y
language="en",
& j5 {- v; l5 U3 V, u. @6 g* F task="transcribe", $ ]1 v# Z( u) A+ `# B5 P
word_timestamps=True,
$ c R' y6 v2 g8 Q" i; \7 m initial_prompt = "Hello, welcome to my lecture.")' @9 j9 @3 T3 [# f
4 L( H1 j9 U u: L3 ]7 I
for segment in segments:% [! C ~9 \8 @
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
/ j0 \. e7 V8 d7 q2 {
5 Z. a" H/ i* d. V3 N for word in segment.words:
: z0 b% @! H0 u) u ; E6 i0 ?" T& ]$ y1 }, Q; W0 O' [
----------------------------------------0 P) {1 K$ Z. X) X. W
( |7 k; \9 ]6 E9 j/ z
代码说明:
6 o3 M! H. k; x: v1 o1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
! V# v* {' z8 ?7 p! I0 o: X但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
- d/ Y. {: k- a& r T/ U7 s& H5 f; b2,segment 本身是很粗糙的,做字幕勉强能用。& s0 u) ]3 |% {. o5 }
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
9 t2 ]3 n6 o6 t1 U( t" f, L( T4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中: N8 B/ g3 x P
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
1 @! B" }- s9 ]8 V4 Z5,model.transcribe 中参数说明:
2 I4 L) L: q4 b你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 u" }! s4 o9 S, S其中
1 p! C$ {: m* _( H8 J/ ` word_timestamps=True,
% J) @" J- k1 e: f( v- Q4 u5 `保证了你能拿到 word,否则是拿不到的
& F& W% ~" z4 e initial_prompt = "Hello, welcome to my lecture.")5 N) ~" C$ n! A' G% z# x
保证能尽可能准确的断句 punctuation,但是不是决定性的。- S. b2 c8 ?! {
其他参数可参考源文件:
3 p% i$ }, q) L( h2 Thttps://github.com/guillaumekln/ ... isper/transcribe.py, {; y* n/ g, U0 o# K! q5 ?
152 def transcribe(4 K$ m, B/ I" u" l, A1 L
从源文件你可以看到是支持中文的句号断句的。2 g: K! U. f7 `- {
3 `0 V" f# I$ B D. {8 W
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* e& L; Y' | H( |+ E9 C7 F7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
' K/ s( {( r5 z1 B8 q' e! `2 y8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。4 i5 h: U" r, \: C2 n
6 z% d$ N L1 T% H/ J & P3 g# p4 a- i! k- l6 \
0 W2 i: ]: A$ M
|
评分
-
查看全部评分
|