设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 1 |; E( G: d3 X2 S7 b7 Q! i

) t7 _- `( o4 a5 w8 f$ U借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& P8 \; M5 @% U2 {) n
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。3 s8 Z* `9 V" C2 v
----------------------------------------' U1 C# u% x8 \
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: ^% Z; v5 O, L& P* _1 B* p$ m/ o. I在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% k7 {5 Y  _' o; s+ ^----------------------------------------
: c( ?1 ~' B  M" @; Vhttps://github.com/guillaumekln/faster-whisper$ I. e9 r; r/ y0 R/ O# t' P7 z" c
安装如下:+ u$ l6 @/ B5 ]
1, Windows 10
0 Q  o4 j2 S: m0 D( @0 I2, Python 3.10.111 q' L; y* @7 i6 c
3, CUDA 12.12 P4 z- k0 N* @% S* C# \, C: d% x
4, 在python 3 中安装3 `0 ^9 u0 [# }# a
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
' A* f/ z1 P* Q& m7 b. |! d: f这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
. i; E  ]3 }6 N# G' v1 @5,pip install -U openai-whisper5 T9 P( T4 c6 p& r& P5 x
这是向whisper 致敬,可以不装
( e  _0 G# Y1 I+ t! _4 C$ u& v6,pip install faster-whisper; g, A& u) K" D/ Y$ E& h/ J
----------------------------------------# R( ]% L$ D! G5 P/ E# W
whisper 我用的命令行,faster-whisper 我用的是python。# F' b1 A0 f& S
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:8 Q& p6 H- B& ^6 k1 M" n

4 p- x6 Y8 s! P7 [' K& s( A# ^----------------------------------------
% q6 x) a8 S- H9 S4 z8 L2 u0 Y' ~$ @/ `# g1 i& B( N9 A. a
from faster_whisper import WhisperModel
, {. E0 W4 P' P3 O  d
4 l3 \- x' r. P; I, S4 Xmodel_size = "small"
( A0 M+ ?. w- p' h- W
5 k9 q- k# J1 [) ?+ N" Xmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
+ |; L& k. }! b0 x8 z% y; x. a: H6 N5 n/ F9 X2 D$ Y
segments, info = model.transcribe(! d  k/ K* g( ?# c7 E
    sourceFileName, * @* D; j! G) h2 {2 Y' \" v4 B* E5 b
    beam_size=5,
" u2 @% P4 f4 l& _; o1 v5 g2 a    language="en",
5 M5 n, _6 k* O" E    task="transcribe", 9 t# ^! V6 X2 Q
    word_timestamps=True,
5 D2 Q" k' }' o! d; p4 [) s% U% l    initial_prompt = "Hello, welcome to my lecture.")% }  t4 d. M6 B2 T; L! H$ H: g5 a

% q( d8 L3 n8 e8 O) i, Z3 F+ Xfor segment in segments:
# n) d9 C+ F" C* H$ n( b    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 ]9 `& v" _% e( O; g+ p% I7 Y  i

+ d- S2 I$ W; }: s3 A        for word in segment.words:( U/ R) E4 U( Z5 m
               
# L- |- o. M3 }2 D- B----------------------------------------+ o0 a+ T) a% l  y
- n( Q4 X7 n- o3 Q: V
代码说明:0 E# K6 _* D, l7 g7 h
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
. t+ t+ f( |' r5 e4 a! l  b但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。& N. u' g  D3 b1 k  l( q3 j  h
2,segment 本身是很粗糙的,做字幕勉强能用。
5 o. O, B( q9 D  T$ o0 Y+ T4 v3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 e+ I; P; e5 R0 l4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中( u1 D2 g/ k& z1 _
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 c5 H" V  f& i: h. A' w' _! k5 i
5,model.transcribe 中参数说明:- y" S! h4 ?. l8 H
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数: w# Y; J$ V5 d. A4 B
其中$ a6 v7 C* e+ D+ `& @2 ~) B
    word_timestamps=True, 4 Q* d  b# _+ [$ r
保证了你能拿到 word,否则是拿不到的
. h/ l3 s1 ~4 u' D) g3 I5 u) U) ^    initial_prompt = "Hello, welcome to my lecture.")& {5 R' P4 t' w! |
保证能尽可能准确的断句 punctuation,但是不是决定性的。
" [1 ^1 \1 o+ X其他参数可参考源文件:
+ z2 L  K& A( Dhttps://github.com/guillaumekln/ ... isper/transcribe.py. |6 y" l+ i6 a; U2 c
152 def transcribe(
0 i$ s8 I: O9 x5 e' g# N从源文件你可以看到是支持中文的句号断句的。5 X- |' M0 |2 J8 m+ q

, W2 Z: L; F; I9 P! q6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。( E3 L5 v, S! m: b, l6 G
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 p" J# f  j! k( ]8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! p! B* A* V' v6 r- D& s
, q8 J, E& r$ H$ B
: c+ Z. b9 m" l3 C5 t% d
& A. C! t9 O  q+ `. n) e

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-7-13 15:23 , Processed in 0.034140 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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