设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 , X( S# _" ?3 E& a

. I. s7 O4 K" y) o( g借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 Q. N6 l% t/ H; J0 g, {, B5 f# h效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。# S( Q$ v6 R5 \8 o% {
----------------------------------------8 I5 j9 N& }! A6 w- z% @0 V- D
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
2 w& V0 q, U, M. ~3 i, \  b6 C( ^在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
! p# _0 W' ~" Q% F3 s% D( K* N* E) j----------------------------------------
/ V8 O" }. u( M- ohttps://github.com/guillaumekln/faster-whisper
3 u5 H- i( n' ?: t安装如下:
/ W; o: ^! a# O3 E, [3 E$ _& z  M& o1, Windows 10
, P0 h8 U* K( N1 \7 W1 P9 c2, Python 3.10.11
3 |: O4 H' t& l& o- d7 i1 {% M8 y7 I3, CUDA 12.1
) V9 w/ {+ v/ B4, 在python 3 中安装
! `/ X" G$ N$ W8 \4 B5 h3 apip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
3 X) P+ r0 j3 {* R$ D/ ?1 K: t/ Z2 D这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
# ]( o- H0 O2 o2 l) Z  ?2 `5 E$ N5,pip install -U openai-whisper
+ e+ e! `/ }( s4 n! g+ V' g这是向whisper 致敬,可以不装$ m# ~: `; p$ }/ N% M! \; U) E+ d
6,pip install faster-whisper. ~) |5 E0 r0 {$ |7 h
----------------------------------------
! I8 u* X4 H% v4 k# [whisper 我用的命令行,faster-whisper 我用的是python。
  ?9 a& U/ W" S' {  ~下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- z. b/ p! q# @7 u
, I, }) _( r+ c' G
----------------------------------------
% }; ~7 m. G, \8 h2 F+ ?" a
6 H0 a$ q9 D7 qfrom faster_whisper import WhisperModel' I0 o( p2 \7 D6 s" h$ h( A, M" \; z

0 M  O+ _) l+ |" rmodel_size = "small"/ N5 o8 ~1 n8 |) O2 k

! k7 M- j! D8 j5 ]1 I1 @model = WhisperModel(model_size, device="cuda", compute_type="int8")7 |% {/ c% o. f, x6 J4 w
/ }9 F- S0 F2 J" R2 p; Y
segments, info = model.transcribe(" [4 @) ?1 ]. V" J2 ]$ S
    sourceFileName,
9 m5 J: @0 V+ G+ A7 ?9 G    beam_size=5,
6 ]* l0 Y7 E0 r& D9 V4 ?" U7 T    language="en", 2 N, K5 n  k; `; I" t6 ^) z# I5 D
    task="transcribe",
- s' n! ^7 P( b    word_timestamps=True,
. K" F5 j" z2 l+ ?0 p; A; P8 q    initial_prompt = "Hello, welcome to my lecture.")
4 i/ O7 ]3 ~  m" C4 |$ U( T2 _6 d
) v% P* l3 q8 Qfor segment in segments:4 h. u7 g* S9 r1 q- }
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
8 C7 l: x+ z9 ?; a" e& L6 I$ V( |) }. F" l3 l
        for word in segment.words:
: F( {* s+ z) k2 n& m               
$ b- Y# {3 B! s' n----------------------------------------
8 }: P9 u, ~2 F6 P* H. @* l
% ~& Y/ c; U! a" [7 b# m$ |代码说明:- J; ]) e# ?$ I5 U  e  C
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。" d" b- V  `1 k- C+ R# S! h' C: e
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。  }2 z4 S. ~& ]2 |9 d% e4 ^$ V
2,segment 本身是很粗糙的,做字幕勉强能用。. {, g7 a+ F# [/ s" R
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
, e# J1 o6 F9 y1 N: C  o4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
8 i+ Z  z2 N2 ~3 D: B$ I+ S+ j3 z4 D/ r; x比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
1 W9 T$ S8 g& r9 g  Q5 Z# ~4 I5,model.transcribe 中参数说明:# T2 u! w4 j4 X
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 u/ t/ X0 B8 y9 C
其中3 W1 a9 ^$ B2 O5 q3 o0 D
    word_timestamps=True,
0 _" H* j9 \6 v9 h8 I) u" u: |保证了你能拿到 word,否则是拿不到的0 ~/ E% W. S8 s* H
    initial_prompt = "Hello, welcome to my lecture.")
% ~9 \7 U3 v: v6 O2 `保证能尽可能准确的断句 punctuation,但是不是决定性的。; e8 T( @1 C) W/ |' a9 h
其他参数可参考源文件:3 v- `! P, \  Y
https://github.com/guillaumekln/ ... isper/transcribe.py+ k0 P, w! R9 L( ]8 M$ X# Q6 t( P4 k
152 def transcribe(
3 n: F) n6 s8 a8 F) R! N从源文件你可以看到是支持中文的句号断句的。& g. r, U' o9 S3 K+ D) r8 w3 u
. i! w: x  y9 }' L9 F+ O0 U
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。! d, C* B; w3 x3 b( ^/ X
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
5 [8 x! {8 Y& [/ ^& @% D8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。! c/ G0 S9 o  g- v: q
% p; i* a% n  \" t0 ?
+ o! a; l4 K; M: ?- P
2 W; O, ^! J6 l

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-5-24 22:22 , Processed in 0.036594 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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