设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 5 j8 ~7 e+ {1 }0 J& G9 c* ~  _; c

( F  X6 @  e% m4 n  L: v借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
' r+ W. b2 j$ x& u& l7 q& s2 T效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
* T" ]1 q) h& ?8 [% M% T: a----------------------------------------% D" L4 k8 O3 v2 h$ F
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
: O! a1 ?, Z- P在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。5 q; k" S" e( ~$ v- b4 u
----------------------------------------5 _2 h! ~  \% }$ v. ~( ]
https://github.com/guillaumekln/faster-whisper1 n7 ]! \* b/ B# |( W) \, l0 H5 r' t
安装如下:
6 j4 ~! X, X& n8 Z/ G: W3 \' j! a1, Windows 10
& P$ J5 O  p9 r/ z) J2, Python 3.10.116 s+ k& e6 `. ?0 Z/ d4 E" R. @. u, Q
3, CUDA 12.1
% J* Z* S1 ?6 F  b. t1 o4, 在python 3 中安装
3 _8 C; N/ o) s( Npip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117, F/ v. \; e7 g: Q& p
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
% `+ c* P: T! B# ?! |8 V5,pip install -U openai-whisper+ a5 }* b# C- I! P( e( }
这是向whisper 致敬,可以不装4 i" c+ S7 {0 w. s8 }: u+ N
6,pip install faster-whisper
# D* B0 Q) _  O- u2 g----------------------------------------4 f5 e3 J) `9 h# O: ]6 C; A
whisper 我用的命令行,faster-whisper 我用的是python。9 L  ~( c; H( r+ x5 p" n
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
( Y& Y1 x& d5 j. Z6 k: p1 k& F+ e: e! \* Z/ x( S' u
----------------------------------------1 T2 h, b2 H) Q) ?* }7 b# \; N+ [
' y, C8 H5 y4 g( n- j1 i" a+ k
from faster_whisper import WhisperModel$ N# c% L! D2 u9 c  m& w) p
5 P4 |/ v& X! y, T8 V. p6 z
model_size = "small"
3 x; C+ ~2 T0 M2 Y( |$ \: R* U) [+ x; H4 M3 F  v
model = WhisperModel(model_size, device="cuda", compute_type="int8")' v! p5 i2 ]1 g1 C9 x
, B# @( s" A" F! b  z: D
segments, info = model.transcribe(5 a' @5 v4 ~5 _" b7 t( w: w% Q
    sourceFileName, 0 H# A2 o% U4 I! T9 t: B% F# M
    beam_size=5, ' `! I/ s2 x- [% o. L
    language="en", 8 i9 Z" ^2 W# n' @  K- a, g
    task="transcribe", ; O) U4 H, D4 t! p" N: L* {6 r
    word_timestamps=True,
9 C' z. w" b+ g    initial_prompt = "Hello, welcome to my lecture.")- q# h3 _# n5 x" d3 Q1 m

$ T# L, m2 r+ }+ N: G# ufor segment in segments:' f: z2 ^! ?* n, c! T9 _- G+ d4 ]8 G
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
5 a" _/ Z6 K" Z9 t9 h* J5 c
+ L2 W3 E3 w/ K% e( ?, U) `6 W0 A        for word in segment.words:
. _) h# t+ @+ h" U: d% k. i                ) z# q8 f& |+ \1 V- R
----------------------------------------
# z  p( T( m& B
; U$ J" U& d; @" M代码说明:
4 `$ m4 ?8 i3 Q$ U/ z& n) v1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。. F( M) t/ \. b' n, @
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。/ }! s! T: s" N- e1 U6 A
2,segment 本身是很粗糙的,做字幕勉强能用。
, \/ T) f) J# i' f. N3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- p% ^) w' \- V/ p4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% i6 Z  `& u! b; ^比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。: S4 o$ q7 a3 G, @7 }4 _
5,model.transcribe 中参数说明:
, n2 y( M" T" W9 _- @你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
4 Y  |) k2 D- W. k, H7 V, [其中  [: \, @, T/ k
    word_timestamps=True, & N7 }1 {# A% G) S% H
保证了你能拿到 word,否则是拿不到的" z3 S: t, M) w1 m2 O7 {% y' l
    initial_prompt = "Hello, welcome to my lecture.")* S$ C, r( t/ A) x" ^
保证能尽可能准确的断句 punctuation,但是不是决定性的。
/ q( g8 c0 W& i+ w" C  o  H7 q其他参数可参考源文件:& m1 O7 x$ O3 `( a  l
https://github.com/guillaumekln/ ... isper/transcribe.py$ F4 M2 i8 w6 z$ i
152 def transcribe(: Q: ~1 B1 h- ]8 R
从源文件你可以看到是支持中文的句号断句的。; F  |8 d; d8 I' u

9 E/ Y. w' e' |' l* K  ^6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。* x/ P$ I" L4 F8 w
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
( p2 N) q  C5 _( T( C2 H8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
/ p. T6 i8 L8 q  N. X7 G4 A6 N% p2 z
3 T- [5 E! J$ ]/ I1 f! I- {  i  m- t
- ?6 M5 Z# k+ y) I
) w, m$ K: F" H0 c6 s

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-9-20 14:39 , Processed in 0.035663 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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