设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
8 ~+ v8 O! N' g( w& o
$ |+ {: u) ^/ D: a  O借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
: [3 F2 M. g) Y, x' p效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
" U4 y7 f6 O7 {$ y6 j$ @----------------------------------------
. p! N8 q2 }" {$ G7 o% |显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
  A  {2 Y- {: B2 R7 j2 o在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。4 J- s% g9 i0 e: D/ U
----------------------------------------4 L- X9 `2 M6 e7 i7 n
https://github.com/guillaumekln/faster-whisper; H5 V, @: Q0 w& B$ _
安装如下:& b5 F" r3 C. t7 W# X
1, Windows 10
% p' G4 M* t2 I  k; T2, Python 3.10.11* d" i" u) v# O* {
3, CUDA 12.10 R  g! q; l0 ^0 l, D# _
4, 在python 3 中安装
# i5 X4 C" ]# y& n" epip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
+ a- |- o0 g* P7 f' F- ]  p3 M) p这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
, H4 N! I, h$ b- R" M# v/ ~5,pip install -U openai-whisper
* S0 U! Q7 [. R- Q! W3 Z这是向whisper 致敬,可以不装' r( N4 i3 X" g# ]0 ^
6,pip install faster-whisper3 `: u' n; Q, z0 A2 Q
----------------------------------------$ w: m' }$ V3 m3 P) X/ G& ~
whisper 我用的命令行,faster-whisper 我用的是python。/ S" _$ U% b$ }# @/ F) ~
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:$ r3 c, Z( j0 E. W

8 c  p- c% y4 j; P3 i1 }----------------------------------------0 r6 P& T) b+ i! g2 q2 e

% p  L) S7 b4 R) i1 V# Z' _from faster_whisper import WhisperModel
! ]) L) B0 q& D) `# G# G4 ?4 T( R! h2 \: D1 j7 E, H
model_size = "small"% \# r  c3 t1 n2 p

! m8 y% H, k) p, G/ M+ k5 \" umodel = WhisperModel(model_size, device="cuda", compute_type="int8")+ C# N' _. f1 i3 l1 A# M9 g# A5 [
# u# J0 [5 x& K
segments, info = model.transcribe(: c, p3 [& \& F/ M1 v
    sourceFileName,
! i  e1 y' `3 k3 y0 ^# \    beam_size=5, ) r# {5 V! C- B$ m
    language="en",
/ M* S" w  g0 {# [    task="transcribe", ; o" z4 f+ V! Y$ K
    word_timestamps=True,
' e7 t  B: [% P0 G  K6 @    initial_prompt = "Hello, welcome to my lecture.")) \/ I: h$ v0 I

. u' c& Q; R- u0 Xfor segment in segments:0 f/ J8 Z  e/ B2 E2 Q
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)); R5 r0 h9 y, K9 M  ?& r5 c

) r) ?! w9 k4 L        for word in segment.words:
' y) X0 q2 l) ~+ }( Z$ Q$ D9 M7 T                ' t9 _9 Q0 Y$ O8 S8 u8 r+ O
----------------------------------------- Y: t1 V, e' t; P

" v5 d5 i' e1 ?, W% O2 O代码说明:
) C% \. m, y9 L1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# u' X+ d+ s) K4 ]' C但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。) y# p4 k" N) ^4 S( ]4 e6 U$ A' @
2,segment 本身是很粗糙的,做字幕勉强能用。" N: S5 S; V: W, R
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
+ {7 ^5 }& r0 }- }' ~4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中1 }4 ?0 B2 ~4 J# \' e$ _' `
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。) G2 N4 C) d9 Q
5,model.transcribe 中参数说明:7 O' P" K/ D* q; |+ Z( l" }
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" u  Z3 p4 E  V  L$ H% v9 B$ g; ~
其中
. E: L' X# f4 T9 L0 L3 J" e  g    word_timestamps=True,
" m, a" Q5 \' L, l( T1 A8 Q# g& L保证了你能拿到 word,否则是拿不到的& J( g# N6 D' P! f* D
    initial_prompt = "Hello, welcome to my lecture.")
0 h9 v7 g1 B: o! X4 V& U保证能尽可能准确的断句 punctuation,但是不是决定性的。6 M" \4 D4 g& \/ l, N2 l
其他参数可参考源文件:
, T- i/ N' I; y2 H7 g8 ^( i; qhttps://github.com/guillaumekln/ ... isper/transcribe.py
7 t- O2 @7 \. h: ^& ?9 G% ^( `& z152 def transcribe(5 c" x. D9 l. S" D6 P0 u
从源文件你可以看到是支持中文的句号断句的。+ b2 [4 q# w; @7 {3 p+ H* r! p
5 a  h9 v4 Q1 V0 s: g. X- e9 c& o: O
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" I1 M! B' y7 [) Y; _+ _7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。% P* H$ `* `3 h3 z2 n  ?/ r# m( Q
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。- w2 k3 Q/ n0 p2 U8 K" G

- W! T3 x, d  o# X
' D% ?: P& n0 |8 Z# u0 k. X4 [6 b& N4 j8 V* Y- V' ?4 E

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2024-5-25 20:00 , Processed in 0.030916 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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