设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 7 P8 R' v/ o& |

4 r$ r4 P4 u5 Z5 h- _借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。/ k. e) z  R; N. F$ |# A
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
  T; q* R! V- p) d" W# x( D----------------------------------------( `% X# E" F9 ?& R7 \( }
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
& b- c! [# u% l1 g1 g+ u4 r在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# L$ [1 S2 Z4 o# _/ g1 r# k) D/ {----------------------------------------! z# i8 n; D! n
https://github.com/guillaumekln/faster-whisper* K/ v3 U4 v; U) w# l0 M7 l
安装如下:3 ^8 {  r" t6 X4 e/ r6 h
1, Windows 10
' }* S# L' a6 ?$ c) w  b$ D! J2, Python 3.10.11
- V2 N0 T# F1 W7 f2 O3, CUDA 12.15 ?3 n2 y4 d1 I; q* n
4, 在python 3 中安装
; P/ ]- d! U: U6 r; z' ?0 ypip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
& C. P( |  n, g  J, Y- {这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。* q3 ^$ p) [' [/ t
5,pip install -U openai-whisper
2 _* b. F8 o5 j( p5 S; R- e这是向whisper 致敬,可以不装
; `; i# |, Y& O) z( S4 N6,pip install faster-whisper
# R6 m2 C8 n0 I4 b( N7 V8 W----------------------------------------0 L) u  V  h- J8 q4 t: }% M; o0 ?
whisper 我用的命令行,faster-whisper 我用的是python。# M1 i: m9 E  p* V# B8 |  D
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
, [: D/ e- B# d$ j3 Z$ m' ?9 u
# F7 D8 l/ O9 j& x1 b----------------------------------------. b! k# ?$ E: v3 e. L
6 S8 q' |* Q' n& \- G
from faster_whisper import WhisperModel
; V: F) _6 c" z: C# Z+ t; `6 Z7 O  a' g9 g6 K; F
model_size = "small"
" J& v5 A; j% ^2 L/ z  y# a9 o9 q
1 ?# k3 P8 m: }- }% |# kmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
" h/ `/ S( {) Y% M% E9 G- Z9 I, Z& `8 ?0 F9 C2 A/ r
segments, info = model.transcribe(- [& |  z1 i1 |& ]& \
    sourceFileName,
. A6 Q" {& Y  A  H3 r    beam_size=5, ! r/ E# e  B) \4 `9 w/ ~
    language="en",
7 `' d! }+ a/ |3 }. L" X: _' c    task="transcribe",
2 i( k2 K( J  N+ g; @% b    word_timestamps=True, ( ~3 N1 ^$ ~, N
    initial_prompt = "Hello, welcome to my lecture.")3 }  ~8 A' w( L$ i* c/ W+ T

/ x5 n7 Z% r3 H* X7 O, e# x' \( [. Dfor segment in segments:! `. G) l9 B( _2 ]
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)): s" j! Y6 R- o" x% K+ |
( X/ u4 L$ W5 M. j7 I
        for word in segment.words:
5 ?  R( ]- ~. r! d6 u% ]* m. [               
* a4 _, B; c! x! E# e' b4 d: e" u----------------------------------------
' {& @6 b4 \5 L* c; \8 Z# m
8 g4 k* G6 Z0 [代码说明:
+ {# o/ W: z7 A6 o9 m- E7 g$ f1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
; E) \9 _- }9 c! K/ |但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
, K# K0 \; f) Z# m+ d9 f5 O2,segment 本身是很粗糙的,做字幕勉强能用。( _" N' }. U2 w
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。/ ^. M) ~' E3 j- R8 A
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中; k% i" ]- [9 o! ?6 b2 }
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
/ T0 }1 Y& B: ~5,model.transcribe 中参数说明:6 I! c; `2 O4 ]6 I- b! s7 O/ y( I
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
# g7 \  Q- @, Z- f+ O/ p. c( |2 V其中7 e2 p" l5 ~" I6 v( A/ b
    word_timestamps=True,
0 w2 D+ e- T7 y) Y- g" D; n! B* e保证了你能拿到 word,否则是拿不到的7 Q9 f9 N* n$ D. Z1 H
    initial_prompt = "Hello, welcome to my lecture.")
' T4 `6 b2 X1 f4 J# M4 q; m* p+ ^保证能尽可能准确的断句 punctuation,但是不是决定性的。3 [. Q0 \: ^/ r* v* k8 p
其他参数可参考源文件:
7 c9 [8 {3 B; _/ y1 b3 |, D; ]https://github.com/guillaumekln/ ... isper/transcribe.py7 B7 D' |* a3 C$ `
152 def transcribe(
- h% l& r% U6 n) ]- i# |, M从源文件你可以看到是支持中文的句号断句的。+ r" I* @/ a3 l/ f* V9 Z. f( K: n
* g  w6 X: A5 N7 [3 ?: C# ]
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。) V/ W7 M' k% J5 h" @* ^
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 u8 M# X/ i. c; Y1 U8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。8 A; k) L9 I# p9 c; l

' q* e8 y4 z, T4 F) t2 j* Y ) n0 t( |, R. X% ]8 s9 e

" x$ k2 k  r) ^/ @: [, |0 Q, e

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-2-8 09:45 , Processed in 0.052700 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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