设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 3 W+ h. y' [& W( V- \

1 E# B3 K' u: o& X. Z( S1 k) i借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- P" t! Y  @2 z/ Y效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) `4 e5 H7 @3 R5 `! ]----------------------------------------+ s3 r7 {/ J9 N( c3 [' F1 S
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
' k, y/ q3 l% j4 x: k在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; R& {4 ^) t0 S; h6 U# S, V; `----------------------------------------
; ^- H( p! _$ s- bhttps://github.com/guillaumekln/faster-whisper* L8 q2 E8 d* C9 v* w8 S6 b0 T1 ^' M
安装如下:% e" l2 {6 ]& j: }5 A
1, Windows 10
3 r& O4 h, F8 t2, Python 3.10.11+ Y! O; q# V  G& H  w$ a
3, CUDA 12.1
- |5 K' ~) W, n( u6 d' v9 H4, 在python 3 中安装8 h& W1 V* i! |
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
- ?1 K* x0 S/ ?' w; C- ^; G" ?7 ~这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。% f: j! m! b4 z+ S) ^6 {
5,pip install -U openai-whisper. P% a% V4 i! b6 J9 [' @
这是向whisper 致敬,可以不装7 Q& W' P( B  C4 z( y5 A  r: w
6,pip install faster-whisper( S7 k5 F9 _0 \% S* g& P
----------------------------------------
; v" [# p  a$ O$ G' zwhisper 我用的命令行,faster-whisper 我用的是python。
. P  }8 O4 y/ S3 N1 K  m下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:# e+ |3 Y. ?" O: s

. X5 a  ^3 Z, N- U+ R- [# U----------------------------------------' b% i  z. S/ ]3 G9 g. m

, {/ I; \* u5 Q7 C" a* gfrom faster_whisper import WhisperModel/ _3 I9 @" Y' c3 S5 ^- b; U9 B8 Q4 U

9 D, k0 B8 m, `" j0 Vmodel_size = "small"
+ E0 X  n/ c* i$ t+ o& y/ v! w- z
model = WhisperModel(model_size, device="cuda", compute_type="int8")$ v( n! o( K( B

4 c" \3 X3 u& d- m+ B& \segments, info = model.transcribe(/ I. I! H' Q# M; o9 l3 \6 M" n9 j
    sourceFileName, 5 N) d* r: f" A8 R
    beam_size=5,
" d$ i, F0 u8 i/ i    language="en", . C7 i0 g' ^# Z' l" X( g$ Y' |
    task="transcribe",
) [# v& e5 j& g* _0 k0 m- s  {    word_timestamps=True, 4 t; S9 k+ s3 t( ^, S% ?1 {
    initial_prompt = "Hello, welcome to my lecture.")
. V$ c& N8 S, @8 g9 x) q7 f+ @2 p
for segment in segments:
0 ~& r) w& G2 U! h5 X0 `4 c  n    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 n% c( o) i) w+ @

0 T( ?& v& p! n3 U0 e        for word in segment.words:
/ y! E+ t$ r. ^! T. W8 O               
+ c  A8 R4 E# M  }----------------------------------------" ~2 ^, \, m# ^6 b

  F. w8 n: p5 l: b  r代码说明:
2 j4 L- N$ M  ?1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。8 G1 C7 q2 c9 H, F3 A* p/ h5 ^
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。' b% k# t" j# I9 Y" A3 D- N5 c! D9 q
2,segment 本身是很粗糙的,做字幕勉强能用。
( v) ]/ V2 k5 ^% P" E) _6 u( S3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& \+ z& L- A7 }' L6 s( y
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
6 S5 a; A0 w2 O: f# r; d6 e比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
7 F. R2 _! D5 }3 h4 R  G3 M  P7 Y5,model.transcribe 中参数说明:
# z4 O4 R, t$ n; E2 x' j. |/ c你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数) `( x  @* `: J6 l7 `5 {# n
其中
1 p) o& L/ f, @0 T# O    word_timestamps=True,
$ |& T# R' q, m4 l0 e' _保证了你能拿到 word,否则是拿不到的! b; h1 p# C$ Q0 n* W5 L2 z9 i
    initial_prompt = "Hello, welcome to my lecture.")! P- U: U' B  N  D
保证能尽可能准确的断句 punctuation,但是不是决定性的。
6 J9 h9 Z% C- ?" m4 G, B其他参数可参考源文件:4 ^+ ^5 |( Y1 j7 z
https://github.com/guillaumekln/ ... isper/transcribe.py
# n; |  g4 ]$ `6 \4 y152 def transcribe(+ l# n, m% \  _2 l, i7 Q& R
从源文件你可以看到是支持中文的句号断句的。
1 @. I$ q8 b0 L& g$ {4 L1 B' p  o' h' ^  u( O8 J# |: A
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
! B9 \2 ~4 l* \* G9 V7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
3 O8 \; v, G7 x  e6 P8 ?8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
4 z9 h5 n  [* x6 c) D9 z+ y
1 X2 g6 C% F; {2 Y - g% [* z% \, T7 m

0 u  D2 q# A  J

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-7-10 10:18 , Processed in 0.032525 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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