设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 9 J3 J7 C" K% x. t4 ^' H

4 r# d6 t4 D9 p9 K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% p, U: y3 @- a' U+ j( n4 K效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
9 {3 j# @. K2 D. P# G----------------------------------------
/ ^7 D5 l/ H6 k# L* \显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
( r' N5 g; N0 ]/ f& t; `1 B在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
$ i+ n+ y+ a0 n5 q% I2 q1 n* f----------------------------------------
5 E; o8 D' _! G% }# ^https://github.com/guillaumekln/faster-whisper
# }' G. r& @+ K5 W. M4 P安装如下:
" `( d+ t, U2 X% I; Z) O2 c1, Windows 101 y6 k" k$ @1 B1 h8 r! z
2, Python 3.10.112 C9 S! \8 A+ U: H4 X' |' g# `
3, CUDA 12.1) ]! M9 ^% Y: y" z8 }+ b
4, 在python 3 中安装' x: Y0 d( a1 z6 j3 H  Y) k* A4 a
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
9 |4 ~4 T# |3 M4 k9 B, i0 {2 ?. V) l这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& x2 t0 ~. K9 }3 d: e. c; S. J9 z
5,pip install -U openai-whisper0 J4 A  M+ ~8 m+ r
这是向whisper 致敬,可以不装% z+ q" }: l& F5 x3 |( ~9 ^
6,pip install faster-whisper2 ]. V" |9 V/ R: N! _
----------------------------------------7 b- ]9 X6 q0 a& M
whisper 我用的命令行,faster-whisper 我用的是python。
' `& E, \5 R2 \# ?- z7 T$ l下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:* u% h4 {. d1 ^" K8 M
  V3 `( w$ z9 N. o# H3 h3 g
----------------------------------------( q$ Q+ s. t( Q# E% F6 F; z

/ z* |4 C/ W& U& ~% r+ |7 Gfrom faster_whisper import WhisperModel
* `9 _! f$ l9 a7 G3 d
) I! l0 B, x6 \0 \9 Omodel_size = "small"+ P2 C0 N! j- T3 P8 Q" x. C* O: T, I$ B

+ t, M- [' o: j# ]+ }1 Z8 y# Wmodel = WhisperModel(model_size, device="cuda", compute_type="int8")( @( n* ?$ [5 \+ g) y* v

/ Z; q( C6 {4 N7 e7 ?% tsegments, info = model.transcribe(7 Y4 G, z# H, A  x5 y
    sourceFileName,
6 P. W" |! J2 @' R# k1 p    beam_size=5,
5 Y5 Q, a! ?1 s' ?. q    language="en", 9 I2 y5 V. w: v8 a' e
    task="transcribe", . n* o" t/ X' I3 K1 @2 h
    word_timestamps=True,
) L! r$ J( g2 H* o: l    initial_prompt = "Hello, welcome to my lecture.")! t+ q/ N. a9 E

" W, ^; {+ p& o3 Dfor segment in segments:" q" }1 g' }" O% |
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
+ M1 U; V" k, S8 x; ?, Z0 L* u8 G, K, N5 p, q
        for word in segment.words:
6 X: N& T% k; g! o/ k& c                ' W' w! _3 R1 L4 s: i6 }6 F4 G
----------------------------------------
; W- `6 D) F+ X' V4 ~& G+ l. a9 u# R: Y  E7 a1 Q
代码说明:
: G' v2 U1 p- i2 F# |1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。) }& @. t9 @$ ~  @8 N7 [( p, c
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
0 R; I7 u7 S! A% z7 J9 |7 i2,segment 本身是很粗糙的,做字幕勉强能用。; O9 r# u3 n! m7 _! J# G
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。3 X8 h7 s2 `# n1 S& O  R, I7 Q  @
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中. q& ^$ O( K" e, ~( _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。" z. p! ?& P$ C
5,model.transcribe 中参数说明:
% \8 H0 u# p, N你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
) u- Q5 l( y8 l$ K9 g其中! I; a; o# j8 }  R9 C5 ]
    word_timestamps=True, ' U" B# P* Q0 J- \- ?: o
保证了你能拿到 word,否则是拿不到的+ C; {7 f' {$ s, ^  i0 M
    initial_prompt = "Hello, welcome to my lecture.")
" W: }, T8 ]: T0 ^保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 ~  m# t% p+ s1 \& ]其他参数可参考源文件:
0 _, n' ^& c! _4 Y5 S0 p, h+ thttps://github.com/guillaumekln/ ... isper/transcribe.py
, y! ~9 \( }; d5 v' o152 def transcribe(
% T6 S) N- c1 \1 @. W2 t/ ~. Z从源文件你可以看到是支持中文的句号断句的。. u: @+ J$ C) R4 O' i1 E$ Z
0 [, I. _* w' z
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。' N: m5 ?2 j3 X
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。/ O) H" S! \9 P& y: L# G
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
) }4 s) a$ m" @9 o+ y5 J& ^- T. W& \9 {/ @2 C$ v( K# j& v8 r

+ R2 \$ j( t$ ~9 B3 p0 [1 g* a& f& e8 }

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-5-30 11:55 , Processed in 0.057095 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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