|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
6 t$ [, A6 L6 o7 E+ G) l: c) E: `4 k% P
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
) \( U- P- {9 }$ U0 j9 F( G效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
4 v9 {1 @* |/ f* Z' b1 i, j----------------------------------------
3 {9 p' T; Y. c, n显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。; Q: `* l% [) {6 }
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。. c- H P3 W# n! u' p* J: R
----------------------------------------/ R8 ^. |2 |5 W' x
https://github.com/guillaumekln/faster-whisper( g3 n/ ]; m- u2 y, |1 B, {
安装如下:% g5 R/ K- y5 m% K( E
1, Windows 10
) f1 r1 C: ?5 S/ O0 f2, Python 3.10.114 j. ^5 P. L+ p" q
3, CUDA 12.1; F9 i" f# r" q- _3 E
4, 在python 3 中安装* I+ K& N- G7 G% v
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117+ I! D; e) g, q& m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。+ G' J. @" I" Z+ C; ^( Q
5,pip install -U openai-whisper
0 W- Q& J+ }3 n这是向whisper 致敬,可以不装
- B& _- w i& Y6,pip install faster-whisper
5 B F( Q' b K* d, F" X----------------------------------------
X, I; s- c: P, ?% dwhisper 我用的命令行,faster-whisper 我用的是python。( q0 o) ? j+ k( U8 {6 v# U& O
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 {2 Z: O0 F% s1 ^' x: v
$ t0 w; v0 U" C7 L5 b----------------------------------------
1 A2 L, Z/ ~/ z% L7 |( Z; L. ^5 v
from faster_whisper import WhisperModel$ |5 r; s$ m% ?4 m5 `
# f8 _$ w) W4 _" z/ Dmodel_size = "small"$ a/ X2 E k i# l2 F0 P" q6 q, R
( y+ Y" H" E$ }! }1 t% T* N5 o
model = WhisperModel(model_size, device="cuda", compute_type="int8")
1 {+ [7 {4 t/ Y& {- w
, R5 g5 Z( b0 d' y6 j7 \8 m7 Vsegments, info = model.transcribe(# s! }# G4 I$ y6 X' g
sourceFileName, / Z% x; f k5 f; p' Z
beam_size=5, $ Z+ u) ^' M0 u; C
language="en",
6 o4 d4 Y* W/ E; d- m- G1 M task="transcribe", ; b" }& W* ?9 F
word_timestamps=True, % P* [1 }% J! Y9 c* l' m4 ~
initial_prompt = "Hello, welcome to my lecture."): J! q3 C; z+ j& Y" u2 g2 N
: E: k! J+ W( K/ Q' u
for segment in segments:
. B$ y s1 |, a {+ l1 D print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
G: R5 C' e0 ~) K; S: ]% q" D: q- b1 y( q& w3 Q7 g1 n6 v# L
for word in segment.words:( Z e H; b# j/ u _. t/ N% ^' t$ N+ c
& {3 |% U- l& \----------------------------------------
$ g: n4 {$ X1 r- N* l Z0 n/ o. I
5 Z. |5 p/ I6 j0 q3 R6 m3 q: ?代码说明:
N" Z2 `3 x0 }$ c: l; v4 c1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。& i* P8 F8 P+ |: _. @
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
, g: ?* k% u: p2,segment 本身是很粗糙的,做字幕勉强能用。- Q0 f- C: B- x+ j6 W5 ~& f& w& Z1 S
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! H# o3 m& S0 _' U2 @0 l* b2 j4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- m" _* I2 W6 e$ n
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。( j0 ]' ^% _$ U# |. \9 t
5,model.transcribe 中参数说明:0 w" c |- S; z6 C* E+ i9 X% u* r3 p! V
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数( l X: R# P9 N/ r) [5 K D; s' N
其中
/ d# @& F) N q word_timestamps=True,
1 H, T+ d1 ^0 r# ]( q- t保证了你能拿到 word,否则是拿不到的
' j7 z @1 K9 s& y# I" F4 b3 m O5 n initial_prompt = "Hello, welcome to my lecture.")
. r4 N% s5 P6 _ j+ S/ m保证能尽可能准确的断句 punctuation,但是不是决定性的。/ `% c" S. @ ~, {) ?: P# v) P7 N. B2 e
其他参数可参考源文件:
- N" `: K+ A) M( X0 v: X9 ahttps://github.com/guillaumekln/ ... isper/transcribe.py
8 |7 R6 ?0 d. w L8 o+ N152 def transcribe( {. Q3 P6 K. g3 r
从源文件你可以看到是支持中文的句号断句的。/ T: J v$ _6 L: T+ _
: p( b1 v8 F8 g' P7 ~
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。& C- P/ T8 d3 A1 S: e
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。0 t' e! m+ k1 X n* I; w
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。/ t% n( w$ V8 j2 B! q; b, @
l' c: c2 L7 F8 S* S2 \* v
6 I2 ?9 c0 g: V' E5 c3 X9 q- ]. x* m. e D& Q* i
|
评分
-
查看全部评分
|