设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
' N& z# o0 Q2 O, }! W: r0 y% H+ h7 \
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
- K# `: S$ M) y) \效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。. W$ N" Q8 X2 f) l# q7 B
----------------------------------------
( p1 B- e" [5 S; I7 B5 V* [9 i显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 w' o" a/ {5 a/ s; ~8 s在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。- u) M! e# _+ I2 D' e$ l
----------------------------------------
* ~( f- b# q/ @https://github.com/guillaumekln/faster-whisper, J7 c$ w1 Y/ o
安装如下:( g+ Z! O& R$ {8 {' s
1, Windows 102 Z* q: P* W( Y8 v
2, Python 3.10.11% v! d# i8 A- ?: G9 ?0 g8 \* J/ B
3, CUDA 12.19 S+ e- Z  a. Q  a( }+ V/ [
4, 在python 3 中安装
9 B% k6 p% `* [8 e- _pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1174 i. B/ E  w& V# x+ a' R  D  E
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
  N! G$ l0 V8 G8 T! n" H5,pip install -U openai-whisper
0 G- [7 S8 T+ B. ^  L, ?这是向whisper 致敬,可以不装1 T! [- B/ \% ?
6,pip install faster-whisper
) U. Y# K- t$ @( |1 E# t----------------------------------------
: }# c0 }0 v: E4 Pwhisper 我用的命令行,faster-whisper 我用的是python。* ]* |! p* ?% r9 q2 s1 y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:! F; `/ t- i+ t  f* d

, N  [7 [3 M; U; f4 H: V+ c* V----------------------------------------
) n& @+ t5 W! P7 @: R7 z
! A. E. w0 I: R" k" }from faster_whisper import WhisperModel
. ?( h$ M5 e; G' r. I( y3 n1 Z$ _. O+ U- y6 H9 _
model_size = "small"; v7 B( n, h* T' l9 w

) H, |: a' U* }2 n( \% `8 _model = WhisperModel(model_size, device="cuda", compute_type="int8")  T4 |2 U; v( Z. e/ h$ p7 V
, X* Q: w, n' E: H
segments, info = model.transcribe(
: Q8 W: Q5 t1 L- J6 |1 D+ f/ J7 c0 K    sourceFileName, 3 ?0 Z( l  K! A3 S' A) M/ j
    beam_size=5, 4 O2 b; _. w) V4 S- L# ^  P
    language="en",
* [# \( T4 M: F# c% g    task="transcribe", 9 z  F) K" g# t4 S5 F
    word_timestamps=True,
2 t- j+ n  ?) ^$ K4 s    initial_prompt = "Hello, welcome to my lecture.")" F5 G. N6 g& g: Z' U6 ^+ P" B, I7 y

: e% k3 g8 R& Q' f3 ?) C  Bfor segment in segments:: I/ Q6 c. ~- w9 L6 q
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))6 |, \! o: F/ @8 u9 I3 ?. m
: T4 j, y4 D1 p2 p/ a+ x2 t8 r
        for word in segment.words:1 c7 q" T2 A2 K6 D) q- t
               
+ V" R1 m0 Q+ Q+ f5 d" `3 f----------------------------------------; \1 A, g0 U0 P* U3 J* ?3 C

6 r0 {% X6 A9 Z: f) O代码说明:
4 ]' K2 `* K8 s$ y4 o1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
  w: Q9 |9 t% r# Q3 T- J/ j; A但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. G/ x5 p; H& ~4 B. N5 i5 g5 h3 a
2,segment 本身是很粗糙的,做字幕勉强能用。3 {+ J. q2 R6 y8 i2 V* A
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。2 W* t) V+ K6 D
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 k& t  e4 o6 o& L8 T% W  M& d- R比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
: y9 O, V# Q' [" `6 e8 A( L9 U5 G5,model.transcribe 中参数说明:
  w3 |6 `4 r" W0 {6 U你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
* X) T% h6 i4 b其中
; m7 E) Y2 H$ d' K4 W    word_timestamps=True,
( w& K/ o3 A) V: k, @6 `保证了你能拿到 word,否则是拿不到的" c$ _6 R  p( G8 C
    initial_prompt = "Hello, welcome to my lecture.")
: }7 o- W0 Z5 A  M, C1 K, N* d保证能尽可能准确的断句 punctuation,但是不是决定性的。$ L; M) l: Y! q. o
其他参数可参考源文件:& ]9 h9 D5 A% C$ R8 X+ ?
https://github.com/guillaumekln/ ... isper/transcribe.py; Z( ], C& k) J+ F  {7 `
152 def transcribe(' w3 n6 W( l0 i4 a' L
从源文件你可以看到是支持中文的句号断句的。) m. ~+ X+ S: D! }& R4 m4 M

4 e* l+ ]" E4 t; ~5 }6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- f& r0 ?6 {& m1 M7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。) E# H5 c/ {- {' O  _; F
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
3 E; A- ~" p) q( a) t2 @; W) i
& k$ ^4 \' i9 G5 N+ L" q1 G* M * O  G% p% b- ~) h$ J

2 B0 n: l+ N! b, I) L

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-1-28 23:57 , Processed in 0.053721 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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