爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( ~  y! Q4 t3 `+ n( l
6 o4 C% I9 Y4 C借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 t# H$ D6 N# O" Z3 R- m9 T. B
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。) O5 R! K$ F/ [; U
----------------------------------------
6 H  c# S* p1 Q显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 o3 {4 n- V- E" S% s在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 y$ m2 q' b& v: A& u' V; c----------------------------------------8 |3 F4 @. r: K$ T" X* c, D5 O
https://github.com/guillaumekln/faster-whisper- E. F/ i2 U2 v, }! i. ~
安装如下:
/ Y& Y" l: Q; f  h$ y% M1, Windows 10
- V: R+ g5 l5 U$ [9 H) w4 `8 M2, Python 3.10.11! q/ O3 v+ t: j2 k/ B
3, CUDA 12.1
( g2 v  w  H/ I2 N8 D. @4 H5 E) I4, 在python 3 中安装' D! o2 @, k- D/ h
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
0 I) d% Z) B) ^/ z2 e' V% ?这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
, J5 m1 o7 b, @2 f8 G5,pip install -U openai-whisper# ~+ m7 o- W2 J% l, P% z) h; Q
这是向whisper 致敬,可以不装) Q9 E" b7 ?8 m& F% p! {; d3 Y! v8 _) n- p8 Z
6,pip install faster-whisper5 {- s3 T) ]; n* M  \' J  z! M$ v  H
----------------------------------------" v' Y* T: c" l& A9 ^
whisper 我用的命令行,faster-whisper 我用的是python。* I/ o2 g/ k' d$ Y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
  `5 c# b9 E5 n
/ o5 I+ ?" M+ J----------------------------------------
2 M3 e# J  U3 t# O# K1 F. L; F* T+ F6 `' R
from faster_whisper import WhisperModel$ k' p1 K6 `* L; y0 k, L
; M1 X* V$ M/ R8 e  W% x0 o
model_size = "small"; Z9 h& r: P' y( j
" G/ ~* y0 X; m6 f- ^8 j$ T6 \
model = WhisperModel(model_size, device="cuda", compute_type="int8")
/ u2 O. o6 [/ P+ g/ ^* d6 r" ~: Q# A6 P1 i% K  ~0 n
segments, info = model.transcribe(
4 I* q5 J4 h  \4 Q# |    sourceFileName, 1 F5 q8 [6 x( ^2 V0 Y7 e3 p
    beam_size=5,
9 C: `5 w, F+ m. ]- A2 c% ~    language="en",
! }7 N+ S; t. T( W    task="transcribe",
7 @2 Y/ F. T  j/ ?. n* i    word_timestamps=True, / P* `* _# t8 t5 h
    initial_prompt = "Hello, welcome to my lecture.")
& Q3 v1 c/ f7 e7 ?- H, B$ o7 O0 e! @" p  j/ D
for segment in segments:5 J) [* ?9 g, q7 G/ b
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: n0 O$ m0 j4 k* P# K% e
) Z) `$ Q& o4 y5 K' q        for word in segment.words:
/ H( f& U: v; h5 [% b                ! j& l% y0 l9 N
----------------------------------------- {. H$ d. U: h/ i
5 a" ^! I* A( N, U
代码说明:/ J7 W% ~) g! ]
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。. `7 j" o+ {  H9 I" [" V
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
! Q$ [0 |: j5 d2,segment 本身是很粗糙的,做字幕勉强能用。0 T2 R( R7 W' f
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
3 S' s% }" N: T; a" u4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
( ]8 ^8 p7 _2 X; N1 ~比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。. x- M* b5 w* F4 w) w+ t( ~
5,model.transcribe 中参数说明:/ r1 A5 u: Y8 f" E
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 x$ Q1 A* m* f
其中' I+ M7 M2 D! X$ g1 N9 Z" s
    word_timestamps=True,
% s% V+ R0 v) q, T保证了你能拿到 word,否则是拿不到的
2 b1 R. I& D7 i/ m7 V    initial_prompt = "Hello, welcome to my lecture.")) E4 }: U9 o. R, |1 O: ~
保证能尽可能准确的断句 punctuation,但是不是决定性的。
+ S& r  D- N5 G; K3 W; l$ o其他参数可参考源文件:+ k8 a  ~4 _( T% q2 ~
https://github.com/guillaumekln/ ... isper/transcribe.py
4 n+ @! W5 \& ]+ V. M152 def transcribe(
( R2 e: h& R. ^  g从源文件你可以看到是支持中文的句号断句的。
+ v* N2 w7 P3 X6 i1 K3 {1 A& e" @# _2 ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。: k' ?; C/ b: R- s1 I
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。# z# @, j$ {4 d; s: p
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- Z2 F) w- A7 W. l+ A0 r1 k  R5 i3 K7 J8 e5 Y1 q2 q9 z

! T) G6 _+ X4 O$ N' i0 ?5 |* i( Z0 v6 O

作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://aswetalk.net/bbs/) Powered by Discuz! X3.2