设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 5 H" C3 |1 H" v, p1 \: m( v/ w' F

  Y) _9 Y) \/ r  w8 e. Q借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。7 r9 l/ p, z2 ^# Z2 i; U! ~
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。3 D8 y; r) D" k* i( T
----------------------------------------; T8 U; }$ `# {( p) ]
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。# ?5 w+ A0 Z& X) `, z
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
; g' j9 p3 L, H----------------------------------------2 j& M3 E# }% k& d# T
https://github.com/guillaumekln/faster-whisper4 ?, d- E' i  X) L9 H
安装如下:
: w. q- m  P9 R1, Windows 10
7 g2 G0 u7 |+ d0 C, I3 y4 ^& q2, Python 3.10.11' ?9 F; V3 E' r9 u
3, CUDA 12.1
4 [. s6 U- Y% v1 R! s# _4, 在python 3 中安装+ B  N- O: K6 P% E
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
; I; G' d: }6 c# t3 J6 M这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
* L3 ]; p# [4 M5,pip install -U openai-whisper5 y8 n, ]4 v  C- M' v
这是向whisper 致敬,可以不装: [' z& y$ Y$ k; Z2 i6 k# f0 B% B
6,pip install faster-whisper& K5 m( Q2 g- r& f6 m- y4 }
----------------------------------------5 Y$ J* O* a  W+ E2 k- y
whisper 我用的命令行,faster-whisper 我用的是python。
1 `3 f" O1 m2 S% A/ K6 c5 |下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:' H) }  ?5 A7 H+ g
. C1 Y. _  L& ]6 g) k5 e
----------------------------------------, t5 d# \* [$ F; v

$ z3 l* ]/ {3 W. r! ufrom faster_whisper import WhisperModel
' i  d: v  B/ L4 t  J" }% O% ]1 }; z4 V8 S+ d0 m
model_size = "small"
* o5 Y( }2 m. Y% N: X' m. g6 U& T$ g. T2 H' h
model = WhisperModel(model_size, device="cuda", compute_type="int8")5 v( x! \- u! _/ ?- E% q/ v% A& m
$ Q0 x) W( A9 C6 m4 N5 r
segments, info = model.transcribe(
( a, p& L/ F7 z* Q% Y, x$ J    sourceFileName,
. C3 Q( N. ]: e- L    beam_size=5, 9 x/ h& b+ t: i0 T) E8 S
    language="en", . h8 A5 e6 b  @6 Y
    task="transcribe", - p: R3 v, S: g1 z# ?
    word_timestamps=True, 5 e% o* }9 c3 G% D0 R$ V
    initial_prompt = "Hello, welcome to my lecture.")
1 X; H! b; G, R' I5 K; F% J" B' I2 ~
for segment in segments:
. i% r5 G- ]* q8 X% ^; I8 P    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& u! f* _/ Y$ f3 Q1 o# B' e% |
- m4 L0 M; y4 f# n# f        for word in segment.words:
! m( }. m: E9 n: C! Q& E4 ]. X0 j               
; c) P& i) B+ m( q7 @; A----------------------------------------. @1 B# t! y7 [- e; V* D/ \

- Q) s$ r1 \: Q" J# \3 i代码说明:
& a& v6 J9 O* t8 s% N3 d1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。& f: |8 e' ]7 F6 V
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。; Q! s! _1 v  b( v1 T! T7 x
2,segment 本身是很粗糙的,做字幕勉强能用。; ]" U8 v* z2 K3 K7 U' \
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& V7 x" J, P- f7 d: t  b# T6 y0 [
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中; T  w% Y: {( f; b" m2 L
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( Q9 |$ O( p( j5,model.transcribe 中参数说明:
0 B& p  e8 w9 {& u) K你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数0 L  p& W. J; F% B9 F* P7 g  c; ]4 F
其中
" \& ]" y; r) ]) U- B! R    word_timestamps=True,
* q4 F& U: V- \7 b5 m- G/ N. H. p保证了你能拿到 word,否则是拿不到的% A  Y, R$ \3 l: b
    initial_prompt = "Hello, welcome to my lecture.")
$ H' b% G+ L$ H保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 q+ G! _9 z) W3 d3 s- k其他参数可参考源文件:
( M. `7 G8 O& R% Yhttps://github.com/guillaumekln/ ... isper/transcribe.py
; e1 l$ |& u4 \152 def transcribe(
! _- t& h8 [6 `/ ?5 h$ C# V2 \从源文件你可以看到是支持中文的句号断句的。
* E$ p3 Q8 i7 R: W/ h. K' t  R. i# _4 h( [, m2 z
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。2 e3 C# ]/ I- |# I
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。6 ?6 f4 S5 _' Z9 \8 g6 F: S! C+ N( u
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。" i* v4 Q- v  ]" r

; j9 U  T7 y: A1 s! ^   V0 d6 y' M7 e7 ?, D0 H9 A  h

# r* n7 v$ p- k' O! S

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-11-22 17:11 , Processed in 0.031090 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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