设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
; L7 Z" X" f$ W3 S( h3 l$ f+ ]' g* u# c. P3 v+ g5 f+ S
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 i# }) s+ M6 O9 N) G效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 L4 I" A, Y9 W7 F2 B+ i
----------------------------------------
* Q6 w$ @, `# ^显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
, a/ \/ z0 D7 }9 E2 |, s: A! e在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
1 Y1 ]1 l  J& s9 |. T7 ~! j$ G9 K( q----------------------------------------
- M+ N5 r9 b) B& whttps://github.com/guillaumekln/faster-whisper
# @) ~9 i1 ^  G' c9 g/ i  s4 Y安装如下:2 R) J  Q! w! M" X6 Y' N
1, Windows 10
* \. X/ D* a2 i4 r1 m8 F6 `6 `2, Python 3.10.11
, _! T! _) N  m/ Y0 f0 E+ [3, CUDA 12.1
* y  Y2 M7 c3 Q" ]% v. {! Y4, 在python 3 中安装
) R7 l! i0 c8 i* o) D7 ~% Opip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" \0 Z" p" \2 p- }$ n3 j9 b# Y3 {
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
0 O+ s9 F. C6 [5,pip install -U openai-whisper
& h$ x) s/ Z7 F. y- _这是向whisper 致敬,可以不装
. F% C8 u' ], P7 @1 ]6,pip install faster-whisper% n' W" a$ Y$ k
----------------------------------------4 V5 N2 K) _3 }1 `9 k
whisper 我用的命令行,faster-whisper 我用的是python。- T) z, k4 u: y" x: {. L
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:2 }6 D/ S/ ~4 W- R; I* u1 @/ q  m

" b" ~9 c9 [" T' o  ~6 y; r5 @----------------------------------------
0 D7 P% v. w! `( }8 [' W" U, B+ |0 I# F" ?, Y5 [* {
from faster_whisper import WhisperModel% r) S! f4 M, A# k
, l/ M/ i* H- @  v  k
model_size = "small"& m  D8 T; i0 m3 {

! Q' p9 d- `! v) M1 U% V" qmodel = WhisperModel(model_size, device="cuda", compute_type="int8")( q7 D% Z6 q2 `4 o- f% c5 N% r* u
5 Q) T8 v  D- D
segments, info = model.transcribe(
# A3 [1 `, }7 S$ O, b: c    sourceFileName,
. |) c$ m7 P* _% P; ^    beam_size=5, 6 h/ n# r. b  S# ]" i5 r. l1 }
    language="en",
# T% Y9 ?$ {4 Q+ m    task="transcribe",
- H. p& t4 ]' M3 f    word_timestamps=True,
" G* O8 d8 _9 N% T" @2 S% @8 J    initial_prompt = "Hello, welcome to my lecture.")
- o8 G! @, U& `6 \* v3 f
7 g& F/ J2 u3 v- P! l% E  P+ f& l) Ifor segment in segments:; |1 s' I; f4 l) B2 e: `( s
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 E  h# m( Z# ?9 `$ P0 e
( c$ i$ Z: P: `- y3 j
        for word in segment.words:
' c7 J* v% w% b8 q' I/ \                1 _# c' A1 `3 p% u( l+ M; ^
----------------------------------------
, y! a/ V& |+ ~, D3 D; f" Y  @* D) ^! E7 B
代码说明:6 c' A2 S8 T5 n7 Y2 ^. r
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。$ i4 \/ I) x- m# N* v
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
  F) X' ~2 ~+ y( E$ l2,segment 本身是很粗糙的,做字幕勉强能用。* }" ]! D" k, K  B3 x. _
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。; J  C+ `- j0 l2 B
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ u% S+ \0 ~. K6 i比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。- g; H" K( U7 c7 f
5,model.transcribe 中参数说明:
: I% k! I. n8 Y7 q你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& X" v; E. {4 v6 d# S* H其中6 v, f' Q" U* L
    word_timestamps=True, ) {, X2 Y% E" u. G
保证了你能拿到 word,否则是拿不到的
; N3 I* j/ H1 w4 ?# s    initial_prompt = "Hello, welcome to my lecture.")2 |, O/ ?4 o7 e( h2 E
保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 U$ m& @4 D' F9 q  d, r8 r其他参数可参考源文件:' Q% H. Z1 ^) U3 Q
https://github.com/guillaumekln/ ... isper/transcribe.py7 J+ G0 u. V. P3 g- X* j
152 def transcribe(7 u! x$ p0 r& ]$ j8 ]4 @" N  q/ M
从源文件你可以看到是支持中文的句号断句的。! n' l; `- p9 n1 P0 R* Y6 \6 j9 }

5 g* O. a% ^8 V2 a; c$ Z6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。% O5 s! g4 Q  N
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。8 C2 w( I) ~$ z$ L  @
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。7 f0 O) T7 C) X; p( N, f
8 \$ h$ U) h! v

! {. F4 P" N. V( \
0 v/ k' V. G* N. I: q# y

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-5-23 23:51 , Processed in 0.056542 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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