|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; ^, V% | g. c8 V# P& d
9 [, @+ `# }- W4 F1 W1 a" {借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。: t/ {+ V; q8 ]6 h: v
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
7 p( l! U/ j, J' B) K----------------------------------------) f/ U( a4 ~& ?+ g P& c& E
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。" k# x, k0 w) u2 l% g& ^+ O# S
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
4 z. {7 U0 P4 y# j \ S n----------------------------------------0 O4 L# t1 p( I# Z" H7 d
https://github.com/guillaumekln/faster-whisper
4 p! c2 I! v- D+ W; f6 e安装如下:
! A; q, R+ C$ m7 _- |; s' [1, Windows 10
6 Y7 A7 z. |' Y1 J {& Q/ n2, Python 3.10.11
8 V/ l% q* [; v6 F1 e* |8 {3, CUDA 12.1/ ~5 z6 X' n# C
4, 在python 3 中安装( E$ l7 _* o, w9 k S
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
$ i; u; i* o: Z6 l; F7 R这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。: g# N% E! K- { ^2 i( B5 d, B
5,pip install -U openai-whisper' @ t$ E0 i% ~1 w# N$ B6 E
这是向whisper 致敬,可以不装( D. @( X8 r8 D
6,pip install faster-whisper
/ R1 ?% L* n! B$ T----------------------------------------
( d2 W4 e2 P: L T+ j$ ?7 Twhisper 我用的命令行,faster-whisper 我用的是python。) p/ y7 J. Z* Y8 V9 F
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
1 A& C" U9 T3 p" P
# Z& b7 K+ n% A+ D' y6 t----------------------------------------3 y) t& t: y3 w" W' |
, Y, y' j0 a1 w+ g
from faster_whisper import WhisperModel
& P# m1 l& Q8 u" S, I- F! _7 N0 H* E# n; m/ ]
model_size = "small"0 P7 j$ l, @ a d& U7 w- I
, n& W' c* O" V: D% y9 C# f
model = WhisperModel(model_size, device="cuda", compute_type="int8")
7 X, S8 ?8 T# n! \1 n @' w: S; x8 {3 a% c; k7 U1 H. |: y
segments, info = model.transcribe(
2 y6 p( u. a# x5 y sourceFileName,
4 T6 i1 i" A8 n2 u2 a6 D beam_size=5,
( a% }5 S, ~, i7 d& R3 _1 m language="en", . e& ?! U; k+ k" l( k; m0 _: Y
task="transcribe",
+ [2 E1 E" H" [ I word_timestamps=True, 2 {6 ]" P* E! q( t: e U
initial_prompt = "Hello, welcome to my lecture.")
5 ~0 k5 t+ r. K3 e. u8 }
0 y b j; L& r2 q4 s) R6 `for segment in segments:
3 |4 r1 |/ Z/ [ print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 q; I c. ]- \2 o" W9 d
% ?4 J! s7 r6 Z9 \8 ` for word in segment.words:, [( p) D. P+ B5 {% ]
( S4 ^4 f) U+ w9 [) [
----------------------------------------
7 b' \3 @% X n/ w8 y% O" I( u M7 Y
& n8 t( k* |9 n代码说明:
4 \0 {, w# a) G3 _; j s1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 v, }+ u' s, H6 t$ r但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" Y! B) p3 m; U( u5 H( p3 ~, Q I1 \2,segment 本身是很粗糙的,做字幕勉强能用。
% P5 _& \; R, z5 o3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
k" J2 H# W$ L9 y% T0 ?$ X4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
) S* u8 m' t0 o2 f' C! m比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
. {3 E: v1 m( I0 }5,model.transcribe 中参数说明:* v' Y( `- y( R* k1 P, Z
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
" @1 F- S; n; p( Y7 w& L! d其中
$ Q& O: H) [, i. `2 Z& q word_timestamps=True, ; A: L9 K# ]" G+ I% x$ l# n
保证了你能拿到 word,否则是拿不到的
& s& U; Q/ i3 O initial_prompt = "Hello, welcome to my lecture.")
% o- O# o; R" C P: J保证能尽可能准确的断句 punctuation,但是不是决定性的。: |! s7 A% ?4 V6 C
其他参数可参考源文件:, `0 Q. U% ~3 X; E. n u0 t5 ]8 p
https://github.com/guillaumekln/ ... isper/transcribe.py I7 L) P- V* [5 H
152 def transcribe(
$ J! k7 N/ @. a! [- m$ W- D$ @8 k7 p从源文件你可以看到是支持中文的句号断句的。/ v; p y) q& z; J
0 \# O+ v1 d6 H9 w- ]4 k% p
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ F1 O$ A/ m* H* G& g. b7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。5 H% E/ N& D- t' l, p4 _
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ ]0 F) O0 a! J& c6 G
( p; t- j, n% P+ z/ O7 g' m
/ X& m; D4 I$ N" f
- c! U2 d5 c0 n8 h8 Y( H |
评分
-
查看全部评分
|