设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 $ B( |8 L6 `3 I9 |

# j3 h! u: y; L( p0 t借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。% H3 @0 k, v. o( ~3 L
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。/ R$ K* {2 a! o( y
----------------------------------------
8 O% p7 H' g4 t$ l显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
) ?; t5 A, u$ R  S# d4 \" U在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。: P1 c- k" p( R6 j
----------------------------------------
/ J0 @) X) [2 k- l' Ehttps://github.com/guillaumekln/faster-whisper
+ G0 B% F6 R& F% j: f, a/ \0 |( ]) h$ C安装如下:; J! s" ^2 o, Q2 }  K
1, Windows 10
" y6 ?; `3 I3 N" f* ?2, Python 3.10.11
) k; Y0 w1 n) E( U% k) i3, CUDA 12.1
3 h; x% Q" v  v- M* d, }3 H; _4 ^$ O4, 在python 3 中安装, M( i. {( }1 I9 B; U9 y% p
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117) C, x; ~! Q! Y) V( u
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
# G9 F. t& w0 y" h8 J/ i5,pip install -U openai-whisper* s9 m3 d5 u4 f/ X% D) @" ~
这是向whisper 致敬,可以不装" @$ s) s6 r9 J9 c+ d: J
6,pip install faster-whisper1 P5 o( J! ~4 \
----------------------------------------
6 W, K  H9 j; F# x/ ^8 v- ?! j7 Mwhisper 我用的命令行,faster-whisper 我用的是python。+ f* R$ k( W3 V6 N* g
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ h5 T% I) R: {9 x2 k+ K$ w. @9 y, Z
+ |2 Q& ^3 _- x9 B8 w----------------------------------------3 M3 Y2 {9 t) s, L
/ m' ~  K! Q- L0 a. [& Q
from faster_whisper import WhisperModel
% X8 I  _% A; Q6 C  l' |
% E# }$ y% e. U0 lmodel_size = "small"2 k3 M( L' _0 Q  B+ M
  E& T9 H( V) T% I6 `7 p
model = WhisperModel(model_size, device="cuda", compute_type="int8")
% c# T" o' a' |0 p' x0 s2 L. w  Z) b" f0 b; ]; E' Q1 O$ O
segments, info = model.transcribe() S" C* ^7 T0 V1 e
    sourceFileName,
" I7 ~& P: L! }    beam_size=5,
8 E& l: `4 u6 ?2 |! p    language="en",
+ C  j3 N7 \- A  U, [( P6 f. b    task="transcribe",
  H: G7 X. l$ K$ x- l    word_timestamps=True,
# B3 v6 [7 O. I' i, C/ v$ l  R! }    initial_prompt = "Hello, welcome to my lecture.")
; I  u  z! X7 s, F9 ^$ d: P" ?; i" H, W: Y, d0 j7 o7 g8 Q
for segment in segments:
/ p1 F- ~' `0 a4 R0 m1 }6 n1 y    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))& v* T0 r3 ]: ~* [( `
9 g9 E: w: e1 x% q1 R7 \
        for word in segment.words:, Q% D6 Y8 y" ?- H: o! {( w
                : p: s  N1 N7 A5 R+ l
----------------------------------------
+ s( n8 V; F: Q" b* {: g- s) L8 M; A8 O. ~/ |0 ?) W9 i
代码说明:
% \$ {" b& M: n$ Y/ j7 A1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ y9 o4 T' }* j5 V
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。# B6 w) Q7 P7 a* n4 Q
2,segment 本身是很粗糙的,做字幕勉强能用。
$ m6 a" s7 q" y3 V. J' i8 c3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& D' w  y! c  ?  E4 k% Y9 l$ }$ n4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
. W  _6 g8 H$ T( A/ p; E3 o$ e7 @比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
, e' F) X$ N% @+ D/ T, C5,model.transcribe 中参数说明:$ b% z& f( G( Z( R
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数4 {4 W' Y! A- J/ U( d. y0 Q6 y
其中
# m3 _6 h- F2 x3 ~; B3 ]    word_timestamps=True,   m7 h9 h) `3 Z
保证了你能拿到 word,否则是拿不到的
2 G' y2 f3 o! Q    initial_prompt = "Hello, welcome to my lecture.")6 J: _! [& P9 w- ?) w9 c5 ], A
保证能尽可能准确的断句 punctuation,但是不是决定性的。/ @% a$ }0 q4 w; f$ g9 K6 H$ F
其他参数可参考源文件:* ~9 }3 l9 p9 ?2 O" x! X. r; |6 L
https://github.com/guillaumekln/ ... isper/transcribe.py" P3 }& F: ?; S; S3 k2 g1 a0 u7 w
152 def transcribe(. A) k* J6 q  n3 I9 y+ `; V1 S
从源文件你可以看到是支持中文的句号断句的。
7 n+ V6 _+ U, x- l8 b, s/ z& ~7 V* H" }
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
& a( y7 J) j2 D0 ~5 _" K7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
6 a) @5 t/ v3 ^& i: i8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
/ _1 }  U& G( h2 A. W: K9 B& c7 w# R0 _! m

, D( U+ H7 r/ Y
' B1 J/ e* \5 Y7 [3 O

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-11-7 04:08 , Processed in 0.028138 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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