设为首页收藏本站

爱吱声

用户名  找回密码
 注册
帖子
查看: 4589|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
( O: [) C: V, O% `( P
8 ?- M1 z; [8 s5 ^借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
% p  ?. L- b3 y4 n3 D) U效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( \0 l8 G' T, J- v; I7 T; g
----------------------------------------( J( j7 ~' ~7 R) W" T9 U6 I
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
- b) Y6 L$ k) R; c/ Z% q' v4 {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
: W1 @* D) h% V/ F/ E: s----------------------------------------0 [4 \: y8 j0 L
https://github.com/guillaumekln/faster-whisper) j9 r. F# H& y7 C/ n& e8 D/ E( N
安装如下:
6 ]5 d! D& ~0 y0 W  d1, Windows 10
+ u4 K9 ~, Z7 p0 _+ K+ ]- Z2, Python 3.10.11, y0 v2 p9 r, Y6 H/ d( @, q* w
3, CUDA 12.1
* c. k. i$ R" F. w. M( Q  q4, 在python 3 中安装& ?: X1 O& O/ ^) N8 K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
5 ^4 \  \5 u8 e. G- a& N% o这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
' ^2 q: P/ g  a* B% y5,pip install -U openai-whisper
. N3 z+ `4 Y6 `6 ]% Y5 @5 N) {: J这是向whisper 致敬,可以不装
% t0 Q3 F9 ~4 y2 S6,pip install faster-whisper
, U4 _( C" B8 ~1 c" E----------------------------------------
( O$ k4 x" E. {. t) e7 Mwhisper 我用的命令行,faster-whisper 我用的是python。
' ?4 V7 Z  o! o4 x下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:; h* H& l8 n% ~7 @: F, h

: M& {7 I- b1 L- B% h----------------------------------------; `& b7 d( o- R: ~/ z. j# P/ K

% L+ a: o8 j# q' ^4 `( afrom faster_whisper import WhisperModel
* ?, B9 u( N3 d
1 j4 Y1 h  W( ^. Y+ {! amodel_size = "small"" ]' j, G! \2 t
* N0 e$ W9 G5 D" I# t, B
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- k, Q+ W2 r5 v1 l( a# {  e- C$ I: j0 ?7 d! K! u
segments, info = model.transcribe(
3 R5 {  {0 @! B& ~6 t1 i) \  Y9 K    sourceFileName,
+ y, ?9 h, p* z6 p1 _    beam_size=5,
1 N4 H, Y/ J0 ]6 u    language="en",
6 N5 ?: e, |; v. D8 Y! N  [    task="transcribe", ( J! o* b- F0 ]9 N' B! `
    word_timestamps=True, ! M: L% W- r, x1 v3 X8 m; b
    initial_prompt = "Hello, welcome to my lecture.")
+ w5 M2 E7 x8 G& ^( Z7 ?1 m$ `. w4 w0 B3 f! Q
for segment in segments:! K+ Q6 G5 M# G* o2 H+ R
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ _; `6 A3 p6 T5 y: \8 C' Y

3 d/ x2 \, M$ _9 P1 s        for word in segment.words:
  v% e) g- H8 J) r2 D               
9 {+ F* `' S' ~8 ], n----------------------------------------
, U0 W8 N, o( x. T9 q$ A  P+ K4 j$ k  J0 S  g4 U3 y
代码说明:: @1 Y& I) Y% F
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ b/ h0 u, t; a8 D/ F! N
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。. i- d4 u  G# {# e; U; x  F
2,segment 本身是很粗糙的,做字幕勉强能用。# s! b: Z0 }; P
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。, V% y" z) H/ G* N9 S1 L
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
' b9 |  I0 R: N. h比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
! J& g4 A5 D, q# I- |( a5,model.transcribe 中参数说明:( P% y( c2 K5 [" ~
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数4 C2 S: v7 N! S+ X4 {- P
其中# H# G( P2 V4 |8 h% W0 O: f
    word_timestamps=True, - [; j; f( r# `& O% T6 W
保证了你能拿到 word,否则是拿不到的
: n/ T! c5 y+ T3 F    initial_prompt = "Hello, welcome to my lecture.")) F! A  g9 y- P4 Y& ^$ [5 `) j7 t
保证能尽可能准确的断句 punctuation,但是不是决定性的。) q. b0 h8 Z& n
其他参数可参考源文件:
0 F  B( L9 e# D/ _% g9 ~& e. Fhttps://github.com/guillaumekln/ ... isper/transcribe.py
' E6 o% _2 m6 W152 def transcribe(/ H2 E- ?  S5 Q3 I! |2 o+ r
从源文件你可以看到是支持中文的句号断句的。+ A) c; h% q3 U9 n  x8 Y
) c# \6 P0 K, i2 K  `& H
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。9 c, w8 H1 c- e) O6 U+ V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( H/ m$ w0 P5 A# J$ K7 z2 F, ~
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! `! G0 b1 |# U& h' G& k8 f. }" K: ]1 a0 x! S0 H+ H
5 [( P. y* W: B. ?% X# ^* ~# A
0 C" ~- P, B9 E/ X# k. G5 [* n

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-7-11 16:20 , Processed in 0.036605 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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