设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
: q5 ]: o- `. Y* ^8 |1 X" {! l' b) [# }# q3 r
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
0 E9 C' J: s5 I, i& }1 U# f' v效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
& O0 _) z" I) S, |" {+ y+ [----------------------------------------
- U, E0 ~( g, d: [4 y8 Y显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
8 A: [) M0 S& {3 d6 O" N& o在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。3 U) A* W' r1 c. h7 h$ C3 K5 x
----------------------------------------7 e, n. Y/ \- Y! N% F$ F8 b3 L2 x; h& U
https://github.com/guillaumekln/faster-whisper
& v) g4 v* j2 x1 q1 [5 q安装如下:
* _3 I; U$ R% W( _1 i. h5 Z1, Windows 10
# u# @7 ?7 h* X/ B. Y% B. E; F2, Python 3.10.119 J3 l9 W+ i& x0 \! ?
3, CUDA 12.1
; z% m! n% }6 W- [# c4 u4, 在python 3 中安装
( N' o7 w/ A" A, k/ ?pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117" J6 X" I! J# Q5 m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。  R( s' M! y; O+ N  ?
5,pip install -U openai-whisper" K9 v6 h* b" b/ @7 T. R
这是向whisper 致敬,可以不装
( O3 M0 \, S& H+ ?/ e6,pip install faster-whisper
3 f8 `* G# n4 O7 j$ C----------------------------------------
% D; G6 n) I/ u3 a9 l1 I/ [whisper 我用的命令行,faster-whisper 我用的是python。
, Z6 P  V' N& W! ^% f' t4 F下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:6 f1 L& ]4 Y( l% E; D/ H) |
" y, @9 r7 {9 b7 K
----------------------------------------
# Y- B: w0 d3 f; x/ `- {: e
, o2 i8 G- {, W3 a* X; ufrom faster_whisper import WhisperModel+ V' l" {0 y; i9 o0 l! R6 v+ B* i9 `
4 r8 E; d3 N6 t& m, k. Q  t2 q
model_size = "small"( ?9 R8 E" S7 G% h3 A# `+ X0 S/ k
2 V+ k+ ?! s. X8 y- C. J, h
model = WhisperModel(model_size, device="cuda", compute_type="int8")
; y. k! n* R: h0 m/ c! f2 x
+ i7 c# J7 q# m% c6 i% T& Esegments, info = model.transcribe(
0 D! f1 Y' n0 a# E    sourceFileName,
8 @3 ]. l$ c; j8 j7 z- `    beam_size=5, ; Y8 X, p5 s) t
    language="en", ( _& e3 Y% B) Y- w/ M' q
    task="transcribe", 9 a; z% V0 ~7 i8 [# W. J% a* I
    word_timestamps=True, ) @9 f+ D1 A7 z$ {: y- t( `
    initial_prompt = "Hello, welcome to my lecture."): P; I- t7 B/ Z6 ~

+ g' ^1 V  @& ~$ w& l% A) ffor segment in segments:
/ \0 a1 H% H% u$ F    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 H  H) H& q5 x" S4 q! y8 @0 J; B
. ?6 I0 d4 T3 s) A: g) ]
        for word in segment.words:
% C: `7 e; Q" e                1 U2 @  z" q# A/ F8 ~, [9 k; Z
----------------------------------------
2 }* ]1 P6 k$ O9 {( Q
1 i( u9 ~3 F; W' \代码说明:: R5 c2 j' a  L5 o
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。  Y4 L/ R3 l# \6 D. N5 V8 ]& X" G
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。1 |: x; o: H. \' d! D/ n, E! B; {
2,segment 本身是很粗糙的,做字幕勉强能用。
! ^- E" x1 h+ O& Q( f$ D. E3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 ?! z2 L6 ~7 Z; r
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中& @" q8 p; f) V
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
2 d$ K! B; M: \. t- j2 q5,model.transcribe 中参数说明:
% N) [4 }& k& ~9 K你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
" r( g1 A3 Y$ e7 e8 W其中. ~* m/ ]1 S( i0 z) g! U8 l8 L
    word_timestamps=True,
- |8 u3 K/ i* w4 h  b8 a7 ^保证了你能拿到 word,否则是拿不到的
: \5 S0 p. H1 B2 a) H( O6 r    initial_prompt = "Hello, welcome to my lecture.")
, n, B2 a- g( P4 B9 V+ q7 @0 b保证能尽可能准确的断句 punctuation,但是不是决定性的。
$ B1 B" m5 ^3 g6 R. C0 T( [5 A其他参数可参考源文件:7 P2 d0 g  V: B* A/ k9 o  t4 N
https://github.com/guillaumekln/ ... isper/transcribe.py
, r& i2 ?2 K# k% n" M7 k! Y152 def transcribe(! y3 W' M' f6 i+ Q  A
从源文件你可以看到是支持中文的句号断句的。
0 {' q! M5 d2 i: Y9 Y+ q- A2 S4 `- l3 ~5 R6 \0 _3 M
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 t- k1 Y$ S+ P% X& `/ s7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。" h; P3 }5 f- L* L; p5 b# l8 K
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 Q& K$ S, Z1 a# T8 u6 ^/ e6 Q: q5 x5 G2 ]1 s
: H- L# u( z/ x0 Y) S+ y
- F, P% E; _9 _% R. V

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-6-7 00:49 , Processed in 0.087897 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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