爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 9 {+ d: q) k6 Y/ ?  k9 K

9 X6 q* C/ T# J% ~, p借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。% ^5 A6 n% \3 g1 o0 {) S1 A
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ Q8 |% c3 g4 H: p+ A
----------------------------------------
6 u& [# m/ f; p% V" X显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 w$ l( j- G& g7 T4 w. D
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
' h& t9 v9 F: K: X7 O  f( h----------------------------------------  m3 U4 V, U9 S
https://github.com/guillaumekln/faster-whisper
" A+ t6 r3 l. U0 E/ n6 O  e; X( {1 a5 n安装如下:
3 A7 h7 u  T  C) K- I1, Windows 10$ |+ G6 Q" b; ^3 x; r
2, Python 3.10.11
3 K. t  L. `+ e0 f$ K+ S7 E$ c3, CUDA 12.1- R7 N4 [) Q7 N+ \
4, 在python 3 中安装
3 B+ @  U. M! @2 x% l, `pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' a- p$ [) U7 j" ?, h这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 U  m7 T3 [) N
5,pip install -U openai-whisper
, h  r; }2 w$ J7 [) b这是向whisper 致敬,可以不装
- s$ W& B3 V/ M- j3 }6,pip install faster-whisper* w1 i8 s" F# v+ v2 s
----------------------------------------
9 d" m4 n+ `1 m! Cwhisper 我用的命令行,faster-whisper 我用的是python。! e' n: D( {; N* I
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
1 X- l; ^- b- [1 G, A8 l% C, H; X4 A
----------------------------------------& E! Z, F2 Y- @1 m! b/ K$ J! F/ e
6 f  f% e3 g7 _* t: u6 I) z
from faster_whisper import WhisperModel
4 G5 N0 d; p& x# R/ D& S2 f
2 g! P+ d' o, Bmodel_size = "small"
, b# ?' l7 R- {$ f& a# A0 Q$ n  K1 r! G& m4 ^" g$ K/ m
model = WhisperModel(model_size, device="cuda", compute_type="int8")
3 B# n1 {4 `9 o& T! H1 j/ n
3 s( [7 Z& T. nsegments, info = model.transcribe(( ^; t0 L5 R8 y- x  Q
    sourceFileName,
, L6 {0 [& t6 B4 f( R0 N    beam_size=5, 9 k& Q+ I3 E( R. M  h, `- H
    language="en",
, r) P5 ~# W9 B# ?9 T% T3 r5 S    task="transcribe", 9 V" p; V2 Y2 F; y  I$ L  n
    word_timestamps=True,
7 n! ?6 r% y$ j4 D    initial_prompt = "Hello, welcome to my lecture.")8 P1 P3 n# P0 _5 i

. V0 w3 R' D3 S' }8 e1 Gfor segment in segments:; K+ n! G" F1 n# X) v
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 l! Y- }' i! D2 w6 T

# S8 b$ u6 {. I5 B, [6 X        for word in segment.words:
7 U+ M, N; |! `$ ~9 s1 F( ]1 a' I1 Z               
9 F, {, T* g" Q: D----------------------------------------
# Y" U3 y( C7 C1 F% Y1 h5 T( f# d/ o% \
代码说明:
% T5 j& i; ~8 M' A. k1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。; z/ A" R: ?& _' S- H" o9 }
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ o4 r. \6 i. I; f4 o% r* a2,segment 本身是很粗糙的,做字幕勉强能用。
5 N5 ~7 ?) y. V3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
! P4 S# B& g" Q$ r; q; o. L, E4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中7 R) C1 ^; P; y2 r6 {& A
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。3 g3 r# G% m" x7 J2 l  |
5,model.transcribe 中参数说明:, V1 y* Z* U' f' {8 Y# j0 B
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
( _0 m) v3 Z" c8 X0 \其中3 {) t) a2 f" ]' q
    word_timestamps=True, % v' ?  `0 a, @) O
保证了你能拿到 word,否则是拿不到的
8 z8 H1 F' m; o; y8 R7 b" }    initial_prompt = "Hello, welcome to my lecture.")% s9 ]8 w8 v3 x/ Q- Q2 @' |% ]
保证能尽可能准确的断句 punctuation,但是不是决定性的。
" w9 V4 X( w$ _8 w; Z: _其他参数可参考源文件:
" Q$ O5 b! i% ?/ |+ p9 z$ F7 Rhttps://github.com/guillaumekln/ ... isper/transcribe.py
% _( ^+ g4 g# f+ d8 U+ Q" d# B8 F152 def transcribe(
  l* d/ \& K# z6 w. g( K& F/ g从源文件你可以看到是支持中文的句号断句的。1 ~' M7 i% G+ Z
8 c8 P+ A* Q5 z9 T+ F/ {- K
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。: g# l' i  _' j# l( t
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。' K* f* [* n3 L  E! N
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。' _7 {; h3 y9 v! B9 w( A; D

: n7 n! I; E4 ~% K  @ 0 i/ D" f' k' n& Z5 e7 L# J# e; G7 a
& ], C- k0 b; C) }, h1 ]8 m

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




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