设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
) U, J( U* a& p: c' V
8 s8 ]$ x. G' ~# o4 `/ v# w: A5 i借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。$ C/ t9 n* K+ G- I2 ~7 U! K
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。- l$ O% j$ h. ?8 V
----------------------------------------0 T+ A0 S; g+ n2 I$ |+ J
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。# g5 R. A7 U% D9 E
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。& H0 k) n0 _! r/ n( ?
----------------------------------------) M, l' e2 k; a6 ]3 O
https://github.com/guillaumekln/faster-whisper& t. X( B5 e& D9 K0 J
安装如下:( `6 z6 i- n( I4 Y
1, Windows 10
5 m) m: F  R! a- d. U, v2, Python 3.10.11. N' k& F4 w) T/ M( \& Z
3, CUDA 12.1
4 Y2 n1 r, N! z( a+ B4, 在python 3 中安装) T1 E$ {  c% _" r& g5 S* ]' K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117( q# o7 ~6 E& e+ R( H
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 c2 c& Y: u7 f3 }1 [8 q5,pip install -U openai-whisper+ v8 C7 U7 D9 P2 o% L* m6 @% Z
这是向whisper 致敬,可以不装
, J0 @& i0 U% y2 Z  I+ p6,pip install faster-whisper' ~$ z: b* n; A+ j! [, T5 p
----------------------------------------. Z( o' v& R6 x8 [, v5 {
whisper 我用的命令行,faster-whisper 我用的是python。
1 a* {8 w; _+ [' r, y下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
4 r7 o' S1 B1 c" m6 K! {# N+ z
6 d# Y, m& G( x3 }4 R) v) z( o' c4 P----------------------------------------
: J! b9 v( U3 ?# g8 j2 ~* x8 a; J3 W% y! }- f( p1 \8 W
from faster_whisper import WhisperModel" u& G" z8 W& {

% f5 c% ~9 r. r4 z3 z4 dmodel_size = "small"
( }1 Y# T, `) a% G5 s' E! I) C: \& W: P7 X
model = WhisperModel(model_size, device="cuda", compute_type="int8")
+ o, ]) F9 X% i; ?# Q" k2 g7 |$ h3 @! w; U8 ^0 j
segments, info = model.transcribe(. e0 }+ Z/ l5 J; a! }! l! W! ^" e
    sourceFileName,
6 Z0 W! I: H0 ^5 {" a* _    beam_size=5, 1 I) I* t, |7 O
    language="en",
; ^/ o+ P8 y  A+ h    task="transcribe", ! l4 A6 {8 h! i! O. W3 a/ M. h
    word_timestamps=True,
. h8 F5 L. D( H3 p  `    initial_prompt = "Hello, welcome to my lecture.")$ e# m: e" x& @6 {

* R0 Q! [5 d0 o/ T8 M  Afor segment in segments:9 Y2 z1 H. X# F& j" z' ^) y/ E
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 m8 E) P# Y4 ?8 l" b# _5 V

$ h0 V: \7 n3 s6 O% Z) t" s& Q" A4 k7 W        for word in segment.words:" _) p" w* k2 P% f8 Z* J2 a* Y  I
               
/ Y! E/ F% H. t% G6 Z2 s----------------------------------------
2 c, i5 ^$ f+ d0 T; \5 Y4 [# H& ?& `$ q) Q) C5 n( G$ S" M$ ?& H
代码说明:, Y: \4 F1 b- T8 V
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
  b# Q/ s( E) _, `" `& X) u( K8 p但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。6 z/ V8 c0 t4 k3 x/ x
2,segment 本身是很粗糙的,做字幕勉强能用。
4 H) i9 l: B/ z- W  n1 H8 z- u3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
8 l1 }7 Q- H7 R4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 o4 G& V1 N$ e9 u- R1 ?7 S比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。3 b6 `% ]0 Y0 p0 ^
5,model.transcribe 中参数说明:8 u. C" t% ?9 q) J8 f0 b6 O1 P
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
0 {2 I0 m  U; }5 o% U" Q其中4 B, C+ S" S0 K9 [# U% K0 x7 `* w
    word_timestamps=True,
, G7 N, Q) q/ q& o7 M* P) d' c2 L保证了你能拿到 word,否则是拿不到的
. H: m* ~" k6 r! x- Y    initial_prompt = "Hello, welcome to my lecture.")
+ O, Z2 S$ E+ U: n" Y6 q! P  B保证能尽可能准确的断句 punctuation,但是不是决定性的。
. W, w5 l# n$ G5 f+ F8 {: s其他参数可参考源文件:
' V# ~9 A0 c# l; E9 ?" n& \5 Y/ Whttps://github.com/guillaumekln/ ... isper/transcribe.py
3 ^4 y3 K& O: g, j9 b/ a# y152 def transcribe(
' M. f4 e3 F9 L4 i. {/ v7 H从源文件你可以看到是支持中文的句号断句的。
& N) s( K/ [# V! K- {3 o0 f4 [7 O4 h' [) f# F6 K; }
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
5 ~" V2 A* j, Y3 C" P0 v7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 e- \! Z9 {, G8 h0 \0 c4 x
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。, @7 G; ]  |4 r8 R. P; S
9 m0 K9 u( P1 F4 _0 Y. _& @7 g

3 j; l5 W/ q3 B
5 u9 j4 j+ t5 o  z

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-3-16 20:42 , Processed in 0.053280 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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