爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
# @5 v4 z( C  F
! ]+ k4 y- T! Q, l, e8 q借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
* e6 z- Q* O0 I# n* C0 `效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。! k8 L; C: o0 ^* H0 C9 \7 N% x
----------------------------------------6 Y, x+ r+ l3 r7 d
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。% ?2 l0 a4 W# |9 Y/ T- z
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。( z4 i; u  Z) _5 J) c/ x& d+ B
----------------------------------------
+ M( O8 r9 K1 }& m( Q' Whttps://github.com/guillaumekln/faster-whisper
2 `$ |; K- o2 P" A) l+ B安装如下:* r6 d- c2 |7 t5 m; M
1, Windows 10  h  y8 F3 I" _6 W3 L8 B9 J
2, Python 3.10.112 Q+ @/ W4 G2 q/ p
3, CUDA 12.1; t6 y  X& v4 F# O4 V! p
4, 在python 3 中安装' {  n% E" N6 T3 u% S  Q- m% G
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117( {3 S6 E- j8 T0 c6 M, j3 p# t( Z
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。7 c5 U' p) |# f
5,pip install -U openai-whisper5 M$ |( {/ X' l- _
这是向whisper 致敬,可以不装
1 q9 ~- g: d; x5 k- V$ w( G4 Q6,pip install faster-whisper
0 w' ~: P+ J; H3 N0 e# T, x----------------------------------------% X! ]! R' D: d+ ?: e
whisper 我用的命令行,faster-whisper 我用的是python。: V$ u. F2 F  L6 Z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:4 ?* d7 E  f. ^& ^9 i

- X7 Y3 G5 y: h4 B5 f----------------------------------------
  D/ @6 w: G: O- s" w7 d9 t4 Z1 I, i* X* \9 Y
from faster_whisper import WhisperModel
3 D8 |& T% E0 n  w% h: i% i( k3 i7 z4 Z8 K% `
model_size = "small"
( u# y6 E( k+ T9 |3 u) ~
* O! k4 c5 Y) H6 Ymodel = WhisperModel(model_size, device="cuda", compute_type="int8")1 l$ b/ z. f! l, |7 ?* l

4 z( _& \" [; u: F+ ^) E' xsegments, info = model.transcribe(3 k* W' o- x2 P
    sourceFileName, 3 B- z. N! z4 \( {7 \' b* T
    beam_size=5, 9 p* Q/ C5 R$ Z! V
    language="en", - @5 ]1 K# ]) v
    task="transcribe", 7 {& d0 [* B- l; ?2 R/ Z/ m5 \# J
    word_timestamps=True,
% ^6 N; j" i3 K7 f- S    initial_prompt = "Hello, welcome to my lecture.")
4 Q3 \, g- K: r$ T; J0 Y+ S& o/ |# H1 j6 Q& P
for segment in segments:" V  Y% D% J5 y/ a, @" ]; z
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 M1 N* z( C( E3 k. _: u% J
( q2 \: H1 {7 |; o4 v" [0 P        for word in segment.words:
1 X9 D. b1 ^# P2 r, c* l               
( _6 d3 ^; j5 N$ m2 `. b+ q----------------------------------------) f- M4 W$ _; [! M
% w  a3 |2 A  `- b1 F& y( R
代码说明:# [; N7 ^( s: A+ H/ i0 `- t  L% y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
5 s5 S% W  k$ E  T但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
7 L. q( N2 n4 A$ @0 _2,segment 本身是很粗糙的,做字幕勉强能用。1 s# J$ y! m8 b/ f# Y0 |
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
; v$ |5 b$ s7 T9 a7 S, f4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; v7 N& l( ~* `4 _4 h比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
" q2 J* G9 U0 A+ S" m: E5,model.transcribe 中参数说明:
# Y& O: `" {: E% c4 W6 q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数+ x2 Q: ?5 L; {0 y( |. B3 c2 w3 y" ]
其中- l$ u. t. ^3 [' t$ l# G
    word_timestamps=True, 0 |7 ~8 \; s  `: Y
保证了你能拿到 word,否则是拿不到的
# v/ [. Z2 M) b( ~& o    initial_prompt = "Hello, welcome to my lecture.")% i; x2 ?$ o, Y8 ^) s4 Y9 J
保证能尽可能准确的断句 punctuation,但是不是决定性的。
$ {1 h% |! m" I其他参数可参考源文件:0 D5 D) }+ P+ Z4 `; ~. o/ ?
https://github.com/guillaumekln/ ... isper/transcribe.py' P, Y$ u5 q5 y: R4 L3 m1 l3 M
152 def transcribe(
# \' \7 G0 ~! Z- K! i. ?% S从源文件你可以看到是支持中文的句号断句的。, A  ^( L" s8 \3 d# ^4 G
# z7 [  I! Q( L6 |5 r8 O1 J9 a# u
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。, o9 K4 Y  E6 x: L, a  n
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。1 u; w: y/ h" W  f6 x+ y3 _: K
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! `& g5 P% K( [3 B7 Q
& }4 }. A& M" y# v, k( n# O3 _
, y" y7 r: S9 ~8 t
! `' A$ K1 j3 t1 `! [  O# E3 v
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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