|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 l+ i# K# s8 U. ]4 X7 a
9 C" E0 n! o2 D }- \借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: R- |2 t% V+ ?8 O% |效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。+ S7 ^* f' ^+ x3 z5 |* g$ Y
----------------------------------------
+ o; a5 R4 L. b. @$ W; h5 z% v8 Z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。3 w. m# c1 d4 }) w$ @0 Q
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。, n! J" b/ w2 E7 @* J. E3 h& g
----------------------------------------
9 x% `6 t7 ]: h7 s" phttps://github.com/guillaumekln/faster-whisper
/ B, |, R1 O6 w' Z9 J6 B安装如下:
4 u* z; k0 p" T1, Windows 10
3 E0 n* {9 t7 z! d+ V5 k2, Python 3.10.11- T- G2 a1 a# n; p1 V+ j
3, CUDA 12.13 f$ B9 o. \7 A2 p# g6 v9 M
4, 在python 3 中安装
% r0 i. Y: \& b% A; a9 _pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 n' g8 k; m4 m( I
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: O1 u5 |! @2 n7 H+ x5,pip install -U openai-whisper1 Y4 U$ R0 ~9 T! k" V: m
这是向whisper 致敬,可以不装
7 n6 D3 n8 u! q7 t' ^: r2 X# ^6,pip install faster-whisper( N* g& p# d0 N) b0 S6 D
----------------------------------------
, R0 u2 R7 o& c: Kwhisper 我用的命令行,faster-whisper 我用的是python。% I6 @, S; p& J$ u$ {3 K
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# |4 r) m( j4 _3 P1 o6 W
5 D8 m$ z! |+ k* i0 \( K! c----------------------------------------3 y+ x0 k; ~% Q. t% ]
' P7 K- a5 ~3 X) J" a1 Y7 |from faster_whisper import WhisperModel( x1 U+ O3 g& I0 t2 w5 |0 y
) u$ P3 F3 M }model_size = "small"; L* c4 |2 ?: b
: X4 w8 ~$ K. e& z/ u
model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 V+ Z! x% b/ R( r5 `% [% Z. @$ K7 v5 c: N" W
segments, info = model.transcribe(
) z5 w6 W8 u, h/ F sourceFileName,
+ n7 Y. w8 o+ k9 ]8 O- z beam_size=5, $ w! p* y2 A- H9 A1 Z$ k
language="en",
" ~0 ~4 B. Q1 v# g& X' T0 A# o task="transcribe",
* S4 j0 C4 C' `- { word_timestamps=True,
! @. e9 m* q0 t0 Y$ u$ a& f initial_prompt = "Hello, welcome to my lecture.")* d, d7 r0 L1 B. ]
' g. w- c3 n1 V& J3 u9 d
for segment in segments:) K3 Y( i7 R5 V4 Z
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))9 k, G. E: U( O# y: v& _# @
6 j, R( y6 ~0 h/ `8 R& _1 s% D2 e for word in segment.words:
( o. g; Y! ]5 F1 d . k% ~/ _8 y& X# \4 Q
----------------------------------------
$ t" w- q2 x8 b6 D: K
; q: c) H6 y ?9 s# x代码说明:6 x% O5 y5 Q9 g% g. b
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 A& k5 J3 m( _* ^4 h* O但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。/ s& R0 v) @6 \* \- A( E1 y
2,segment 本身是很粗糙的,做字幕勉强能用。
* W4 W9 e6 a3 E3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
' Z/ m6 l0 |9 P9 J4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中, T$ g/ E/ L; w3 j. E
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。) D9 T- m$ B* u# Z* T
5,model.transcribe 中参数说明:
! N6 W' ? \0 o ]! w& B4 p( D你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
9 D; o6 C9 D+ C* ]: E其中& v7 `3 T( p# D8 O
word_timestamps=True,
# e5 P) R; O; N保证了你能拿到 word,否则是拿不到的
* P3 m# }, O- M$ W4 } @/ W initial_prompt = "Hello, welcome to my lecture.")% }7 a" h5 R1 e2 v: `' d& G
保证能尽可能准确的断句 punctuation,但是不是决定性的。; U6 |& P/ a; k4 Z% }( ]* \
其他参数可参考源文件:7 Z4 E; d+ [1 H C8 O* u$ h+ d
https://github.com/guillaumekln/ ... isper/transcribe.py: ~8 W q: W8 h3 t3 G! U9 a/ y
152 def transcribe(; Y" } z8 H0 R4 v$ ]( G
从源文件你可以看到是支持中文的句号断句的。
" P O+ m' w( |4 j6 @. h
4 o3 f/ [* | c6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
/ ]5 f. l" G" ^2 n7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。! m, x) v2 Z6 U0 M. B
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。& T/ Z) M' @$ N4 |2 z
5 g( j7 N$ U* k" S% q3 P
8 n- p4 R4 T/ O; Y# D+ }- g0 m$ y
5 L: P! S! W, y; B) e8 K1 l( j; s* O |
评分
-
查看全部评分
|