设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
* m- s6 k8 a: ^1 M- M9 G7 m, E; [7 {. Q% o, o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。( q4 c1 `6 |* T6 x
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
1 H* b6 ?+ [2 J9 P----------------------------------------
9 g# b$ ]* K3 }/ n# V* L显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。( d8 u& v" B: \1 Z& [& Q4 D, e/ c
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 z+ j/ D+ r. [) c( d& ~) ~
----------------------------------------
; }" R3 |5 F8 O# r) {9 U0 p1 O; mhttps://github.com/guillaumekln/faster-whisper
( `+ j3 O6 c5 w3 |4 \/ y+ n安装如下:
; h; H2 C+ v7 Y( r. z: P, u1, Windows 10
* Q7 u/ D0 a# X. [/ L2, Python 3.10.11
/ x$ t1 Q& j$ e4 L- H' s: h" ^6 P3, CUDA 12.1
6 P: z5 ^/ e9 L  @# O3 W: t: x4, 在python 3 中安装: u- b( `" K7 [
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
( I- O* V, T+ L5 e这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。4 J( d! R  @9 N! |! s
5,pip install -U openai-whisper
+ x, u/ G% b: z; \2 X4 \- F这是向whisper 致敬,可以不装
  n4 g4 V: H: T/ F+ a, ^6,pip install faster-whisper0 V: I; W- G. t& w6 {
----------------------------------------4 ~8 ^7 l: p5 p5 f( l; \& h
whisper 我用的命令行,faster-whisper 我用的是python。
: q5 M+ o. |1 N2 }; F; r下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; t5 d& j0 ]2 i4 L7 w

' G" M6 d, |$ |4 ?+ g----------------------------------------
. I' ^' a+ y- m5 f
$ g' x) E; L2 k$ B; r  }from faster_whisper import WhisperModel8 d5 S0 d; p% l  s' q2 w

& M/ _5 x  T1 s3 m4 x& u9 Tmodel_size = "small"6 C4 W7 l- O. c1 e) Q6 c

! ^9 p6 w8 H) j& jmodel = WhisperModel(model_size, device="cuda", compute_type="int8")* {9 Y' v8 W7 S& C* A  f- Y

0 P+ \' m5 E. E; jsegments, info = model.transcribe(
; ~( Y# P/ I. v  V    sourceFileName,
5 c) o; g: q8 h* o& @# C, c: O    beam_size=5, $ G3 c  n& d& k. }" c2 ]
    language="en",
- [2 l1 i1 y2 p: \3 N& j  c# _, i    task="transcribe", ! W" ~& I7 Y; T  d9 k
    word_timestamps=True,
5 A% Y4 e' G* y    initial_prompt = "Hello, welcome to my lecture.")) G5 r# F8 T5 {8 K) z& N) w

5 F8 v9 v. h; j) d! g5 Pfor segment in segments:( s5 O8 r: X- y
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
% S+ Y) c9 e, A/ h# o, i/ E% b* W2 x4 V+ O. u
        for word in segment.words:
( `- y5 u6 j0 s; ~& i               
& }3 l% K- P: C8 N9 e( K, Y9 P4 c----------------------------------------7 ~- n! K6 ]2 B5 f, f0 A1 Q
  ~/ R; V9 u2 W$ a- D, W
代码说明:- u8 c, g! j9 R; n
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。* ?; a( C* L. \! C9 X6 q
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。" [; ^# [5 q* L9 |: s8 W0 k
2,segment 本身是很粗糙的,做字幕勉强能用。. L. i: z& M+ m4 `/ H
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
* L8 l  _8 |3 M4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中3 i2 h9 u" B+ P8 W$ ^/ s* H7 {- w
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。! j* f; a3 K  R. }1 [3 F1 E0 l4 N
5,model.transcribe 中参数说明:
1 C+ ]1 Y7 E! {2 a, B你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数  K" x2 E  H  n+ [* m. h
其中, T/ f2 @1 `- d  h- ?" i7 H
    word_timestamps=True,
0 T9 ?! l9 b- m( g保证了你能拿到 word,否则是拿不到的3 h, z/ O5 ^" @  B# U1 @, U! ?2 L
    initial_prompt = "Hello, welcome to my lecture."). J) f! g. ^2 Z5 }* Z6 m
保证能尽可能准确的断句 punctuation,但是不是决定性的。, S8 K6 U+ l2 R
其他参数可参考源文件:
0 M6 {6 a6 ]! G, o# Y0 p% a# Q, Dhttps://github.com/guillaumekln/ ... isper/transcribe.py' n- {6 q6 |& q+ W/ Y! O
152 def transcribe(
+ S; a% X/ `- j) Y! |$ Z$ p0 |: ?从源文件你可以看到是支持中文的句号断句的。
% q3 r7 q3 t9 q1 a. T! D9 p7 s8 R
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
0 A) i0 i/ Q; ^7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。: c8 x. N1 H6 V: ?. d, o
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
5 N9 p8 _5 e3 I$ [' C$ d: S6 q6 a& f4 o- M* Y# D
8 B8 R& G! f, p" L& a

5 ]% P3 p' N+ V  q1 I$ ]0 U( x: B

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2024-5-13 19:34 , Processed in 0.034259 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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