爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
7 Z7 @4 M# \, x. D& K, s+ \4 J+ _( w$ @% Z, [! v. Y+ ^  h
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
$ b5 U2 H" v  p) W/ S" @7 f6 H效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
/ m9 I' f0 }4 C8 y----------------------------------------
* M7 S6 B% A6 C4 W1 L& v4 h, Z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
$ L! d( }( F( r3 I; z在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 Y! E$ q7 E$ a4 @  i: Y----------------------------------------7 y7 Q: N# U" N8 P8 [
https://github.com/guillaumekln/faster-whisper
- V1 N/ M, P9 |  W2 I2 \& @' Z安装如下:# b- R. e2 ^0 g2 L, N/ k: o% U
1, Windows 10/ E3 W( r' O, P
2, Python 3.10.11
) R- W* b- v& Z6 o3 ?3, CUDA 12.1
9 A$ F3 M: f2 H  Z4, 在python 3 中安装, [; ?! f, _1 b6 U1 i0 c
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1171 r5 @3 b; M, L6 b; u
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( A, x/ T6 P) Y9 p" W7 |# {5,pip install -U openai-whisper+ Z* {& K9 \, E4 s9 I
这是向whisper 致敬,可以不装7 O' \4 M; Q9 \- V0 T
6,pip install faster-whisper
  H7 k5 b  ^6 ?. {  m3 D----------------------------------------5 N* u% k6 z; l# g8 \
whisper 我用的命令行,faster-whisper 我用的是python。
8 `. T3 R, N7 Y+ H下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
* Q' Q! V/ |3 I: V
$ V2 L0 B& e+ P% B* g. a/ S; o----------------------------------------
0 f  H" ]( \+ d7 O0 _" O& W' e; y! ^  Q7 h" ~1 X
from faster_whisper import WhisperModel
( z2 ^" D# p' U4 J5 K' z% |" D7 E  [* {8 Y( L
model_size = "small"2 b! [1 T; K, c8 z  z) i  W

" I' d4 e- r+ Z& P9 M/ Q( P4 {( |model = WhisperModel(model_size, device="cuda", compute_type="int8")6 K8 y( h$ K/ Q, r' _5 t$ T1 n
0 E* r8 j! J/ X8 I! b5 L
segments, info = model.transcribe(
; ]. @: }1 U' ]; x0 @  j    sourceFileName, % ~' z  A# ~; \1 _# E
    beam_size=5,
! v  c1 j" x% A- F5 v9 \' I    language="en", 7 g; k- T6 D; i0 ^6 [6 n2 O
    task="transcribe",
' O8 V7 I) i# V5 C( e# k9 J    word_timestamps=True,
0 Y* y2 o* v* ]2 k" u8 m    initial_prompt = "Hello, welcome to my lecture.")  r: U7 p9 Q1 ~3 M9 w: N4 D

# m, x1 ]' _! F6 }7 y3 yfor segment in segments:- v/ \1 @1 m- R3 d5 q6 I0 q
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
: ^$ h- M" L# S8 i: k, D# V+ u: ~3 ^( S. s. }. c
        for word in segment.words:
8 W, F* x; K8 c) a9 c1 S$ j               
$ Q$ A9 U' a0 K----------------------------------------
  }; E4 k; A8 t3 Y7 |* ?
% J% _5 A7 q, p9 c代码说明:) M( q8 P( w3 y1 t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。: T* W! i$ ^, p2 T
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ M, i' W0 H2 S6 I8 K8 d, z
2,segment 本身是很粗糙的,做字幕勉强能用。
( q* a8 w8 ~& ]6 ~! E) N, @, D3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。) T6 K. o2 }$ r
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中) h3 ~0 C0 r' f8 B
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: T/ W0 X& d8 b) W5 `6 N5,model.transcribe 中参数说明:
/ e% t2 `7 u% L2 o你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数4 r$ h" g& G) N7 K6 P
其中* T& K4 t0 l3 U6 U: n
    word_timestamps=True, / v9 w' e% m; W% v8 o& {" z
保证了你能拿到 word,否则是拿不到的
* K9 j# Y; ?. H- w: E    initial_prompt = "Hello, welcome to my lecture.")
) D. t; u" U7 H9 x( Z4 M. T保证能尽可能准确的断句 punctuation,但是不是决定性的。! n  o! s' k- X. Z4 Z' m  C
其他参数可参考源文件:
) g8 p% G0 A# ?' c1 xhttps://github.com/guillaumekln/ ... isper/transcribe.py
7 _! J) k. M: _% M' u152 def transcribe(6 C" |4 O1 H$ y( ]4 t
从源文件你可以看到是支持中文的句号断句的。
9 ?8 z& F! H3 \/ T5 O* O" u2 {
5 a! q% R) l- S& S+ B: E6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。; o, \) F. q* X. n/ |/ N( I1 q# @, V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。  q6 y0 V* y5 a9 F% `
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。0 k" a  z8 V2 f. P3 J4 m) G3 s, k
' n1 p8 W+ E# D, K0 d
: k; R: Z/ A9 H0 V( i/ V4 m
! ^" [: B$ J& }

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




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