设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& [/ |! Y6 O: y6 O& M- s# f+ k; F. M8 t4 x& O
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。# Z. |0 A2 }* N# u2 V
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
( k# l. r8 k/ u* b+ N- O; [8 E' c----------------------------------------
1 @0 [' E! n, a+ F. o: b显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。8 G) y8 n# i8 [9 x" |8 H3 Q5 `/ |
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
7 p# V- d: l  M3 g----------------------------------------
( Z. J/ c# i+ Qhttps://github.com/guillaumekln/faster-whisper3 M- [& F, ^; k0 e7 p: P
安装如下:/ f3 @8 i- ~+ D1 |5 k' V, G
1, Windows 10
2 i" K" w$ U% h. d& C5 [2, Python 3.10.11" y8 @: d  h& c, t: i
3, CUDA 12.1/ s# R( Z6 K. ~
4, 在python 3 中安装
1 ~# K  K9 p) H* H+ S2 \/ N5 Bpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
; {) m. X5 h6 x" O* M* f+ H这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
7 H* P: D* {% i' [# [: X5,pip install -U openai-whisper9 U, h& m* b1 b9 z+ ^$ V8 a' V9 t
这是向whisper 致敬,可以不装
; x2 Y# t  X* Y& ]6 ~6,pip install faster-whisper
  B' k% L+ o+ p3 q+ }1 d----------------------------------------
* b; a; p$ `, l4 d. Mwhisper 我用的命令行,faster-whisper 我用的是python。
5 \! \' b/ p9 ~下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
# I: n/ L1 `) i& q# F$ T! q8 `+ h: G0 l/ F
----------------------------------------: Q& T7 V9 w, n8 v* T

: }- `9 ?" N( |3 n  O; j% gfrom faster_whisper import WhisperModel' a# s9 L1 l/ R: K- x6 w& \

. \$ t8 H! b3 O+ p+ N0 t: m0 Kmodel_size = "small"
" i8 o7 `" b  v4 m/ ?. [
# h1 B# L( k+ z4 m- [# h( i* qmodel = WhisperModel(model_size, device="cuda", compute_type="int8")) e( `7 H  y0 g1 f# u- C8 w. ]
  E. z; G3 r) V8 E+ E1 i! i+ X% ]$ t
segments, info = model.transcribe(( o* t, S! B2 O" o( }6 y
    sourceFileName,
0 O7 B8 k4 a4 F/ |3 @' i    beam_size=5, - m! Z! Q8 i! U# \+ G! x4 K7 X
    language="en",
; q$ W% {- q, k* h% ~1 R    task="transcribe", $ {, b4 Q, p! V/ V, W
    word_timestamps=True,
0 d5 L+ c% _- C( j    initial_prompt = "Hello, welcome to my lecture.")2 O6 D% t# K2 \) R0 v+ N" W  ~
5 Q6 S8 f7 d' \: `" a+ {3 |3 E
for segment in segments:
& Q5 I5 I) {  I" J9 i) f6 P9 V    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
1 E2 V$ b7 `" b/ c) ]# Q2 k  n  L( C1 K7 E' F
        for word in segment.words:! q# S* `4 E4 _" f: Z* |
                / H9 Z$ N/ V& e0 |3 d9 [
----------------------------------------
4 d+ R+ M* M# ?, n; O$ o* R, g" D. y
" ^2 t; U9 R1 D6 I0 e0 W2 T代码说明:
; [- t0 s. y7 ~; [& H" P3 N6 Q, C1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。# v, [4 T2 N1 f2 f+ e
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
$ m/ E3 b( n8 `+ M2,segment 本身是很粗糙的,做字幕勉强能用。! Y* b2 j( G( y) V
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。& Q5 m/ E3 ]" s# A
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
, c, M: I  \. j2 }- `$ {9 ^比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。/ h0 a4 c9 Q; d, T
5,model.transcribe 中参数说明:
& @3 P, K3 d2 V8 N; }你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
3 g, Q6 E4 _6 x/ K6 i其中
, y7 K. N% b2 N: V( k    word_timestamps=True, + x( K' X) _% F# {$ i  b( d
保证了你能拿到 word,否则是拿不到的+ F8 U% s6 [! O& T* ?
    initial_prompt = "Hello, welcome to my lecture.")
! @/ M* C" q+ I0 H* j  x. \保证能尽可能准确的断句 punctuation,但是不是决定性的。
1 n" J) P! _  @( [0 {其他参数可参考源文件:
" b2 D% Q9 Q0 }9 y  j" Chttps://github.com/guillaumekln/ ... isper/transcribe.py6 Z* Q! E- c; x4 \5 H
152 def transcribe(
. l/ b$ _- v0 S7 B& `. \( Z4 p从源文件你可以看到是支持中文的句号断句的。
. C9 H- `3 f( q- ^, a' n% a* Y5 e/ y: P2 O: J) y: b6 x% I
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。7 [( z: G. w6 `. W1 B
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。( D  P4 V8 |' A) U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。+ c0 ^8 K1 s5 M2 @- s

" ^$ @7 v# R" B* J ' ?; I/ a: r6 e$ n' a
! A- s7 C6 U, P# R

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-4-8 20:39 , Processed in 0.057558 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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