设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 5 M6 Y; A; v8 j7 y2 x2 c
! K3 ]) q: F5 F7 H: p& l
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。6 |9 c( T$ u5 [; K
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。8 s  l8 r- G  H, B* K: j, V5 K; O1 t3 X
----------------------------------------
2 }3 d& x9 x( u) v/ B: B1 w显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。/ E, r) X/ k4 ]0 ~5 d  Z
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
8 S0 t. C6 b% F: \----------------------------------------
  z1 V8 X: x) F3 c' A# S* C* |https://github.com/guillaumekln/faster-whisper+ e5 p- c, C% P$ P/ y+ p
安装如下:
* X: g( d  U' K0 D3 x6 X2 x  P1, Windows 10
6 s3 N8 ^5 h6 _# V$ f' \5 g% K2, Python 3.10.11
8 @& m+ ?( I9 M1 L5 S$ y5 M  d3, CUDA 12.1. Z2 ]% ^. k$ Q9 Q6 x+ |
4, 在python 3 中安装8 U, w% z, I8 X  Q; l
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 }' d) M5 \* D9 C
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。6 v6 D" G5 Z% u+ I* [. ^  b8 G
5,pip install -U openai-whisper
9 J1 t9 f7 h, O3 _0 N这是向whisper 致敬,可以不装
" R; f" p1 G% ^! P4 n; T, d6,pip install faster-whisper
0 b& ]7 q7 q  x! V----------------------------------------
( }8 s' p; V! Z: F& o+ L( n# e) M5 zwhisper 我用的命令行,faster-whisper 我用的是python。
" Q$ r4 i! H( X下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:3 W1 M* |1 P; A& A; c; c+ N, r
8 ~- o, G5 L+ C! I
----------------------------------------  G% S# [6 q" h6 h9 V, k; T

* x5 R! Y$ o. H6 y" Sfrom faster_whisper import WhisperModel
* ?: ?3 b4 {7 v
1 D6 `: r/ n5 k  M9 ^+ wmodel_size = "small"( S& Z$ w+ _! l! G% s; z0 }
0 w, v& p( a. M( ^  u
model = WhisperModel(model_size, device="cuda", compute_type="int8")- _0 Y- H9 i6 e- r6 N; }
. R1 @' X: {% S! F# {
segments, info = model.transcribe(
2 \0 r* ^6 W9 [1 W5 H$ m    sourceFileName,
/ l: i6 _) n6 M/ m( l    beam_size=5, # s' m+ E2 j" ^
    language="en", 1 R9 a5 \, Q1 M) c6 W
    task="transcribe", $ Z6 u3 _4 i, A3 M% |& W
    word_timestamps=True, + L( G+ V; z2 h
    initial_prompt = "Hello, welcome to my lecture.")
- I$ {7 z. }: Z/ _% _" }, n: `9 o4 D, t
, Y* b& B. t# z6 efor segment in segments:) M2 L' U  P8 S9 `) M
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
/ b* ^% V- h1 t+ k
; r, c& @' Z" b  J2 M% N% }1 _) k% p* \        for word in segment.words:: _3 {9 h8 X% }: @/ N, V  [
               
6 J" r: C7 G! g; c# G/ E0 k( ^4 Y----------------------------------------$ }* b' G7 [  W1 [( {6 y1 p

2 `- d1 e1 x' g6 H3 k代码说明:
2 c  P2 C# _" W1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% ?" N9 j+ X3 F7 Q0 M' O6 U' I/ t
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。4 m1 D9 c" y7 b& b
2,segment 本身是很粗糙的,做字幕勉强能用。$ v2 R9 H1 c7 o' D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
: r; `( L: A  ^8 U4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 p0 V( n! t% u" u. i: t+ B% V
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# t& c- R6 P5 z4 E5 J5,model.transcribe 中参数说明:
1 C4 C& \# E7 m+ D( J" M4 ?你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数( v, Z% ]' _9 C& i- U  c
其中. I" v) a8 D, a3 U
    word_timestamps=True,
# x1 Q8 Q. t: K! Z: D' m保证了你能拿到 word,否则是拿不到的
4 V3 N9 ]1 S0 ^$ J6 b    initial_prompt = "Hello, welcome to my lecture.")- ]6 c0 _9 z/ r: l1 d! b$ N
保证能尽可能准确的断句 punctuation,但是不是决定性的。& n8 w" Y* k3 N( }( Q0 ^1 @+ h
其他参数可参考源文件:
0 p/ x8 O' }  b2 \https://github.com/guillaumekln/ ... isper/transcribe.py
* h# x, J  U" X8 p9 L, s$ A+ H, o152 def transcribe(' |7 L$ h. q$ p9 ^5 j
从源文件你可以看到是支持中文的句号断句的。
4 S" K. A$ V& K! F: g& d; ^
6 |1 [7 @/ e! x' ^( O6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
' [# A" }' M2 e+ W7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。% M$ |' ^% p9 s6 ^' b
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
; {" z, s( ^  ~+ b, T" w1 @! N+ F: R5 t9 j  V! v3 x3 {0 \$ @
1 }( d' ^6 {% T7 b( t

! v  V/ ]# R) G0 t

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-1-30 04:39 , Processed in 0.053004 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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