设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( C. o7 q; @3 y/ O7 m% H$ @" t7 i5 ^* A% A. R
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
0 O0 i- n9 o7 J8 b9 _% U效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。) f9 F9 P, O: r6 Q' N% A
----------------------------------------# A$ f. @% Q  t  x( n! h- Q" Y
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。; E: O- ^! I% |" R7 o. D+ L: [
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。4 r# f$ b( ^3 b8 @$ R, I6 z
----------------------------------------
2 P* K5 l$ I  W9 m3 a+ nhttps://github.com/guillaumekln/faster-whisper
2 k# I4 E7 J* Z) A安装如下:, \# G, Q5 s! w+ W. q
1, Windows 10& H* x7 w& O, O$ q
2, Python 3.10.11; K! F1 P8 d0 s" l, r8 U; w
3, CUDA 12.1
5 P5 j/ g0 M/ p, d0 X2 Q" ^4, 在python 3 中安装
' ^. e! n" \2 p3 C9 j) p( kpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1175 p) U) p  f, ]( W8 O9 N
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
# g; c% y, m) `5,pip install -U openai-whisper
2 `0 z" n' x2 \, j& ^% \  X/ c; i2 K这是向whisper 致敬,可以不装2 A/ B+ ?9 X! _& Z& l) ~& Q
6,pip install faster-whisper1 {- ]$ K+ S* \5 U' K
----------------------------------------
5 _1 L  f7 j& C2 n" fwhisper 我用的命令行,faster-whisper 我用的是python。
5 ?4 ^6 p: H' V3 q下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
! l% Z# \$ ~  Y! Y5 K
3 }9 X; H' Y% y0 I: f----------------------------------------& Q1 t* Y# c, }! j9 e; G

* g" w" N! W- l8 Pfrom faster_whisper import WhisperModel# X) E4 S* j* u2 ^0 d8 o! e3 n
$ Q* F% j( f2 Z& x$ ^
model_size = "small"- o+ C. l9 |- V5 F1 j
; D( K9 z$ A$ R" n% N3 s
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- F: e& G- U8 _, k# d
+ s" J( l- }2 f  u7 rsegments, info = model.transcribe(; h+ Y6 c7 A3 H. K; w  \/ E# ^
    sourceFileName, 6 i, U  S: e8 @1 y5 a: @0 n
    beam_size=5, 1 T* m3 {; {+ P0 n, x+ q2 t5 n
    language="en",
/ c, u" Q! X! {7 q% j2 ]    task="transcribe",
% g# U3 _+ p/ O' ^; ?. M( }5 w  Q    word_timestamps=True,
0 X4 ~6 u/ B/ Y& b    initial_prompt = "Hello, welcome to my lecture.")  _; S. u$ D: e' A

3 h/ Z; B) s# T3 hfor segment in segments:9 T  \5 k; F% e
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
, d- F4 [1 S% Q/ T( w. x6 c* O, C# F! o/ P+ s/ t. A4 m
        for word in segment.words:
- o! ]+ J9 S* ]: s& Q( z9 V1 r) y                " V! p+ S9 G3 V2 W
----------------------------------------
, c7 S0 ?' w2 m# x6 F9 `, D- A9 H- o* P
代码说明:1 q0 ^( i7 D3 [2 _
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
3 J  Z0 G6 r8 @+ Y6 M3 n) Z但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
6 K  ~/ g& g0 v3 n* H' b2 ]2,segment 本身是很粗糙的,做字幕勉强能用。
; G# b/ y9 Y5 n1 k( {3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 v8 p1 |* o/ U/ y2 M) Q4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
4 I8 v. J% V- @0 ^+ q0 P  X比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。$ q" o6 b8 O  D% f$ K* p
5,model.transcribe 中参数说明:
. p& _$ [( w; ^3 W6 ^3 @4 H你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数: Q) v' l8 i0 _2 p- `" `0 `4 x4 Y5 k8 ?* D
其中# V3 z+ e4 a4 ]- `' h
    word_timestamps=True, $ R3 h) k4 w" n# P% m
保证了你能拿到 word,否则是拿不到的$ e$ M% {/ W0 I3 w# g
    initial_prompt = "Hello, welcome to my lecture.")8 Q5 N7 l$ x7 }9 R; u
保证能尽可能准确的断句 punctuation,但是不是决定性的。) {$ \0 R2 B5 L1 X1 {
其他参数可参考源文件:
- B; Z9 a8 f/ F6 m: t# ihttps://github.com/guillaumekln/ ... isper/transcribe.py7 o" _; s4 V  P7 t7 \6 e0 Q
152 def transcribe(0 k' E) _+ I1 O
从源文件你可以看到是支持中文的句号断句的。" B5 X2 C$ F) o! m& b6 W8 X

) R8 I: Q- |) {! Q+ H# v6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ N3 l9 v2 ?0 ^) h" M0 J7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 x8 c7 s8 F1 s4 `8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。! D! J$ n2 H* v0 v* K' s

" d0 m% ?# Q+ j, z: i8 c% {+ \% d
% {3 h) b9 \# ]" F3 j
- U0 U: D. G# c2 e2 r

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-9-16 06:18 , Processed in 0.059987 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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