爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 $ h+ h& Z, B* J

; T4 M7 R/ l* Y, Z# Z& `) B4 ?借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。- P* h+ D: A- ?7 w5 Y* V7 A2 _
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。5 J( [1 O# r- c/ _
----------------------------------------# ~  q( ]6 `$ M# d/ [
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。( V* f6 c& |  {- O% U) j7 E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。7 S' l+ @+ g6 d' |  b2 Q
----------------------------------------
$ K) L7 T" _* Yhttps://github.com/guillaumekln/faster-whisper" ?% U3 \, ]' S- j# w: P) e
安装如下:( R+ X9 I3 B) ], X
1, Windows 10, v- B7 C. W! [+ v
2, Python 3.10.119 t$ O+ f. ^: D5 V
3, CUDA 12.1
8 U2 q3 W! @+ s4, 在python 3 中安装
' p" t- U4 a( hpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) F0 b! i* f# i# G4 @6 a这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) M- q2 n; f" c  a0 _' ]5,pip install -U openai-whisper6 \) E* @- ^( g! ~9 }
这是向whisper 致敬,可以不装
1 [4 }; l) \/ y9 Y" a6,pip install faster-whisper7 x" {8 r  t. p
----------------------------------------( ^# {+ j% n5 q% U+ Y$ _
whisper 我用的命令行,faster-whisper 我用的是python。
  g/ g0 U' ~- q  {下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:* u# R8 N! s3 x
& O! Q5 m9 k9 i
----------------------------------------- E' x3 C; o5 j6 d' s7 I* {

7 w* B1 ?- \, Y5 X. o! l+ Wfrom faster_whisper import WhisperModel7 L7 w9 [+ [1 N. \! }3 t  Q
* i  l2 f  i2 I
model_size = "small"' Y1 L; n8 g! l, g& c  ]6 t; j

/ l6 H4 Q1 m2 j2 {model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 c2 N  Y" H; j
2 B4 r* {" ]7 m+ M3 w, W+ t" P* J* S+ Esegments, info = model.transcribe() }- `4 R" Z4 M  F0 n
    sourceFileName, 9 h. v0 D+ Z9 _5 Q3 ?( {
    beam_size=5, $ z9 W5 w6 B3 p! v
    language="en", 0 r% k) s. C4 t! @$ s6 x$ F
    task="transcribe", & O1 [0 b( g8 {& Q- _; C
    word_timestamps=True, 8 T1 S+ w$ I, Q3 \/ R
    initial_prompt = "Hello, welcome to my lecture."), X) K/ m( r% l1 y  N* f5 s
9 J5 T9 D; t$ z5 ~9 Y9 T' t
for segment in segments:
! s% Z8 H/ }* d    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) ]; R; D/ Y4 n) h

; s7 H, {' g, o1 U( K        for word in segment.words:
8 q# D# W0 \' d+ _               
/ d8 Z' b0 H+ k; L----------------------------------------
9 ?  N: ~. K# t, ?; V, Z& Z8 r
3 J, W& x) G: q  e" k# V  G. e% U代码说明:
% X) a. r# ^) d4 W, p+ R/ y8 Z1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
2 i7 a( R% V/ _8 Q% E* y但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。7 B" b1 E7 g, d" ^# G9 ]" n/ [
2,segment 本身是很粗糙的,做字幕勉强能用。
9 M$ ]. g0 {/ \9 k+ a6 W2 r3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
9 K5 A( {2 x: s4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中! {" U" B. B2 b
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 c. K) d" X3 C3 B2 c8 l5 y9 W
5,model.transcribe 中参数说明:0 p; f6 i9 l' o  M8 D
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
% T2 w. @' H$ @9 ?" B8 K1 J其中
) C5 |2 j4 U& S2 }- C7 p. x    word_timestamps=True,
: m4 |3 x+ q% o" R保证了你能拿到 word,否则是拿不到的. R! m4 H: ?0 g! G
    initial_prompt = "Hello, welcome to my lecture.")) }+ O3 G2 v8 H1 A
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 x2 M! R3 W" A# C$ N其他参数可参考源文件:: K% g7 b, j. _9 P
https://github.com/guillaumekln/ ... isper/transcribe.py7 `: W  e3 O+ w( a* p# \$ l3 ~
152 def transcribe(
2 q3 b4 h2 J* O( p: v- J从源文件你可以看到是支持中文的句号断句的。
% z5 e2 M4 b" }  M" {
7 _2 p" `) G" T' y4 ~6 X5 j  N4 L6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。4 }+ Q4 A7 R; l" K# d" r
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。, w2 i! W3 x5 j. `& k, `
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
3 e$ a4 ~. \9 T/ m
, }& t# l% D6 f6 N
  r+ T! l# h+ Q. V% z, \
) j& M8 c2 [* S- {0 x: V
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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