爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 & F' Q4 q- e* X( K" y( p
$ v* X1 Z- i  V7 @, u8 X
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ o- L! f0 F% W1 X8 t3 u效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
0 U! u4 H4 o* z$ G----------------------------------------! e6 }& m4 t" `% Z! [2 m: a+ v" Y; b
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 R; u$ t# F" G+ J. `在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: J0 t, f) k8 k5 c----------------------------------------
+ K3 x2 e3 b8 N& B' X4 R. P8 }% j- \https://github.com/guillaumekln/faster-whisper% w: k+ Q0 X, e8 v8 d6 {
安装如下:7 N' X' k- Y% X1 Q, h/ W
1, Windows 10
7 @: q, D" f' Y! j  u2, Python 3.10.11: p% Z, G8 x/ f
3, CUDA 12.1
5 ^' @4 R1 Z2 X4, 在python 3 中安装' y6 p( A0 |; N, y. r
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117- c  \, l/ T: U$ v9 w# S
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
5 R/ \( ^2 J6 D* v* p) G  S5,pip install -U openai-whisper- U8 s9 Z* s4 D; n) P9 K
这是向whisper 致敬,可以不装
/ L9 n3 R% j0 F6 T1 x; f/ n6,pip install faster-whisper
9 G0 }1 G) Q' b: X4 `- W, K2 W----------------------------------------
( m7 ~$ A0 A+ ~: F0 g( nwhisper 我用的命令行,faster-whisper 我用的是python。
8 {: O# ^- Y) }1 B$ ~下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ v: q6 s, H$ N: _* q3 Q  \
+ o; c) o3 \) }- K----------------------------------------
1 M6 `+ d  }. {# [$ M( l! k1 m
# z! ?7 I+ ~; A0 ufrom faster_whisper import WhisperModel3 U, m; Z+ M7 |. B$ M+ H
8 {5 P' {, o5 e/ t5 d7 H
model_size = "small"  P6 g# m' c+ Z* ~0 j3 ~2 I5 x1 H

: r9 `1 K6 A9 K5 ?) dmodel = WhisperModel(model_size, device="cuda", compute_type="int8")* s( h: _! K' F

2 x! T9 u& D1 i8 d8 Q2 ~1 Psegments, info = model.transcribe(
  i5 U8 {2 }" T* a+ _    sourceFileName, % ?. e! _& ^3 L4 ^, s4 ~
    beam_size=5, 1 u  E, F/ x! u; p! n( ^
    language="en",
# a0 S+ W# E. ?$ R5 I# b9 v; O7 [' Q% j    task="transcribe", 9 x8 a& g8 |1 p6 K
    word_timestamps=True, / @" {. O& |) T
    initial_prompt = "Hello, welcome to my lecture.")
  ^3 _. S( Q; [" I# U; c/ r% Z
" A" w2 O5 c+ p# K" [for segment in segments:2 \- A. }; r& C4 u' ~3 `& z1 q
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))& d1 J! `5 c& Y6 u# U7 {
; k. D% u" ^3 s8 P, t4 H# j3 }, Z
        for word in segment.words:- Z* g1 J8 L. E: Z6 E! |8 [# |
               
( B! R8 h# k7 |4 D' O% h0 ]3 `7 H----------------------------------------, c1 s6 [# A. P1 h# I; G1 |

: V, d+ q  M5 ^- `1 f2 k, S代码说明:: |7 @8 f* b' |) ?
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
% p- z4 F/ ?+ I9 l- W但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' @1 C( g. T* J" H6 H2,segment 本身是很粗糙的,做字幕勉强能用。" E+ l9 R/ j: \: e/ ?( o: I
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& J$ F8 f* f. b0 t: S/ R4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% |+ q' L$ N. h: ~# s. \" t比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
, ?* O/ i: r2 i6 l" F5,model.transcribe 中参数说明:
0 y- o/ c1 a. K$ Z! }+ O你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数  k& w; B. b- x  q
其中4 _3 {. `: r: \  y" V, o
    word_timestamps=True,
  v* ^  a, B% c* D) X: G6 a保证了你能拿到 word,否则是拿不到的9 ^; N8 f( T0 U' o
    initial_prompt = "Hello, welcome to my lecture.")0 T2 [  D) }3 L  p8 o$ r" a# M- J- a
保证能尽可能准确的断句 punctuation,但是不是决定性的。0 r6 l  ?2 k# j6 Z$ R; P
其他参数可参考源文件:
( }2 m( t) l$ i# u+ A1 e, n* ]https://github.com/guillaumekln/ ... isper/transcribe.py
& {; h6 N( y* ]1 x" b6 i152 def transcribe(# d; m2 \' W* q) E7 y. K
从源文件你可以看到是支持中文的句号断句的。
7 Q* i" I4 q# n7 q- [
/ b6 ^7 r' e; ^6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
9 |* N+ C- x6 Y2 ]2 r7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。. {/ X0 D3 k8 p1 t) X; \
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。  f( x- i. A4 y
& j- z1 ~, U+ [6 L6 H8 D: y4 G

3 P: }: `9 n- c  F) O& B
$ V8 N9 B9 u& B3 @" c2 y
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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