设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 8 L5 v/ M% P7 {6 {9 o3 j  Z0 S

/ {2 r3 e4 P  T6 ~6 o9 J8 b借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& \( t: O) w& S3 P
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。9 v, ]& W% |) e  X! F' s
----------------------------------------3 G0 z$ U( h) W9 B' E
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
. W9 _5 w1 y- |. ~: F在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。3 O- O% ]; g% B; b4 r1 G
----------------------------------------
# f+ J; R0 X) t# z5 vhttps://github.com/guillaumekln/faster-whisper: w7 |9 g# `; v2 W) a
安装如下:
0 P9 a( @- r+ M1, Windows 103 f: h6 H2 a/ [* d1 C+ D2 x5 |+ I
2, Python 3.10.112 E$ G+ p1 T5 E  w1 S3 C$ k
3, CUDA 12.1) `, U6 H6 {! k6 u& ^
4, 在python 3 中安装
& M' [' P! [/ z, a! y0 m- s' Jpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1177 }! E2 A# u9 d: O" G& {! [
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。. K, b. c; D! T: n5 t9 M
5,pip install -U openai-whisper6 K$ G$ R! Y1 f3 U; u( G* P% Z
这是向whisper 致敬,可以不装% V' Z! H, v8 ]- D6 I( R
6,pip install faster-whisper% J% z# b2 L% {7 R- k2 p( V
----------------------------------------/ H7 }3 V5 s6 i
whisper 我用的命令行,faster-whisper 我用的是python。3 f, W: j+ d, w" J8 a
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
) ?5 \$ P" x! j' ~. H) c3 o* y( U$ y8 q' L
----------------------------------------5 o, M2 H& o" ]6 V( I$ m9 e) z
+ S, D! s9 d3 S; A
from faster_whisper import WhisperModel& a# A5 m5 ~( w( k- X/ x1 y

1 o! Z# ~/ ~( [: K; R. s% J& jmodel_size = "small"7 d, l7 U) T: R& u8 ]

7 h: f2 _+ d! W: y% q8 |model = WhisperModel(model_size, device="cuda", compute_type="int8")
4 I; B/ Y( {) G- U7 V' _% E- Y% [" O6 {& x/ L% R, J+ {) k
segments, info = model.transcribe(
3 B/ {1 o# E; b9 o8 D* t2 G/ \" }% z    sourceFileName, 3 N) K, W5 I1 d0 {6 k
    beam_size=5, , x( L1 Y. a# h2 {% H/ C
    language="en", " W9 L0 A8 [% H* L/ F; w
    task="transcribe", 0 k/ J" n, t3 i
    word_timestamps=True, - I5 o% |. g8 }8 ]6 W
    initial_prompt = "Hello, welcome to my lecture.")
0 X0 y  T0 J5 Q- ^' V* Y% m0 A9 N1 a* ^# L" r+ {" y
for segment in segments:0 N1 ~: X' t0 F& _, l1 w
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
6 a- j' y6 R; e) ^& E2 @" m$ W% T, t0 @( F
        for word in segment.words:
: W" L3 U4 L% O& |- G. j5 F4 g8 }                % z% J/ |6 [" B; k2 P1 S' s
----------------------------------------8 g7 O5 f3 q0 L$ ?+ B  o: `% u2 K
$ Q+ D( [3 i1 B0 h$ B$ }& ?. D
代码说明:
, P; V# o9 L1 T; a8 o1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
* T# Q5 N: G% U6 ~2 A1 X6 p但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
# J6 O% e- z8 G* W7 {2,segment 本身是很粗糙的,做字幕勉强能用。
# h% a9 a! V6 |% N, d2 K# E6 O* J3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。9 c5 c9 o) Z  V
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中5 r  s8 r2 h. u$ z
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
6 }* G3 j0 W4 @5,model.transcribe 中参数说明:
: Q$ P( h2 }) d6 K1 Y3 f) A你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
$ I: S; {8 g5 |* ]其中2 g' }. T9 ~8 m3 J. A$ \
    word_timestamps=True, % i) s" r- B( S; r0 ^
保证了你能拿到 word,否则是拿不到的
5 Y9 A9 o$ X8 p% k* ]    initial_prompt = "Hello, welcome to my lecture.")) L0 W" z6 M. d7 A
保证能尽可能准确的断句 punctuation,但是不是决定性的。
2 t* q  a3 R8 i* I& g其他参数可参考源文件:4 E( w- r, g& c+ m+ d' w+ |; Z% }
https://github.com/guillaumekln/ ... isper/transcribe.py- `2 h9 W& R3 f. U
152 def transcribe(- Q) n" [; R0 y, w+ g) g- `) [
从源文件你可以看到是支持中文的句号断句的。
) H/ u: G, W6 |6 m
7 N# f, A$ k/ x6 T6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
) a0 ~5 A0 e9 E+ k( ?7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 _) i( b# o3 l& q6 B" m8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。& d- }  d7 R1 {. Z
( [0 |# q7 j' O* p, o2 R9 }
. }) c# N5 W4 B; m$ P
) S# ], Y6 Z; j( F+ o. f

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-7-30 11:37 , Processed in 0.065142 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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