设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * H! G9 A/ E0 r( B4 V- \

+ R# m, |" ~* }7 P) [借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。% j' [# f# }. |4 r$ l7 L  E) |
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
: o- _( b% X' P( C1 {----------------------------------------
2 O/ X! h) ?0 B( v% z显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。% i9 I, s' l1 b& n8 ~* _7 N
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
" k, [, @8 H3 c, h----------------------------------------
. k! m! ]: \( J( R* X2 ?* |https://github.com/guillaumekln/faster-whisper
2 K% }: q2 B, u% v安装如下:
* l# f9 _- K2 L7 q, f. {* m- y1, Windows 10; ^6 z' s7 [% g' M. ~, u
2, Python 3.10.118 i7 V+ a+ ~2 }5 z5 G8 w* z
3, CUDA 12.1' {! I7 O) t" P: E- E5 o- I
4, 在python 3 中安装6 F+ r4 X0 T% ~
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117+ |( W  j) n& Q, w2 D
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。" ]6 s, Z/ y9 i0 O9 _+ F
5,pip install -U openai-whisper' p% ^: _- [$ Z. }) D% V( s. C# C
这是向whisper 致敬,可以不装8 Q8 B! s1 b  G9 s/ V
6,pip install faster-whisper/ X4 y# o9 s9 ^1 g
----------------------------------------' e# y+ y1 c+ W& R# e+ u
whisper 我用的命令行,faster-whisper 我用的是python。/ r; }) ]3 ^8 k  X3 \2 v: B
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% g6 `' w8 c0 ~1 h4 [* M3 y9 _
9 q9 o2 U! f  I! d/ x' e" ?1 j$ [----------------------------------------: S" W8 L2 e7 H5 D
  G3 l% i7 l7 M) @& T! L1 G( f
from faster_whisper import WhisperModel1 i0 ~8 U! v9 x0 J* S; X* M
* u1 _5 I+ |! F' u! [3 S$ O
model_size = "small"
; j- `% H! b8 e0 A1 K) p7 F. w' p& Z% M/ i
model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 t; y  f7 A& X! j" k+ x
- i5 T+ k  B( P$ w9 B- j+ d" ]# [' tsegments, info = model.transcribe(
+ g" T8 m7 E) z0 v: q9 a. e    sourceFileName,
* ^: f5 W3 _! l  h+ N! d% B# n: M    beam_size=5, 6 p, k- P6 ~8 a8 q( [' t, n
    language="en", 1 z1 O$ K7 H8 v( A- ^
    task="transcribe", 1 R& v- v3 R  p9 E& P" i
    word_timestamps=True, + l. C4 j' S$ ]$ k' J6 @* Z3 S
    initial_prompt = "Hello, welcome to my lecture.")
) j( W5 I; W: [4 M2 y! |
5 b6 j3 \3 \. A0 x2 xfor segment in segments:; V7 ~, V0 L* W( A- t
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
2 {2 I6 y" |$ X" r' ^
8 `3 }5 m- R$ b8 Z- i' Q5 C        for word in segment.words:3 {% g' \5 Z# A3 y$ K0 N- h
                ( b9 r* m1 J( j5 [
----------------------------------------
2 {- @! _. B, V1 K2 a& P4 P3 i7 d2 V* h+ r* E- V
代码说明:
; M: M3 m5 m: o1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ _9 a2 V0 y/ {2 E但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。( O1 X6 w1 L4 Z1 @, D
2,segment 本身是很粗糙的,做字幕勉强能用。2 `$ O& W6 p8 W3 }
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。  e' b. q0 X  I0 }  k: A
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; w1 N) X0 b+ U; a" Q比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。$ M9 _4 ?. Y" ^
5,model.transcribe 中参数说明:! w) u6 l6 F$ s, n1 J
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
% [+ R) Q! [( k4 v0 c4 r其中
" C  Q5 v0 Z, j$ _9 N) X) [8 E    word_timestamps=True, 8 p9 j6 Q  x  _
保证了你能拿到 word,否则是拿不到的
* ?; d3 R/ J, @6 p5 {+ G' |, F    initial_prompt = "Hello, welcome to my lecture.")
9 J$ y6 i2 A0 j: \" I5 l+ s+ q* o保证能尽可能准确的断句 punctuation,但是不是决定性的。2 h0 N# s  |4 [, s$ X
其他参数可参考源文件:: L4 T" B$ b5 ^7 x
https://github.com/guillaumekln/ ... isper/transcribe.py
$ g+ L9 N, E- D. G* P152 def transcribe(1 q" d3 L1 F' z) c% k
从源文件你可以看到是支持中文的句号断句的。& @6 Y9 ?: |  j* C7 c+ B) e6 x
8 ~: V; K% K/ ]5 [& N" M
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
, C% @) U: ?0 D: I0 p4 J8 O7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 T( d% r( e; O+ E6 `) \8 G3 Z& ^, K8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
; {( j7 X* }7 n! B; L
  W6 Y  ?/ v$ {2 H- T6 }. l/ [* H
2 c. U& T+ |+ ~  v0 p4 P& N
7 y# U8 v& [+ o

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-9-2 12:16 , Processed in 0.064512 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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