设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' t& I, F. @( Q" Z5 |, N3 V* u5 s0 R, o) k
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
  Z+ X  E% e0 [  o, I效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
* Q' Q- K2 H; U+ G5 U" g: L5 h8 u----------------------------------------0 z- j9 a2 i# V' d+ M2 @6 v, a1 I4 j
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。6 V9 d! r, V0 p% e  R+ M5 Q$ _
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# ]1 u6 E' K+ b2 I! d, D----------------------------------------
+ B+ }$ W( _: P, L5 {5 ^https://github.com/guillaumekln/faster-whisper
: t6 ]* B6 p( c安装如下:
  B/ C2 x( ]. Z0 L1, Windows 10$ {1 @- Y, p6 a; _7 L
2, Python 3.10.114 a4 y0 D; E. _( R1 P6 C$ x9 U3 G
3, CUDA 12.1
4 C, T7 K- n6 k; z4, 在python 3 中安装8 L0 u6 F3 m1 x3 a/ U% ?
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) A% m  W: ]' o5 D3 S- p# @这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
! N4 `; f8 R( j* V5,pip install -U openai-whisper
8 P: g. \+ D5 D! W  ^这是向whisper 致敬,可以不装
8 P& u& ~# O9 N# f" M6,pip install faster-whisper
7 o4 E# u+ W5 M----------------------------------------  _9 @; d6 n$ r* z* n
whisper 我用的命令行,faster-whisper 我用的是python。
; `: c. p7 d$ @& S+ C# ?1 A下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:! t; O) ?4 t1 c& G
, l# ^9 {% F4 m# R! v( B  H
----------------------------------------1 D2 e  b3 w2 X4 ^& j* j
4 j- S; M% n+ r" V1 S
from faster_whisper import WhisperModel3 }( e" T$ M. v4 c

* M  L7 z7 j$ J/ L: y  a2 Emodel_size = "small"0 |# h, P, L# W5 ?  @3 C" O* q
0 E% ]+ h6 `: A
model = WhisperModel(model_size, device="cuda", compute_type="int8")" |- s9 k2 j- X( V2 i! J# z$ p5 ^$ R- Z

2 I! W% U& i" R: A1 o3 Qsegments, info = model.transcribe(  @8 V& M. I& x  ]9 G4 u% s
    sourceFileName,
% l: r( e$ P! u7 A! C4 _    beam_size=5, $ J$ U/ c* {( x% l0 D. O
    language="en", 8 I& I7 _3 d. Y& i" C3 J
    task="transcribe",
7 _8 G. V+ z- Q% t- a8 P    word_timestamps=True, ! k% i4 |' p. h9 z# p2 x
    initial_prompt = "Hello, welcome to my lecture.")
% l9 u5 ~  @0 r' ?6 z$ Y1 I1 {& Q' X. y
for segment in segments:2 z1 j: ]6 ^! h3 |
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
3 H& H/ q  H& b  V# ~$ @! k' j& R
7 R! ]& m8 p% x        for word in segment.words:
# Z0 T5 ?$ K  W2 G# [2 V8 b               
, G/ {1 B3 U& S! [( L# |----------------------------------------( r1 a& J1 {" K: X9 E- J) E

% H! t! _0 j0 W- H; w1 }4 g代码说明:' ~6 G# ]7 V% t3 Y! \8 \# M3 C
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。0 l/ v( j- L/ b  k2 u6 g: ^" @
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。" X- ^3 _, R: F9 A: X; o" p
2,segment 本身是很粗糙的,做字幕勉强能用。
3 \. Q+ L1 }# N/ q; v3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
) x. Y8 ^% L4 y' H+ U, h4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中" H1 C& i; Y5 q+ r0 x1 p
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。( d. @2 H: w  \6 o# G
5,model.transcribe 中参数说明:
0 E' z0 a" S! r% I你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
1 `1 K/ F, s* V' Q# W9 S其中
% G" a  N* @% @7 q8 s# F; A    word_timestamps=True,
+ c# N: N8 x' d  `; M1 f# v' ]保证了你能拿到 word,否则是拿不到的
6 @+ O' E+ l8 `. ?) k2 `! u    initial_prompt = "Hello, welcome to my lecture.")
2 H1 N+ o& `( K5 o6 d  y# q% [保证能尽可能准确的断句 punctuation,但是不是决定性的。
- O; K; {! H5 ?: M7 r8 X9 ?4 t其他参数可参考源文件:
9 }, \9 Z$ J! }1 C/ Hhttps://github.com/guillaumekln/ ... isper/transcribe.py
% Q& t1 E! }9 x5 Q152 def transcribe(
- S& }* r( U% [& Q! ?+ }从源文件你可以看到是支持中文的句号断句的。! v. Y% z! _  E4 I! G9 \" C

% q4 m4 q8 }( s, c( y; b1 x6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。- Z7 M& g" A% \2 ]( H% d: g
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。  G5 H* ^0 Q  d. ~1 P3 M
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
$ M" s$ E( {3 {" L- U8 d
: G7 Q; P: b% ^0 T, A 8 d6 g4 c; C9 u  W0 g- w
: S9 s0 ?$ ~3 J9 W4 d. b3 Q9 j

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-9-21 08:42 , Processed in 0.032364 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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