设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 + ~4 f2 b/ E: Z
6 u" G5 {4 \! T+ i# z
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。1 e( L0 m' E% Z. K
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。: Q/ N; f) g( G! h& J
----------------------------------------
: ~1 l1 C% t( C: R) n/ j5 D显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
' H& o! X  {" R' k, W& p7 c/ W2 Q在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
/ A9 A& [# e% f! j$ C- X. ?: U8 N( t----------------------------------------
' V5 w# {: F/ Uhttps://github.com/guillaumekln/faster-whisper
' w: Y" Z1 m6 ^安装如下:8 X% v4 K1 r" E# X# E, n/ j) A: P
1, Windows 109 t- i$ m0 V7 ~: _1 I( j
2, Python 3.10.11
4 A; k' s& R6 J3, CUDA 12.1
$ m1 u# K" I3 g0 j7 u9 l3 x7 @4, 在python 3 中安装- t1 l( ~) q/ v- }; T% Z9 K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117; V* M! k, ]; @
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
9 t5 B8 D: J& l1 M/ p6 U7 q5,pip install -U openai-whisper
  K5 M7 f/ i' ~/ U这是向whisper 致敬,可以不装0 g  Q! W* `! i; j$ u' U2 c6 B, G# X
6,pip install faster-whisper) d+ H$ k# O1 V, M: ]+ t) V
----------------------------------------
2 M7 S$ j' L4 j: W& Q2 D' Swhisper 我用的命令行,faster-whisper 我用的是python。3 \; s, o1 z( G% p2 Y
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' C& J( W& U, G
- ]" n2 W  k- O# ~----------------------------------------
" `9 M; J: u' l1 y  j8 C2 k" s7 U% b6 J3 F$ P& X2 O/ s6 H
from faster_whisper import WhisperModel" e4 Y0 |) Q0 f7 A& L1 N, i
; s, r8 O2 L# m+ P( u/ L) ^" B
model_size = "small"  Y$ Q8 }4 Z$ j) }1 ?5 m

; q, l# i; H; |$ V6 x, X5 Z. a) hmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
! F! |% r- V# i4 G) v1 Y3 J
' @* w: S  {3 o5 bsegments, info = model.transcribe(
' {  V' J7 @# S; E    sourceFileName,
0 ?( m: L% T2 ]0 R    beam_size=5, . I! K: W. H, @9 E; Y
    language="en",
3 y! q1 u( R7 Q1 Z! |( @$ l4 c& Y: M    task="transcribe", : R" K& ^9 u3 s
    word_timestamps=True, , k% N6 N8 }  X- x6 g
    initial_prompt = "Hello, welcome to my lecture.")) P( l8 m2 V. w

/ e" b3 y5 ]* A/ y+ Nfor segment in segments:1 R5 s2 S. y0 Z7 s+ ]
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
7 S& i5 l6 Q# b8 K6 ]5 I) j) O* _( Q& L1 P
        for word in segment.words:
- T( c) A, x! @! r8 n) \                2 C' \1 H! x; @3 o2 x5 h
----------------------------------------
" t: b' M6 _# t$ P0 ~& G3 Z0 w
) ]6 J0 @) u; J0 T0 G3 o( k代码说明:
8 _% c/ S2 h' t1 d6 Y7 J3 P- d: R1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
4 S. |  x" h( n3 L0 B但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。& C3 K' I, @) g# b
2,segment 本身是很粗糙的,做字幕勉强能用。
" t9 K5 P; I( ?  ?4 A+ z3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
9 c) @1 [6 x0 L" T4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
7 z/ L. Q! u' `0 X比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
7 u) T1 K1 R" O/ J! r) |5,model.transcribe 中参数说明:) D5 I  `! B6 u/ u: S; Q! n/ x- @
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
# u- _) n( G) |% l$ l* t5 f其中
# ^' t' o( w" A/ u6 a5 A9 @2 T" K) q    word_timestamps=True, 3 Y! l* w0 T. M, c2 z7 o
保证了你能拿到 word,否则是拿不到的
$ A# ~' j4 V9 ]1 G    initial_prompt = "Hello, welcome to my lecture.")# h9 ?% \4 d( V$ i8 ~/ d. g* O; t7 G
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ u2 ]4 D* k$ v) B  T7 e% o" o其他参数可参考源文件:3 i$ L' n% Q, v5 M
https://github.com/guillaumekln/ ... isper/transcribe.py
: y! q( f' T. |  R) G& [152 def transcribe(. E: A9 w6 y% r2 k. N* @; h5 Y
从源文件你可以看到是支持中文的句号断句的。& }" l! J( \$ o

3 @9 n  d3 }$ `; V: U6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
( \& h9 F5 a/ L# P4 j7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
& W. Y, }5 k- R  {9 q6 O& B8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。* ^3 `. ]3 Q+ ~5 o4 e3 L; v

' {' ]0 m/ x" P$ Q( @* F * R1 V9 i+ ^  U9 z* S0 z* m
( g) k8 p! {- h4 t9 p& k

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-11-16 00:30 , Processed in 0.032051 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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