设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 * ^" r' B9 r2 H  l. U' ]$ N  I

. d) Q2 W; J2 c. K借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。* j0 V6 }# r  M8 w7 z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; D* ~$ w- f  ?6 p----------------------------------------
* z- @. d  S, H0 U* [5 r显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。, ?1 P2 B; R6 R1 R$ a6 `9 a1 d! F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
8 V* t+ A- A' p) S1 n  ^----------------------------------------
4 C  E# ]$ b3 G9 h+ m! f6 J& ?2 dhttps://github.com/guillaumekln/faster-whisper
/ [3 Y/ T9 C2 V8 K& D% i安装如下:: t7 M+ V9 E- L: A" ]3 J
1, Windows 10: d* r1 R- o' P$ d2 H; y# o
2, Python 3.10.11
7 N7 P; ]/ I; ?" k" ~! V8 b2 H3, CUDA 12.1
, M5 @6 f- \. G0 Z9 {/ T4, 在python 3 中安装' \0 ]+ m: M4 F& v# A
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117& f* u+ O1 r7 `  k
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。/ {# P8 m1 Q$ y! @2 h
5,pip install -U openai-whisper
+ Q$ G  }; T* Z1 q1 C这是向whisper 致敬,可以不装
& Z  o0 m: F( v" b2 b7 j6,pip install faster-whisper
$ ]( u8 L% H" i& g( E8 `! @----------------------------------------% ?# k+ U3 a* q8 \! r3 g
whisper 我用的命令行,faster-whisper 我用的是python。
  `. u% t' h! B- m& I下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- l1 |8 U! |2 V4 g0 b% S+ m

2 g' V. T" ~7 r----------------------------------------
0 M; ~' ]% n  T5 [- [4 J) Q! w' W' w4 p( B3 Y( |, L
from faster_whisper import WhisperModel. m+ T: _- m% D+ C

; N# W/ `% o' Y0 ~' {5 Hmodel_size = "small"! c6 K: \, k# r, a/ I) s
% R( j& H- K# K/ c1 Z6 G2 M$ b
model = WhisperModel(model_size, device="cuda", compute_type="int8")
' O6 b; n5 q2 g6 {! v" X* a5 a6 H, J& W" v, B) Z! `
segments, info = model.transcribe(3 E( R6 a4 N/ N! @1 c) t
    sourceFileName, & Q) Q. O2 x  c( j
    beam_size=5, ' ?$ f( K) ]" A1 E
    language="en", & i* j& A0 h9 b; N0 q
    task="transcribe",
" L5 E2 p$ f6 I( T$ {' D    word_timestamps=True,
, i6 z- _/ J) L5 K7 y* a* D; d    initial_prompt = "Hello, welcome to my lecture.")  t/ e% m% t: g- k! e+ X

; Y0 [& ?1 W" e/ w6 nfor segment in segments:$ Y" ~* R. r/ e1 e% O  _
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))  r- ^# k  h' ~" w& R& {
, x. h$ b% B3 T1 ~, E/ ~7 ^
        for word in segment.words:: I- v( E+ c, Z5 t+ K4 K8 D8 o' S, h
               
* G& E# l2 }$ I' l' Y----------------------------------------* N$ i' D* S/ P
* m2 r1 E( a5 @3 p" j# @# ~" D
代码说明:9 @7 }" v9 f. J% _$ g/ J% b
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
+ t7 L. |: C. J/ Y但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
' A1 u( x7 N; I2 D; K% ^; x% \2,segment 本身是很粗糙的,做字幕勉强能用。+ i  f& S+ h0 L" C
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
( M# F+ k8 |2 p! H. Y* o4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中4 {& Y+ ^, p, d4 k/ [
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。9 m; ?4 _& @# Y8 a5 F( ^' h) ?8 }
5,model.transcribe 中参数说明:: d6 _& q  ?6 v3 D9 P- D0 n
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
: V4 ?0 I( G7 K其中
0 i0 R$ L7 H6 I    word_timestamps=True,
# F4 ?+ ^3 P3 f/ f* p保证了你能拿到 word,否则是拿不到的
- B8 |% C: K" ]# c5 M" s    initial_prompt = "Hello, welcome to my lecture.")
! `) @; |  O6 ?5 j保证能尽可能准确的断句 punctuation,但是不是决定性的。% w1 n- i9 E! R0 k. X0 c* U2 m" a
其他参数可参考源文件:) `! u( R, n* s) N) M  S; ~1 c
https://github.com/guillaumekln/ ... isper/transcribe.py/ A& f) |- Z. }/ I1 n, j
152 def transcribe(
# {- _1 k' Y" [; s; b! {从源文件你可以看到是支持中文的句号断句的。
5 r7 S% f  Y6 m1 [/ o; m1 b3 T2 f) T" s1 g
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。5 @5 z8 \1 ]/ M
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。& ?( e4 O8 ~& E' v8 X6 ]; p
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。$ y# V3 C) |% k, W) [' I
  c1 A  ^' g; ?8 h# ~. h1 [7 |, F
! z* U6 _" J* S. b
' s2 u" ~. ^1 O4 O2 k

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-2-1 23:48 , Processed in 0.053295 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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