爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 % P1 {1 t% M- B1 {% J9 E, V
- K  U% F9 F. i- a; L
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。2 E" n0 U6 ?1 q' h* A( ?
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
* f$ z. g# V% u& X6 O7 @, w6 z----------------------------------------# ^& I- ?+ d) w- c. ^, F* \( o2 z
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。% V, H. z2 r; J( Q' A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。0 k8 @' E# T; J/ }1 `. L
----------------------------------------# B) Q8 b# A5 T) D7 S0 ?6 d
https://github.com/guillaumekln/faster-whisper
0 m1 B, j) K  j5 ~安装如下:
% _0 [- b" }8 ^3 ]6 j1, Windows 107 P# K% D+ h: V5 R6 M1 a
2, Python 3.10.11
8 f% X* \) z+ m4 p5 u5 \3, CUDA 12.1; t# ?1 @. P! o6 [
4, 在python 3 中安装# V  X0 e' }" q! q0 x
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 K' A' c0 t8 q3 k5 ~, n5 e; m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
! u, e& c, Y( E, z# E% S5,pip install -U openai-whisper  r! c' U5 ~9 |" e, G/ [; x4 b
这是向whisper 致敬,可以不装
3 v6 y$ O' R+ {, ]4 A0 ~9 }6,pip install faster-whisper
) o  i3 Y3 g: P& f----------------------------------------
% R) A& n4 T. H7 c3 n* p( Z. }whisper 我用的命令行,faster-whisper 我用的是python。; w& F9 O. \' _
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:! m+ X2 M8 Y7 w
* E8 P: ^" ~, U6 T
----------------------------------------# f% j0 Z: V+ e
$ d' }! K. z) [& X# A, O! J/ \5 c
from faster_whisper import WhisperModel: l% e. g/ r' S$ x2 u3 g

& C; N" z3 y* t$ C9 i# Cmodel_size = "small"
3 G! F! `6 u' V  s. r5 l3 @- N4 I* @* q, h
model = WhisperModel(model_size, device="cuda", compute_type="int8")
9 p1 J* I8 E4 u" H
9 h# u2 m  c# l5 ^segments, info = model.transcribe(5 c. b7 \$ g& I) t9 i
    sourceFileName,
7 r/ Y+ m) E$ \5 G    beam_size=5,
- @# [& q/ U: u/ h+ W8 g    language="en", 4 e3 t: \3 m) k8 g# A# f2 }
    task="transcribe",
9 k" x" I/ R  I& ?- X1 Z    word_timestamps=True,
7 y( T" t0 ?; @    initial_prompt = "Hello, welcome to my lecture.")1 _, @4 l7 S! T" y6 ~  z6 o+ D

6 x/ x8 u$ F2 J4 v1 O( ffor segment in segments:% _( T3 k  D" H; G2 @; _" j) {/ E
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
9 _+ l/ k) W! N6 k  j& s. q% L( a/ B* M6 Z
        for word in segment.words:, R) J" q4 s2 P* `! x
                , q4 N" D, Y6 t( E( U1 ~9 Y/ l
----------------------------------------" ]$ e! B4 l; U+ r" r, P0 ^8 R0 }% T
$ I9 d5 V! {  J) X$ I5 [  s) F
代码说明:# ?8 m% C) N- F; c& y& J) Z: H
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 @: m3 y8 y6 i# A5 W
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
& G2 h$ [3 \( g& M+ T) N1 C2,segment 本身是很粗糙的,做字幕勉强能用。# {: V2 F5 r9 M6 N; ]: t
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。- ]+ L: @( J  l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中1 D$ \" L( [% E! k. [
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( X* R2 J( t+ C4 q+ c% S: i5,model.transcribe 中参数说明:
+ Q( U1 d  Q1 w) v( V. b$ c8 y你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
* C! y- e$ }$ g7 S  b1 v其中
: z3 M' f" ^  ?2 t    word_timestamps=True, ) }% G$ ]6 U2 Z( b$ i$ ]
保证了你能拿到 word,否则是拿不到的
, u) W3 y  q  j4 X9 m; L( S9 Y5 j    initial_prompt = "Hello, welcome to my lecture.")
9 P5 e8 Q5 e* a/ e7 B8 h保证能尽可能准确的断句 punctuation,但是不是决定性的。4 p1 }6 [1 c" [- ^3 @
其他参数可参考源文件:9 c  E: n  u* j4 d
https://github.com/guillaumekln/ ... isper/transcribe.py
% r1 I! c7 E8 \152 def transcribe(6 m7 ?9 V9 V0 S# t: l5 t
从源文件你可以看到是支持中文的句号断句的。
. K0 A' b9 y  |4 Q3 J
/ P, q- i+ }( Q* D1 _6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
2 [0 k! v2 G$ d# B/ y7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
  c4 m- E8 e3 [0 L, j: c' _5 V4 {8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 y- E+ q9 U. c; e1 H* _! h7 W
5 F9 W& x' q$ |& S
( z5 M3 w# R7 o; |( i8 ~3 G- S! {' E& ]% ]1 I9 p4 v

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




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