设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 s7 |" j( z  |+ j/ r! p9 n( x7 A8 f+ g) q1 {( t
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。) H  [' C9 \( w; w! g
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
$ W! u: S5 Y% `7 Q5 t----------------------------------------
" k. R9 k7 z( A# s  c: L显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。5 }: I% S8 W$ l' ]3 o" c- P$ W
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。7 Z5 i# e$ Y- M" a
----------------------------------------
* r- p: [. N# q: ~9 Mhttps://github.com/guillaumekln/faster-whisper
' b! w& ^1 L, o+ z/ k! r' S安装如下:
; J( k% N7 |. V% U+ W6 D  }1, Windows 102 ^+ Q% j% y& \: N. s
2, Python 3.10.11; G% Z8 B0 i3 f( y3 ^
3, CUDA 12.1/ I8 K! T1 |8 L& i; ]
4, 在python 3 中安装! G0 l( B) ~3 E, ?# |
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117! e& U+ R5 `9 M; D
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
) Q! J1 ^  P1 c- ?4 j5,pip install -U openai-whisper
  b. F" m% i$ t8 ?这是向whisper 致敬,可以不装
: t" q# Y* E" n. {6 u# d6,pip install faster-whisper
9 e; ~. e( w! j$ g4 [  a4 W! P) c----------------------------------------
  r6 X' C) v7 h$ _! nwhisper 我用的命令行,faster-whisper 我用的是python。
. h6 e  K/ O5 Y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:+ B% x! _" n, p: `
- g0 t% b1 [) Z% a6 U# C7 d( N
----------------------------------------
4 U; }, p% q8 Q) c2 Z0 }7 ?
% U5 X/ P$ E& v4 v; g) H7 m0 u5 `3 kfrom faster_whisper import WhisperModel( g. g2 b9 g9 p( n: P, }" B

: H+ E9 p* z* O2 k! emodel_size = "small"1 I% k9 n- _' j+ a

$ ]1 y/ T: w+ m1 r9 l" @8 ?3 b. ^. xmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
& m3 u0 N1 [  d( q  n5 ~+ c
% q' b8 ]+ O( O$ a1 P; Bsegments, info = model.transcribe(
1 e' C' x& P9 m6 p    sourceFileName,
, ~4 J) ]+ z0 Y" z1 A    beam_size=5, + U) B5 f  l8 k' G7 N7 `5 S
    language="en",
! L5 N# z8 q, h7 a! s2 o1 A    task="transcribe", ) f$ \! P; W  o
    word_timestamps=True, " i, w* e" s/ F% I& P7 F
    initial_prompt = "Hello, welcome to my lecture.")
# X& O. i3 l& Z3 Q6 K* @
4 }  _7 n' ~9 B% }! U  s! jfor segment in segments:
# Q) l' D- i' N: M- A: q8 I    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)), m7 C. {' I/ n: n3 c
. v+ y4 c% w' o; E8 A: n
        for word in segment.words:
8 ]$ ^' F) |+ B4 C# d/ _% c               
9 [9 Z0 h4 n& S/ ]----------------------------------------
2 C# l# h  `, q3 n& f
- |7 o# E4 B# C: x6 t! u代码说明:
9 ]6 C0 w/ r* v* J6 A/ q6 l8 d1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
( ?( u4 w% p8 {( x& R' x3 O9 H+ k. R; H但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。; ~' t) b; T" k& ^4 |) e
2,segment 本身是很粗糙的,做字幕勉强能用。
) R5 ]' u" [7 `# @. ]! ]4 Q* o3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ g4 `* k0 a& `- l4 V% N# c4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中' P/ \! z6 q! v. G9 K
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。7 l% V4 y7 E* L% U
5,model.transcribe 中参数说明:
; |# X6 X/ y+ W- h) S' ?# A- t) k你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数6 ?4 d* T  M2 r& d# e% e. j
其中
( N! I, ~" j. h! G$ b9 v& s2 O    word_timestamps=True,
3 m; O2 s2 _7 T8 {  {, r. k保证了你能拿到 word,否则是拿不到的
) }' \5 V; v: t3 T# n    initial_prompt = "Hello, welcome to my lecture.")3 b4 @- W6 z( Z
保证能尽可能准确的断句 punctuation,但是不是决定性的。
2 u$ @: ]5 Y# {2 J* w8 L  ^2 K' z其他参数可参考源文件:
# @8 V& G+ X0 H4 C9 ohttps://github.com/guillaumekln/ ... isper/transcribe.py* T0 X4 J" E0 K8 D
152 def transcribe(
' O; m/ B1 M& _# }从源文件你可以看到是支持中文的句号断句的。
3 M, v7 Z# S( R6 J3 v1 X, R- ]% F9 D. K( N, m
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. `' i; }( R' I5 q. W' G' p! r% c7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 @4 H9 z( }' {8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ N: g8 f3 b- L& q$ H# T
6 R7 ~$ T0 }0 C: q/ C/ Y* Z
4 t  n& W% l2 S. e) k
+ ]1 h( X3 {* A& |" }& v

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-8-25 05:11 , Processed in 0.051215 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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