设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
! r+ X. q9 j) E# P7 ]+ ]/ {5 m2 G* ]3 [; B7 N
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。2 x  n4 y+ }- K, n' {
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。9 ~; h: u( J( d
----------------------------------------4 X; e; Q5 l" g  U
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 l6 n" r; ]9 C, {& |- K& F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。3 l7 h0 q  M* G/ q( x6 A
----------------------------------------
& f! v# ~+ c+ h2 ?https://github.com/guillaumekln/faster-whisper: K  U3 p; n& }' Y: C* n2 ?
安装如下:1 s' X0 x0 @  `" G; e! r; p
1, Windows 10
7 S" a) p9 O0 N7 ]2, Python 3.10.11
3 p  Q) c7 g) i- t' |+ F+ z3, CUDA 12.1
) _6 D. C0 m5 v6 ~* G! X5 \4, 在python 3 中安装9 ?" S  ]) k' w3 U4 M
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
% z% o  ]# g/ q5 V6 a# d& g1 V这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
- B5 ~# y( L- Q' W# k5,pip install -U openai-whisper
/ g) Y9 m+ }  a. W  |0 y1 o- ?这是向whisper 致敬,可以不装
, d/ o1 w$ a. m6,pip install faster-whisper
# k5 k5 H9 X9 i  W/ Q----------------------------------------
5 k1 W% k4 ^; |, n. Q$ M3 \: zwhisper 我用的命令行,faster-whisper 我用的是python。( d  f2 G3 g, [5 x: v. N
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
/ {% d$ j) j. b: y! X% }3 ~3 e4 N4 i, g; ^3 V! g# M
----------------------------------------
. ]9 L) L! \2 `9 d( A' \0 Y- y" r3 q* ?: W8 i8 d* a
from faster_whisper import WhisperModel
' H$ K# N2 \$ y
3 Z4 B9 k& l7 _4 p, v2 g& Fmodel_size = "small"2 X8 S- a/ P& ^) X/ E, x" H

3 X; ~4 o8 n, ~2 x# nmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
( X& A% G8 [+ K5 e  f, g
+ U2 l- N. Q/ D$ xsegments, info = model.transcribe(4 \% R  U6 `. H9 J
    sourceFileName, 6 W  }: m" I' u' Z; L; H% ^# k. p
    beam_size=5,
* O) C' y7 T. T$ A, d& m    language="en", & {1 `5 }7 t" `+ j  n& W& M
    task="transcribe",
6 R+ T' D5 g! Y; ?    word_timestamps=True,
6 j' o/ l5 l( l; Y: w* z0 k    initial_prompt = "Hello, welcome to my lecture.")7 N9 c; F8 |  R% i3 v; k
* u* x: S) N+ N# Y' y) O' b2 Q/ A8 R
for segment in segments:
9 H  O+ w8 w! w( i    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
. j0 W! `4 y# p$ P3 \4 m
1 ^: D+ l+ C$ [$ F        for word in segment.words:$ S4 a4 t9 e# A. B
               
' n" b3 |, O5 r6 E) o----------------------------------------
2 k; y7 B2 D8 P; W
5 E. U4 ~) o1 |2 c, U7 W4 K, ?代码说明:
5 ]! j! ]$ t' q1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ m! u$ P7 A/ R5 C" I. z但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 [' N* b& T! C6 }# w
2,segment 本身是很粗糙的,做字幕勉强能用。
( L/ G) Z, P" @6 r4 q3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
# d, `3 H) R- b3 c. s4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
; ~$ H. M* P( Z* G比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
( \& `' P0 _9 t) T+ {. D9 m/ S7 m/ [5,model.transcribe 中参数说明:
9 e5 i0 x- Q' C5 E你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
, z9 W6 T/ D2 i0 h7 K4 a" D( b其中7 m9 K8 G+ D  M2 |
    word_timestamps=True, ; K8 E4 Q( \1 l# \# y; ^* B
保证了你能拿到 word,否则是拿不到的0 C& B2 t- K% w0 n5 b- R( d% c/ _
    initial_prompt = "Hello, welcome to my lecture.")
2 j$ s; h3 @3 Q' E4 L1 j; c保证能尽可能准确的断句 punctuation,但是不是决定性的。
3 @: ?4 Z; n. K8 @$ P5 H) T; K其他参数可参考源文件:
0 i7 c8 j# G  \/ Whttps://github.com/guillaumekln/ ... isper/transcribe.py2 ]- G2 |& c0 Y6 [
152 def transcribe(
  S, W- \% d( A& A2 V0 b/ Z) h从源文件你可以看到是支持中文的句号断句的。) H4 y/ f% [! f! H
7 L$ `; j0 v0 i% W5 {" @# S
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
, {1 I2 e. n% Y' V, A. h7 \! g7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 I: N2 S" b6 Z4 Y9 \
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
' U: n/ E0 q0 _: J2 A( |6 m$ [* |" q" }& U# p
- m6 m8 W+ q! j. F+ B! s, A. G
- |: N. A# f% b

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-3-13 12:16 , Processed in 0.059895 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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