设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ( g) G* c+ ^: {) Z! W4 x

; w  q# H/ l; P' J借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
6 T% E$ }9 g' _% `0 b5 }, X效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
1 A+ t( N1 j. T( K2 r# Q----------------------------------------
2 O+ q' b/ f+ d$ C显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 _7 ~; `% v9 W) k& u在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- l1 r% Z3 h; r( \
----------------------------------------/ w7 S, n5 H( v
https://github.com/guillaumekln/faster-whisper' t# @& ]# U$ L9 o# L4 a
安装如下:
. m% m4 H4 r2 y& O, k1, Windows 10  [& v& k( B+ ?3 V( L
2, Python 3.10.11; W9 J& k. E( @
3, CUDA 12.14 {  z, J% J, I9 T5 K
4, 在python 3 中安装
, k/ k6 D$ B, Hpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1176 {( Q# n7 {+ y8 X' c' ]
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。) e/ U5 d( {" l1 I0 M; a- K
5,pip install -U openai-whisper( D; @5 W& g; C# ]# I) D( F' w( S- `
这是向whisper 致敬,可以不装
) h& ~+ h  C* m5 m( }" V3 s* i" y: Q& R6,pip install faster-whisper
/ a" M$ J# P* Q: O----------------------------------------
- ]9 T- ^( I3 M$ N$ C" R% M7 Lwhisper 我用的命令行,faster-whisper 我用的是python。& {- d$ z1 N% g1 b- Y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
. w' I: E0 _; ]- w  i# D7 f# u0 n* i) U8 r5 I2 j& @8 ^1 G
----------------------------------------' r. |" g! l& b  U9 `4 O
$ W3 z+ ^' v' C. y$ S
from faster_whisper import WhisperModel" Y& F+ i/ u2 @( ?$ x  `4 v

, Q/ I4 D1 i4 N+ ~5 Z+ |+ rmodel_size = "small"
) e6 j5 i6 {3 x& Z& n( p' ?: `# R* R% ^
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' Z7 A; a7 u; M6 p( k" J* o. Q: _* L: l# C7 P: A! g) \- ~  X' e
segments, info = model.transcribe(( u, U" k4 O' i; k2 y
    sourceFileName,
2 s/ @2 u! p- n7 Q3 v' f! I    beam_size=5,
% ?7 h# R( O7 ]; ]# k    language="en",
  L# t, c7 a" z6 }2 ?# ?8 B- \    task="transcribe", 0 E" w; U: l3 u4 z( V9 [: X( }
    word_timestamps=True,
1 I: w  q" O- Y- C8 `    initial_prompt = "Hello, welcome to my lecture.")( B% G) e8 B$ @1 U& k
$ E( z7 Q" @* N& k
for segment in segments:% {0 F  P' F$ x+ b: @; V% S
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))) p  o6 X7 Q* d" }" ?

2 X- W$ L3 p0 [* Y2 g        for word in segment.words:
! @2 h1 n" e6 x+ P) V                0 B* U  h# W' s
----------------------------------------
# r" A" x% J4 x" U+ x4 [; H3 m# J2 r5 T2 ^5 L) m
代码说明:
: G/ ]# w. f0 R) b# ]1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
& n3 L9 x* f4 t7 ^# u+ X但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ ~" |" f) |" K7 Q+ w% h
2,segment 本身是很粗糙的,做字幕勉强能用。" X0 E& v1 |/ w/ U: G: x8 z
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ m7 h7 W% s4 X4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
* u9 t( m) W0 |: ?% B* P比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: C1 c9 P; n, z. w0 A: q5,model.transcribe 中参数说明:4 A- e, d0 Y; W% A9 P  M: T1 X
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
/ N# f7 Q) F7 Y, L/ d1 b& e, R, J其中0 X8 M; S, w2 Q" ?
    word_timestamps=True,
7 y" |+ @( D9 j3 F, ~1 h" N4 n保证了你能拿到 word,否则是拿不到的) a5 u7 k9 t5 p1 D! J% r
    initial_prompt = "Hello, welcome to my lecture.")# n8 {, H3 x3 |& |
保证能尽可能准确的断句 punctuation,但是不是决定性的。
! U0 n8 J; D* L# w9 O$ t4 f/ S1 g其他参数可参考源文件:" A+ B1 B+ t. }
https://github.com/guillaumekln/ ... isper/transcribe.py
& i0 Y8 _- @0 S5 g1 w3 a, J% }152 def transcribe(
% ^- u; M+ ]$ W) a从源文件你可以看到是支持中文的句号断句的。+ Q% ?4 X; ^4 T

" u; k3 S* u3 |' B- ~; s6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
; b( Q8 r% A6 x1 E7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
  A& }9 u3 ?; T1 N& x% n8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 n* p/ C1 q0 p/ X1 @
9 O4 K$ }# m# G8 l% F3 B * ~8 q2 d9 ^; t6 j* E) H
" i5 m  i$ S" G8 P  N* ~1 T

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-8-24 01:15 , Processed in 0.054985 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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