设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 4969|回复: 1
打印 上一主题 下一主题

[信息技术] faster-whisper 更快的语音到文字的识别 ASR

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! e+ i0 |4 l6 D. ?% f8 n& k* ^
: ~5 J, L* B% k借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
& w* A% p1 ]4 ?+ o效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( C1 q+ f/ l: \' w& h. N2 \! g# }
----------------------------------------6 j4 C! B% i- z* P* x
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。1 M6 v2 W# w( e8 R9 Q' C1 R
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ m& A9 f: h4 k9 I- [$ X, ^' j----------------------------------------5 h3 r0 l! c  ^& ?, ]
https://github.com/guillaumekln/faster-whisper
& T/ w% e+ w' R8 \安装如下:
( _+ d' D- |2 d. n1, Windows 10
5 o* N% \& L# w2, Python 3.10.11/ u+ Q8 O! D4 \5 ]: y
3, CUDA 12.1
0 ?5 D4 u, S$ C3 z% G: t4, 在python 3 中安装+ U  d$ Q3 |; H3 C/ f1 E- h: f* P/ @
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117' f. _0 ]; C% c" v6 @9 y/ e
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。  q( u. N- n8 q. ], W6 S7 C4 f
5,pip install -U openai-whisper
5 b- |" n- B4 I( T4 i4 ~, d5 X这是向whisper 致敬,可以不装8 n7 R+ Q* W7 S' s& O! R
6,pip install faster-whisper7 Y/ o- E  ?8 N1 U- w* a  |+ ^/ \
----------------------------------------
& x. y& z- G: I+ Z) uwhisper 我用的命令行,faster-whisper 我用的是python。" @+ \  ~9 W$ N- R( C
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:  g( a$ V2 a& U( M* r4 F) H5 f0 j

% @! G8 F' r" M9 q1 O, j' \----------------------------------------
, `5 w, i  o' r8 v( ]
3 y7 C: ?+ M6 a4 `, C3 `6 ofrom faster_whisper import WhisperModel2 `2 a4 L# k# k: V5 V! }
, Z' l  [* p4 n0 H# \, ]
model_size = "small"
9 I. R5 u7 z( `. f
3 G5 {, Q( C% vmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
/ W! G- t" x1 g1 P. \6 B3 ^: @3 a! z4 y; E5 Z$ \) |+ ?! M/ d
segments, info = model.transcribe(
) o0 f( [8 T. T$ b- [3 {    sourceFileName,
+ L2 W7 p  z/ R7 F1 X% y" }4 H    beam_size=5,
( G2 b: @; c/ C/ n7 O- d  O. b# r    language="en", ' E7 b( J- i, @
    task="transcribe", % W& P3 o- q  z2 q
    word_timestamps=True,
' W, Q8 a* x" l' S( i1 r8 M6 ?3 c- k    initial_prompt = "Hello, welcome to my lecture.")* b5 _: M+ T7 y7 j7 @; {9 u$ g

9 u- k# L% n2 Mfor segment in segments:
9 m, X4 ^0 v' @! }$ y5 f3 Y: I    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& {, Z3 k' |" D" v; }
* Z0 T) x( n8 w( h        for word in segment.words:" S/ o! M% @5 X
                , L. D# [) M9 @1 A( E! B( k
----------------------------------------# P9 q. _5 d5 r9 d

  C; N% q( B! P8 l) M& V3 k6 D& j/ b2 S5 q代码说明:0 W9 p" V" P: P  d. N; t
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
: y' `2 l, z" ~2 E1 c6 b2 i" n: @但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。% s' Q* z& }0 b9 Z- e2 ]
2,segment 本身是很粗糙的,做字幕勉强能用。$ H1 t+ m' C6 M1 L% M* g
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。6 v' k1 G" m' a* I, ]6 ^9 F
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中+ I6 l4 E5 y8 u/ w5 c$ J4 p  ?
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
) i1 w0 J6 j( a1 x( w, f+ |- a5,model.transcribe 中参数说明:
% s4 z8 Q8 ^  X! X. ~& V你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 u* `- P; {. m  F
其中; t" N/ q$ s' `8 }! x0 }
    word_timestamps=True, % ^; h9 |8 Y, C6 x4 ]: G0 X7 D
保证了你能拿到 word,否则是拿不到的) s% l* J2 \4 n% k
    initial_prompt = "Hello, welcome to my lecture.")) z4 V2 s2 b- y: q& Z: z
保证能尽可能准确的断句 punctuation,但是不是决定性的。
6 Q& G( s8 c8 X+ P  d' ?其他参数可参考源文件:
  h: U. r7 ~' w" g, g% c& h2 ^$ Zhttps://github.com/guillaumekln/ ... isper/transcribe.py
- Q0 b+ s0 C: b3 _  h  b; ~1 O152 def transcribe(" g8 R. o5 ]' P5 m  f) [+ g
从源文件你可以看到是支持中文的句号断句的。
: F+ E- N2 Q5 a6 a5 J
0 A9 j  P4 @3 H# Q6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ N6 P: |% Y5 y  N% F9 S7 R2 F7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& q) z/ I  W) t  |8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! j" a' `. l# c
  F3 Z* s6 H  J/ ~
& C( E9 [" B3 |8 }
) D" r2 W. p, ]/ i" W6 C1 U

评分

参与人数 4爱元 +32 收起 理由
蓦然回首 + 8
唐家山 + 4
老票 + 12
老财迷 + 8

查看全部评分

该用户从未签到

沙发
 楼主| 发表于 2023-6-4 11:53:23 | 只看该作者
多谢各位榜爷打赏。
回复 支持 反对

使用道具 举报

手机版|小黑屋|Archiver|网站错误报告|爱吱声   

GMT+8, 2025-11-13 04:29 , Processed in 0.035546 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表