设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 r/ f4 J" t$ Q% d4 U! M1 I" `5 w5 U/ V$ n( R( l5 I' F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。$ l/ S! m; V5 t) E( Z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。# a( ^( c1 a4 t0 H$ _* `
----------------------------------------
2 F. e" T5 z# m' ^; H; g显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。5 f* J9 \% c0 d
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: n3 O; q/ ^" x, K" [, U----------------------------------------" f# c; ^: m/ B3 R% H8 Z- W: ?: Z6 `. m
https://github.com/guillaumekln/faster-whisper1 d. D3 K  f) f: J7 p, J: A  e8 H
安装如下:$ Z. U9 e( R; S. E* z2 z4 d( x
1, Windows 107 r2 g" V; N* M( x" p8 n$ v
2, Python 3.10.11- g. E# q2 J; d- G
3, CUDA 12.1
- s! N, l# l* z/ t4, 在python 3 中安装
, ]3 M& e2 b/ D/ X4 r7 c, mpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1172 Q9 y; f3 ^1 x/ I
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。- C" |# e. x9 }+ A
5,pip install -U openai-whisper
- ^5 {" e% y) M9 M" _5 ~这是向whisper 致敬,可以不装* e0 `( O2 |$ U! k1 f. T9 g
6,pip install faster-whisper. E% i: ]6 L+ D2 x1 V
----------------------------------------5 E8 T- j+ _" T; B' T
whisper 我用的命令行,faster-whisper 我用的是python。
8 i' B( n3 S* y7 B8 L  ?* d" e0 [下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
$ A  _& J* Z, D; ~, @) u( W
3 _% T' @4 V& M( [8 x----------------------------------------
, S8 H- q# |. f7 a! C8 z( W
8 x! c) z1 x  \3 T3 R* }from faster_whisper import WhisperModel" ]" w8 O" ^8 n! b) _4 ]; i
  h2 D. ^# B: u, [
model_size = "small"
  j. I" }3 A/ f2 I
- D- i" b; o9 T) K) N+ Mmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
4 q0 R0 M" D+ g0 k+ u- s5 G2 t
) {; j& c- z; i3 ~3 v: x+ g* Bsegments, info = model.transcribe(" x( T' [; H* ^7 Z, m% Z2 \4 p
    sourceFileName, 5 p2 G/ o; }2 D! i; L) @
    beam_size=5,
* l2 s. `% n, R; \/ @+ G/ K    language="en",
2 _% L, ]& N; t5 I" o    task="transcribe", & O  u/ d1 H1 Y: i
    word_timestamps=True, . e) K3 m/ Z$ u9 J
    initial_prompt = "Hello, welcome to my lecture.")% j) S5 c  u7 u3 C
- B! F' R: n" \! C( F' L
for segment in segments:
9 X4 s5 \9 j0 S; B5 [0 S( x* ~    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" n( C# ]; o$ V5 Y; z! N( I% o! g0 ~5 n6 ~0 A
        for word in segment.words:
: }) U! _" H0 Q               
4 P$ E8 e4 B: d5 c----------------------------------------) l  p* B+ P, I; D8 e
8 F' C6 }" ?, n1 t( G
代码说明:6 V1 h! ~# T6 s+ w* d1 F2 ?. U
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
1 r3 Q* ?5 K3 H# ~! V2 x1 w但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
* o9 |2 n) G: a" ~  o2,segment 本身是很粗糙的,做字幕勉强能用。  x4 Z* z6 c9 ^1 S( Y
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。6 B# n% T% Y8 C8 E4 g
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
/ u# R) G, n5 z; S+ o8 P1 P比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。, a- \5 s3 O5 e% Z0 H
5,model.transcribe 中参数说明:9 p; @- d7 h" d9 R
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数* @% K% W1 k  N3 d
其中( Q# H' t- ]4 m/ D# M
    word_timestamps=True, 8 B! c) @& ?- n8 u7 U* w. e( A
保证了你能拿到 word,否则是拿不到的
8 G' h8 _6 @, L3 c    initial_prompt = "Hello, welcome to my lecture.")9 u4 C+ d! M: }2 i
保证能尽可能准确的断句 punctuation,但是不是决定性的。
; P; M1 o3 `7 c/ \2 N其他参数可参考源文件:- y" a% O5 |! V0 N% k% u. _
https://github.com/guillaumekln/ ... isper/transcribe.py
3 e7 {* v' _' a6 h' ^! E8 d152 def transcribe(& n# w# Z4 j, p  s. y" b
从源文件你可以看到是支持中文的句号断句的。
9 R' O4 R# C0 v+ j" F' j6 v
# {/ D% x% Z2 V( C5 Q. g6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
2 q  [1 \6 N, |0 P, L4 V7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。4 `8 q7 E  P9 _2 x7 ~
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 F  e2 G6 Z5 p/ F2 \
" c. z5 f# z2 M$ c2 G
. b* A6 P4 F2 L% u4 {% e4 M- J" H% N" p

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-7-27 13:41 , Processed in 0.058993 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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