|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 X& o% N9 G! |$ K: v
6 H O f. M. J0 a借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。) z- h& ^! o. D5 I& ~
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
+ K" E3 d# j* q6 R----------------------------------------% ]% U" e% ?1 i9 I, S: P3 B
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。7 ]' i) ?% X& M) h& @" X( x
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: g1 r% p0 K- \# L----------------------------------------" w. X T* R# N
https://github.com/guillaumekln/faster-whisper0 w# j* }8 W2 B8 W& Z
安装如下:2 I0 k% l, c" ?# C6 v' i5 B+ T
1, Windows 10
, {" H6 H2 \9 l9 x9 u6 I2, Python 3.10.11 K- I2 G* @$ |' w- R& b f
3, CUDA 12.1
- d9 _/ q6 G+ N) I1 |' U4, 在python 3 中安装
$ F8 ]/ w; r' B1 u& f+ P- ^5 Cpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 K% E6 Y) f1 ~" a& q, V2 I
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
5 A) u! O+ C2 H5 Y& o# \* H/ O5,pip install -U openai-whisper5 F3 i/ `: J$ G6 h7 P# `' r
这是向whisper 致敬,可以不装" E: v9 z4 J V+ H7 \
6,pip install faster-whisper
9 N2 b1 h6 ~, R. v1 d2 h7 {% X" V----------------------------------------
' z* N' B- j9 Z9 v+ o3 Gwhisper 我用的命令行,faster-whisper 我用的是python。 G( D: Y8 _1 r, h! F
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
" E, P9 R; {2 b H# `& C, l# ^& X o2 ^0 ]" Y T" h0 d
----------------------------------------
f* L3 \! j+ T% y# ` A
, ?2 |- l. b, x# o/ ?2 @2 n$ xfrom faster_whisper import WhisperModel
6 w. I2 R( E# y$ y3 }8 X
* d/ t3 t- c1 _9 zmodel_size = "small"
8 d, o8 ?. h+ r% X! N3 G& g {: f2 \# ]( C
model = WhisperModel(model_size, device="cuda", compute_type="int8")8 o% d% t. v7 b
- {- ?6 I4 @4 ?( N
segments, info = model.transcribe(9 i9 d8 Z* M5 R
sourceFileName,
% P, A$ Y5 F3 ~4 c( @0 [, f beam_size=5,
4 y: ]% b: g3 M3 S language="en",
& h; g# o0 U0 Y1 I# [ task="transcribe", ( O v4 o. f" {/ k o1 \
word_timestamps=True,
, \! p% s' G7 y- I2 h4 f initial_prompt = "Hello, welcome to my lecture.")* {9 x8 p+ e4 D3 r
; C! h1 R$ a4 s% m5 xfor segment in segments:) @8 c, f& s9 R- I
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
# W. m5 b; K* _3 i. [, X7 ?# v/ |
! C4 I2 Q# M6 H for word in segment.words:
, d& E/ M# t7 J' f . D7 p9 l- ]# b7 k
----------------------------------------
: V* [' D" I+ d% [# e3 ~6 t6 \0 y$ Z& G5 \7 R
代码说明:& e! u! b4 K2 H6 u
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
' E+ `8 J! f$ x( L但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
" `6 B7 x, P9 |2,segment 本身是很粗糙的,做字幕勉强能用。; Q, r: |5 ^8 E. _1 |( D9 H; H$ p/ W
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 \1 g1 z/ B9 @4 p% {! w: ]) A
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中: J. h" _- U( j7 {; p
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
8 ~$ C& e/ w$ w4 T+ D5,model.transcribe 中参数说明:. } M2 C8 h1 N2 L8 x7 z% w
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
% _- Z$ N# I" l$ x5 L6 k其中 P) s/ k+ J# J% T0 \9 d
word_timestamps=True, 5 x. D8 {9 y! D% F
保证了你能拿到 word,否则是拿不到的
( {: f4 h4 ~9 L9 x4 U initial_prompt = "Hello, welcome to my lecture.")
. t( I7 @. V- X保证能尽可能准确的断句 punctuation,但是不是决定性的。8 S. N; O, d; d! G" ^
其他参数可参考源文件:
; H8 R% P2 K! o3 B: t7 bhttps://github.com/guillaumekln/ ... isper/transcribe.py- Z3 ]3 d' s; I8 W
152 def transcribe(
$ w, I: }- m7 X- ~# n* d' B从源文件你可以看到是支持中文的句号断句的。
# k- V4 _" ?* e2 _* _6 v! p4 s& i! l2 N) y! n! V1 M, m( w
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
5 h5 q& e- Y& c1 [) B+ ]7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
/ |+ u3 ^7 M( W2 N0 o; V, t; R8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 U* b- k' K) ?/ }: u8 Y* z3 r
0 p8 F. ~. I5 S* \ 4 S5 o# E5 t" Z, ?# w6 t3 U7 m
: V' R, W( h( q+ e6 [6 c |
评分
-
查看全部评分
|