设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
# Z+ r0 {7 d: t( f; w8 D# V' [/ k3 Y5 P! e9 B: h+ m* q# S$ c0 o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
+ m1 G) ]7 s0 i效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。! Z" m, T3 M1 G# W$ ?; j$ \. L/ A
----------------------------------------9 v' ]0 o" x: E; s* J; \% N
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。: Z( G! }7 u& N9 o4 B/ C. v) u
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。& P$ t+ {, g1 J' X1 ^
----------------------------------------. J. w$ y, w6 h4 e2 [; f! d! e
https://github.com/guillaumekln/faster-whisper
: P/ _0 J+ I& a6 b安装如下:$ j1 n' g1 A0 [- N( e7 v5 M
1, Windows 10
" C' ?4 ]- T3 V2, Python 3.10.11
- p: M& ~& S6 V3 K% o. l+ q3, CUDA 12.1
3 n+ J/ s2 w& k+ @& O4, 在python 3 中安装# k3 u, @5 ]; m2 W' S
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117! f$ x% ~- h7 ^
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。* o9 ]. d% d, k9 {
5,pip install -U openai-whisper3 `! w% c# [8 `
这是向whisper 致敬,可以不装
8 a" J" ^0 Q. [$ t+ `4 ]6,pip install faster-whisper& R+ _3 @7 D7 O# _  A3 s' l! a
----------------------------------------
4 U# L* k0 t/ s! v  m# u4 v$ twhisper 我用的命令行,faster-whisper 我用的是python。8 X- {/ |! i; V* G- r" D" Q
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
6 y+ Y3 A+ g, j5 y8 K
  a; |4 d; r  Q6 R; H* C----------------------------------------
2 w  ~+ Q5 L) c9 ?! U
; n4 {( Q; O4 v9 d- o6 Jfrom faster_whisper import WhisperModel
( \7 O& W! n0 ~9 [9 v* U, |6 s( x0 P. U' {
model_size = "small") n+ o. d" }+ T  U: w

0 D% f8 D/ B( M0 r0 T2 ^. E: |' z8 G0 |model = WhisperModel(model_size, device="cuda", compute_type="int8")9 B/ B$ {  i- q

5 K8 N4 u# n! r  fsegments, info = model.transcribe(
  t6 c; D1 H! z! C! m& l    sourceFileName,
. h- u  p  K! n& ], h7 \# D    beam_size=5,
! @1 C0 @7 X2 S    language="en", . r5 v8 i7 m! d/ A
    task="transcribe",
) _6 \( o- W" V1 e5 m3 J    word_timestamps=True,
" W$ S' q$ _$ I' {, p# w. N9 c    initial_prompt = "Hello, welcome to my lecture.")0 E: f  i- [5 _. y  |0 S
5 d; ^2 u. z' X' v$ p
for segment in segments:' X; F4 C9 S8 |( d% v% u) n
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))% t* v" ]% f4 w* e4 d" I. N
& Y8 c7 b  k, A6 C
        for word in segment.words:
# n9 X' {# V' H8 m8 |3 v6 R                1 m1 H) X3 W% M  H/ x4 ~
----------------------------------------
. p5 `3 g" P* d5 s' c" N6 v  T/ H
0 [  n* x$ ^$ L2 D代码说明:3 c; |6 y8 }! R& U
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
2 d: o1 J; F& B- i5 |$ W但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
& K  H3 y( t- c( V, r3 k2,segment 本身是很粗糙的,做字幕勉强能用。
  M  }* V) X- x5 S  z! f: G8 y3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
9 E% a8 W# u0 ~# I- B4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中# A$ A  P$ Q+ h) e
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! {& x7 X5 F& ~6 B4 S% `7 e5,model.transcribe 中参数说明:
2 G8 l$ ~$ `  k0 V: o- f7 I& Y你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数: |7 c% n) v9 }  K3 y- I& B0 ~
其中9 t2 C7 B  B# `3 I9 f* _; _. P1 o
    word_timestamps=True, % f  R' g2 W0 y4 o, w& j3 |
保证了你能拿到 word,否则是拿不到的
3 D2 y; F6 U; {" O    initial_prompt = "Hello, welcome to my lecture.")
. h, W$ r9 s/ i5 R; z保证能尽可能准确的断句 punctuation,但是不是决定性的。
" W1 `! I4 e0 M9 i1 b其他参数可参考源文件:
& c" U  @) y' a) `) xhttps://github.com/guillaumekln/ ... isper/transcribe.py
1 m* d0 F! s/ z! G/ Y' P152 def transcribe(. S7 f% x6 J0 q, Y, y8 X% Y
从源文件你可以看到是支持中文的句号断句的。+ X; o) D: N5 Z* x1 }
+ _' L6 v) o# R- p3 _2 }5 r
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。' K1 O6 [: Q6 B* ?5 y# h& {
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 I9 s5 P9 O" M' j; r3 }* L# X8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
7 b8 C5 i, n, O- I8 K, u! o; E- M) M" p. t1 C- `; |7 ^; e+ L! R
* i" [9 Y* x% i% R% w0 X

6 n3 Q( v( E" ?

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-9-27 18:40 , Processed in 0.065303 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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