爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
+ U; ]8 y# X4 X" I% ^) `8 g3 `# V! O- [4 S
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。5 W0 F5 K1 x# _3 m0 i  s* k) P- m2 S
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。& ?/ a1 C( A" i: i# u  A
----------------------------------------! u% V+ [! l5 f7 d: w, G
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( a, R( |7 [$ {$ U在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
, Q: x0 c1 S; m  j: H7 x! k0 s3 O" Z----------------------------------------. k8 j# ?" j" }: p- n! j& L1 D
https://github.com/guillaumekln/faster-whisper
; |1 \# C" U+ m2 Y9 Z安装如下:
+ V$ f% @: r' J+ t1 e& M# T0 |1, Windows 106 D4 w! V/ [" p# L% U0 F
2, Python 3.10.11
- E7 m6 V; v: a# m' v, f3, CUDA 12.1
( e# r8 W. l+ X. G0 h4, 在python 3 中安装
. @8 d, B/ P( e- r1 Q7 d* ]9 Upip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' B8 Y/ m# R, \" }3 S% n" Q- s这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。( S1 E. X( Y& v' ~
5,pip install -U openai-whisper
4 Z: G5 K+ {- A: z这是向whisper 致敬,可以不装
& h; L) t" ~7 m4 f4 R% A6,pip install faster-whisper
8 F, J! u: ]3 a- U+ M+ q----------------------------------------3 Z! s, Y; J' S# w; w1 R  D- f
whisper 我用的命令行,faster-whisper 我用的是python。1 U( ^. {$ [& N0 O5 O2 t- {9 {
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:, o9 u  h2 C/ h/ X2 B1 H
/ j! _- L# R* p1 M
----------------------------------------
4 ^$ [, F) o  X( A: \- \' r
* I( s. Q; x" v7 s7 u* A( e& s5 S1 |: Vfrom faster_whisper import WhisperModel
/ T; B& P/ w  }8 H9 k6 M1 Y1 [5 L$ q
model_size = "small"( f# b3 P1 n5 l* q  x0 Q3 M

0 x5 p- t: W5 O9 K/ R2 a2 Mmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
- o$ H4 ^$ v) y4 E9 ]
4 J4 W$ e6 c( m, `$ rsegments, info = model.transcribe(& s" k7 I( p1 ~% m) p$ r; `1 G$ s
    sourceFileName,
4 B0 @; \( l; \! P1 E1 X1 H3 V. |    beam_size=5, % B- D+ w7 t7 x6 ?7 ?
    language="en", " \; o8 U6 O1 g
    task="transcribe",
& o5 J7 q9 P" |6 N3 W& q    word_timestamps=True, 9 T3 g8 A: B5 r+ O
    initial_prompt = "Hello, welcome to my lecture.")
, U# @& }& K0 y' |! ]9 H4 g: ^- i/ M0 p
( z, }# Z' n; v! Z  _; ]1 Xfor segment in segments:* H8 [7 l# P5 H
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
. k. F! r9 |3 {0 H5 K7 ]  {% e. |: w6 T' d& i
        for word in segment.words:
/ V4 G; R- z+ ^3 ?               
5 @2 ^) V  T/ F& A----------------------------------------7 l& o3 t0 q  n7 l

( ]# X2 n0 P9 f: J( D. g代码说明:* c6 P4 E+ I  w
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
1 d7 l9 @  a$ F; i但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。* m! e) d8 W# z' r- v# \2 ~" l2 _" L
2,segment 本身是很粗糙的,做字幕勉强能用。
  M" |- e1 E! \/ ?0 h: X3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; N3 L4 {7 u# ~/ d9 l4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 ]9 n6 ~( P: `
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。. S: D: W3 _- E
5,model.transcribe 中参数说明:3 I' Z' B. ]) |: m
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数# i5 g8 R. f: E0 V: X/ p8 f8 k" i
其中
3 ^* ?& F$ M* T" B! F. ^& o    word_timestamps=True,
0 h+ D! @' c/ _8 u9 E保证了你能拿到 word,否则是拿不到的8 Z9 t0 R. c& S/ w8 _/ P
    initial_prompt = "Hello, welcome to my lecture.")9 D0 R7 r' F0 c& l" ^$ t
保证能尽可能准确的断句 punctuation,但是不是决定性的。
  L, Z2 N. u. P其他参数可参考源文件:& b3 u  i+ O0 R% U0 a
https://github.com/guillaumekln/ ... isper/transcribe.py7 ]3 @  m* ?& G1 _  S
152 def transcribe(0 ^  E& r/ S+ f8 x: F( \
从源文件你可以看到是支持中文的句号断句的。+ w9 r5 n1 t/ F; N2 N; _, ?
" ]4 T! \2 @& H( F
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
, Y# q1 E/ `  f1 ~! R: C/ K& }7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。" h8 m- Z- L  G3 U$ d( D
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。% R) g0 G) A6 d# X* w4 J
. Z2 o$ @: Q2 Z. l- g

9 a. w4 A7 p" y, x$ }  U
0 [1 v6 b# C# _9 J- L
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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