设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 & h, g2 @7 R1 V4 K, J& }

, M: s& F( f1 N6 ?  V1 O3 u借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。7 x. _; r  c  \  p6 c9 s8 s
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。0 G; g& ?6 M  [8 V0 a; b( n: u
----------------------------------------
8 X' y  F1 a/ J4 x4 S显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。+ c" ?0 [$ s  K1 p+ X
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。+ U2 d* c; V. Y
----------------------------------------% f- K2 S3 {7 L5 j  v- Z
https://github.com/guillaumekln/faster-whisper4 K* _( H# }+ ]" K8 H; S! t
安装如下:
9 C; R% g9 I- V1, Windows 10) {/ l( C9 J) W0 g5 t! X4 T1 a4 E' A
2, Python 3.10.11; w" G& p# S$ M8 d! F! `: w9 W5 d
3, CUDA 12.1
$ B3 X, B( Y0 ?3 c0 q8 U/ v: ]4, 在python 3 中安装
0 V5 U% B3 N7 S7 f  kpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* \! W; u7 B! @6 x  J$ _这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。* k( }" M& ^5 h
5,pip install -U openai-whisper
2 q) D3 }- O: u# L1 \这是向whisper 致敬,可以不装* y" i5 `6 p$ x* [
6,pip install faster-whisper$ H' U. _. X& i2 ^9 n
----------------------------------------
1 n0 Z# |  A, ~+ nwhisper 我用的命令行,faster-whisper 我用的是python。: ]4 o. ]. U2 Q3 r; N9 W/ o
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:' ^! c, U6 d. i  d5 c* W
+ \' h; U4 L0 o6 D0 F  ^; v3 l
----------------------------------------
: C. Y, |1 N* k" y" k9 N& g# @; v3 L4 ?; _( X/ N" D
from faster_whisper import WhisperModel
6 K& {! a( v7 n6 f5 t; J  B# o: q7 Q: V
model_size = "small"
) K8 b! X) `# A  T
, H9 q+ E% [$ O) Xmodel = WhisperModel(model_size, device="cuda", compute_type="int8")) j- g+ a0 q; c" D& ]& @
# j% f; K8 s7 o' A0 c- d& _6 J
segments, info = model.transcribe($ I4 l# r; \+ |. \& @2 T
    sourceFileName,
- z0 W5 p( V0 a6 i    beam_size=5, 6 |2 W( J9 v% E% `8 m1 p# S5 a
    language="en",
1 _# ^& |7 i8 Y: e. {+ w* K, m    task="transcribe",
3 v  m$ T& n: k$ ]    word_timestamps=True, / U+ g" J, U6 @; L3 w- d# s
    initial_prompt = "Hello, welcome to my lecture.")+ @2 g4 F* G1 g, f9 f  p; R

. n6 D- {9 N( Z" F7 s$ |  _( zfor segment in segments:( G3 M# _) M3 W3 P, z: e7 L- T
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
' s/ a3 i' V1 r; y. L& `) K: J* l  k( R" X$ n1 U' F8 [+ A$ t6 `
        for word in segment.words:. R: Z5 S( U& E/ D
                , J5 L* U3 v+ J; B. ]8 b8 b3 a1 [
----------------------------------------
/ U* L$ u3 G9 \# B" \/ u' y7 E1 I4 }0 S  F- `
代码说明:) H* C. |  B% a5 B! H# I
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
# ]7 |; \! {, ]/ Z% \- `但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。) h# W  u- q4 w% x3 ^4 }- J2 `  E
2,segment 本身是很粗糙的,做字幕勉强能用。! ~& A( u. N! K4 ~
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。9 o9 a9 i: K) X, [1 q, f) P. o5 \
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中! G2 D; H' Q' ]' ^
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。$ W4 _$ j9 S! x- I3 f/ l. x5 a6 [
5,model.transcribe 中参数说明:
& r/ h, p# I) u$ l4 ~你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数# E8 S4 x4 B/ g/ _) X' `& `
其中
6 d7 x& D$ i5 c. B. X    word_timestamps=True,
. O4 V  b( C3 ?# ]- z3 d保证了你能拿到 word,否则是拿不到的
3 m( H% \! C" W2 n' P    initial_prompt = "Hello, welcome to my lecture."): x- S' i. v" q. |$ e$ {
保证能尽可能准确的断句 punctuation,但是不是决定性的。0 e0 `5 o# i3 @
其他参数可参考源文件:1 J; v2 m8 v; a6 [# ^# R% ^
https://github.com/guillaumekln/ ... isper/transcribe.py0 D1 P" ~9 z  c: U/ q, a
152 def transcribe(+ ?+ P* w% p/ y7 N! B
从源文件你可以看到是支持中文的句号断句的。
' i7 g0 U6 `: @: C$ C' F1 F5 g  i) P: o5 X
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。& I' _( e" _' `" H( m+ C
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
% u5 |% h6 Y* W% Y- f6 n* A7 a0 r8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。# J) Z1 e( `# b5 E- G! r2 n& F

1 o+ v( i' P# l- u  `3 ]2 I; i
* h1 m3 d2 ^( B9 @+ u! X! Y  I6 A+ n: h

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-2-10 17:58 , Processed in 0.054693 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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