爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 : D2 V) Z: i, ~/ v& m

: @' G8 C9 I4 F! }( X% s$ u借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。: q! ?$ z! u9 Y2 ?
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. u$ T, O8 V) x6 w( E
----------------------------------------
) A! V* A9 j9 |5 L7 T# i+ {显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( S" t) ]! A' D1 D. ~在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。2 X) z$ p+ x0 a" r- w, B( q* p
----------------------------------------3 ~  T* }/ v8 Z9 O8 W  g: ?
https://github.com/guillaumekln/faster-whisper
# K/ f! m# D+ ]- y/ v* D" x* O安装如下:6 b, |& Y: e3 a' i( {6 x
1, Windows 10$ Z  C* k& B2 Y' U) w8 _# @
2, Python 3.10.11' A2 R. `( r( K' R- m: q( N: P
3, CUDA 12.1" Y& l* S  K; W" i* [; @
4, 在python 3 中安装
# ]' b3 {7 G5 L# F. ipip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" L% t5 ?6 y. L4 M4 a
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: f9 l( i9 E: U5,pip install -U openai-whisper9 q$ J4 J  B" K9 C8 o2 {' l
这是向whisper 致敬,可以不装/ c$ w1 s- G% @+ u, z$ Y! T8 j
6,pip install faster-whisper0 H5 g8 R8 k3 H: W0 Y  W8 x' P
----------------------------------------5 z' E, e. E* m
whisper 我用的命令行,faster-whisper 我用的是python。
3 [4 r+ [, k* U1 Z下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 i+ D" O, G: e- ?3 ^6 M3 d4 X- D1 }: k1 T7 u3 H7 B- r/ S; O
----------------------------------------- ~! g* j+ L5 ^: t2 n  F, e+ y

& L3 y0 ?- p! ?6 zfrom faster_whisper import WhisperModel
& U- C4 D: n0 i6 E7 \
6 g6 m. l* c( B0 H$ T+ @model_size = "small", v5 [4 r* ?1 v" f) c/ S

/ N, @) m9 X7 S3 l# I2 J( q) [- Imodel = WhisperModel(model_size, device="cuda", compute_type="int8")- V$ |0 l1 `! b# G9 E, G
7 ?) c: n1 r" Z5 c; i9 G
segments, info = model.transcribe(( Z; f( P6 A+ N0 |0 Z$ f4 J$ n" `
    sourceFileName, " z4 b0 Q. U& P1 `
    beam_size=5,
$ S; B! @, i' A; ?, c+ H, Q& V) u4 H$ b    language="en",
2 w9 Y% }/ V) Q8 k! p6 E; i    task="transcribe", 0 b, Z3 N/ A# B3 y
    word_timestamps=True, ; @, R# w' K# q* n4 q; Z4 r
    initial_prompt = "Hello, welcome to my lecture.")
4 @/ J0 G$ H& h
1 X6 f2 `" `# ]1 N5 p& r3 z5 ofor segment in segments:
: K1 ^: o+ \( N# @0 u    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 O9 _" v/ ?: P- i, B$ L
% s% p- e; u4 S4 @! a3 d        for word in segment.words:
$ F& K6 b" Q8 f0 p. [& H                1 I8 S* e3 T8 M& M# b& m5 y  b
----------------------------------------
- k9 [  h3 g) n: u
5 _/ v0 e, b2 ]& W  ^% @代码说明:! {0 N7 w" k$ s
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
$ t+ ?% g# `* k+ w: n; [% E但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
, ]5 w9 {* x) j- `2,segment 本身是很粗糙的,做字幕勉强能用。8 N+ A/ F9 N7 h
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。" z. Z* H' H+ V
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 M" M! Q+ L: u' Z
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
$ z- s  p9 v* u- a, {8 a/ d7 U5,model.transcribe 中参数说明:
; }) W4 y0 R& ~. q& p4 A( h$ t7 c你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 x+ e  k- w5 q  B& w/ W# ~
其中+ p/ H7 h( X( Q. O. `
    word_timestamps=True, ( k- z# ]6 F& ~  o) q* m9 Y, M' }5 H
保证了你能拿到 word,否则是拿不到的
2 l: Q3 _5 _- y$ S: V    initial_prompt = "Hello, welcome to my lecture."), |- v1 `, Q" E2 Y
保证能尽可能准确的断句 punctuation,但是不是决定性的。
) A. @7 _% W5 A/ o0 v8 j其他参数可参考源文件:
- E0 Q- S: v4 @+ Uhttps://github.com/guillaumekln/ ... isper/transcribe.py
) Q* S1 N8 L* _3 n& {4 a0 }8 ]* i152 def transcribe(
( u) l* l, w1 N- J从源文件你可以看到是支持中文的句号断句的。
/ h) n  N7 O" N
+ b( F; G; c+ H0 D% T; A0 u8 d% _+ Z6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。- h# n. n$ ~8 p2 |/ r1 q
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。/ R* h, j! h% n2 z2 F5 A7 L0 D
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。, D& e% G2 @  {% V% C

- V% P1 x9 c, f1 U( g2 w2 n
1 B$ Y$ W6 G! N1 d: n/ `" s4 h' i  S5 ^5 r3 l7 h# Z' r7 `3 w

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




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