设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 7 M6 I6 E) ~( g
8 T/ G2 }% ]0 W: i3 n8 U' [
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
' R$ m; F0 l8 k7 w& q效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。; u: [$ z  x/ o& U* E
----------------------------------------
+ L* ~* N; P# o4 F3 q# f显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
1 b" o+ P8 s  s5 T& \' M8 f; O& J3 G在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。) K% P  [- l% i, d: h5 y
----------------------------------------
' G. m3 W! B* z3 T  {7 Uhttps://github.com/guillaumekln/faster-whisper
! S. A8 w9 w. }+ _/ O安装如下:# f9 w, M1 C# t9 b0 t- t- \9 Z2 J
1, Windows 102 @9 M3 E6 U/ J
2, Python 3.10.11
7 {7 D5 U; A' g3, CUDA 12.1
# K# v# y) l, w8 [% P3 R" w  \4, 在python 3 中安装2 y9 r  T% [  s( O  S, A; y
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1173 Z' q5 ^- X4 g3 A
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。1 n0 h, B" k$ \; ^/ B! G
5,pip install -U openai-whisper, r. c, E" I4 L( V5 K$ Y$ ^( x
这是向whisper 致敬,可以不装
2 f. F) h6 F) V4 Q9 m6 y" _. A4 a1 d8 B6,pip install faster-whisper7 H# ?' U6 G2 K& G! g* ~" h* x& z
----------------------------------------
- k6 z; _- E/ R2 c3 wwhisper 我用的命令行,faster-whisper 我用的是python。
( `! O( i8 W; J- @3 z7 r  q下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:8 p' W1 y% j  t' y

& B) J- }2 M; }' T  G, G----------------------------------------7 w% O8 T: |0 Y( C  s6 X( s, C
+ X. x  j" J9 {1 {- u
from faster_whisper import WhisperModel; b8 n& L& u9 a9 ^1 P8 k

$ k6 H* T' J  M3 K! m2 s/ m' zmodel_size = "small", o/ _, y5 ^6 z! e

9 `; x! K" T. |) _8 ]0 g9 ]7 O- vmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
$ h& b( O( m* Z! E! _* D7 z4 ]1 Z/ [4 `& G% @) x
segments, info = model.transcribe(0 ~! J6 L* p: M" U. w: l- [
    sourceFileName,
7 @( P  Q+ B% [5 w" }    beam_size=5,
) [4 }5 T6 s, X; l# _' F    language="en", 0 I- u; K  r5 }
    task="transcribe", 3 v% s; D  i7 K2 m8 _: T
    word_timestamps=True,
# \7 V1 x7 c8 l/ ^4 ~* n3 w* u0 L( F- }    initial_prompt = "Hello, welcome to my lecture.")9 \1 a* k) y" S' n  ?7 V
7 O6 j8 Z" T6 P4 a
for segment in segments:
5 H5 ^4 L7 _: T9 J$ F    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
& J/ l2 T" H4 ]' Q- n, P
1 @3 N: N+ I5 H        for word in segment.words:  N/ ?/ m1 @" \, k& M
               
0 V! k  Z& q. z2 J----------------------------------------
0 q8 Q2 `* a2 T8 a5 `
# }( I9 B7 V6 T! x1 L代码说明:
2 X( K) r: C% d) ~  j1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
- V3 D1 E+ M. q4 G4 r: s2 d9 T但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
- j' ?7 w3 ?, u5 J1 C2,segment 本身是很粗糙的,做字幕勉强能用。
$ j5 W8 W0 O3 W, E  w& [8 x' W3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
0 F) }4 e. r$ k4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
$ P) q4 V6 o2 s$ V比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
- D& C1 E9 U6 w9 c5,model.transcribe 中参数说明:' R' V6 J- y$ M" Z9 S0 P# v) u% Y
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数2 V+ I+ E. }; ]7 I: d) C3 W
其中
' c# k+ }' [. \- h: l" b    word_timestamps=True,
' D& b! P3 }) j! I7 }; d保证了你能拿到 word,否则是拿不到的% D' N. {; _/ q. A1 b
    initial_prompt = "Hello, welcome to my lecture.")% c3 J5 {: t2 p/ t* |
保证能尽可能准确的断句 punctuation,但是不是决定性的。) a0 u  t# k, z4 a; Z
其他参数可参考源文件:
! t$ @, G0 N1 R( N2 d& Vhttps://github.com/guillaumekln/ ... isper/transcribe.py" g. B7 B2 Q; b) W' V* r
152 def transcribe(
. k8 f- d8 v5 i) u2 V3 b7 C3 k% V从源文件你可以看到是支持中文的句号断句的。
. ^+ v9 A" E8 V5 ~  G
& y% `, T" s: x7 j* O+ B6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。$ U: h3 _1 Q- [, t9 c
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
! z' d+ ~& |3 M8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
3 H6 `1 W* P4 |  b' H$ F7 a, r4 v3 ^/ b  U1 N0 ]
! ~+ w. a' {4 Y, F/ d3 ^
, A% ~2 S  E( w( L! E

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-10-14 08:52 , Processed in 0.057860 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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