爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 1 ]  R0 L2 v% J5 D5 B: u/ X+ ^8 U
2 L/ a! I* A4 p% _
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ q2 x& n4 W: Z" l效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。6 L+ d; h3 g. Y" i# M
----------------------------------------
  ~' a9 L  \) c6 e2 R# C显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。, j+ w. I# ^# [
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% n  m2 Y; u; E5 D/ k----------------------------------------- M5 h7 M$ ?, ~) ]& p: O' ]- J  L
https://github.com/guillaumekln/faster-whisper
5 \& S& \8 R6 i+ J( [' ~, ?. W8 B安装如下:, A, g: c2 c3 A7 \5 O( L$ |% O
1, Windows 10
. G$ r- i) S' R2, Python 3.10.11
" q2 V4 ~; A) ~: m( P( @+ T- B# R3, CUDA 12.15 v& f, ~" ^7 {' X1 h
4, 在python 3 中安装
* O% n8 O* p+ v& dpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu1179 {* n/ D5 p' Q$ J# u
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
& R3 C! O% \! g! ~' Q5,pip install -U openai-whisper
* z6 {; D+ F+ w; ?: y5 J  S5 C3 A这是向whisper 致敬,可以不装
/ z+ {1 e, `$ x: x! i6,pip install faster-whisper
% @% ^  m! u  B2 J/ P) d: b----------------------------------------9 |7 G1 ^8 Z' Z5 N+ {3 r. Z
whisper 我用的命令行,faster-whisper 我用的是python。
5 |) i8 L( V% ~3 k& h6 Q) h& b* L下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
7 g* C0 f" P# d- [) i% F& c3 m4 ~% H7 g2 K
----------------------------------------
1 p' `" _0 {& J: B; V1 G7 d
5 w# V! n  p! M: Y  g; _' Mfrom faster_whisper import WhisperModel
* `9 v" m6 k" V9 P
1 {) U% D- M8 s$ ~8 Imodel_size = "small": {" l$ s" M: w# h* M6 f9 b

0 L: t4 v' N9 W; f* omodel = WhisperModel(model_size, device="cuda", compute_type="int8")% e0 [7 j. }  |6 T% N: g

+ @' J3 k7 |/ D! d) B* psegments, info = model.transcribe(
" F* i% P' [  s7 R# S+ K    sourceFileName,
" C/ R$ U' K2 Q8 U" q% r2 \    beam_size=5, ) a; e& t) f/ V( e2 c- L8 l1 {% }
    language="en", % e" \" F2 g' b2 a# [" l- t
    task="transcribe", 9 {( t/ |$ Y7 |. U9 x* q
    word_timestamps=True,
, c& ]4 w$ C2 ?    initial_prompt = "Hello, welcome to my lecture.")
/ p7 E- h: [1 x5 q& p7 _' Z/ B, M! y, a7 P$ v
for segment in segments:+ u+ e; D- C1 F  ]
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text)). @: o4 O3 C' A3 M, i: Y/ A% o

+ m8 N. F/ ]+ g& K  ^        for word in segment.words:  z# _3 \, u- G
               
: Q( t$ W# u5 c% _% X( |7 U4 L----------------------------------------: O2 |' C# _+ z+ A* r8 w# F( F2 e
! C- ]: [4 Z8 \- J: F
代码说明:% ?  o4 M2 R! S+ @
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。+ z" I! d  O$ @& M4 v$ k
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。( N8 I3 O5 F  \# C6 l% |; {) {. D
2,segment 本身是很粗糙的,做字幕勉强能用。7 `) h, W; X$ k$ \
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。- C# |" n& ~  A' V  ~% m6 d
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
( c; u! H- D$ F! n8 E2 m( W9 q比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。0 z3 [+ _1 J- Q# b& T
5,model.transcribe 中参数说明:- S" z& [7 }  r, m
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数. X( P3 `  p+ l2 g; ?( Z
其中$ w! L5 O! H* n) [2 }
    word_timestamps=True, + e! s: A2 _/ X6 u0 b4 m
保证了你能拿到 word,否则是拿不到的$ v: A- b! _" k8 ]/ g5 p+ w
    initial_prompt = "Hello, welcome to my lecture.")
1 y' S6 t1 T# q4 ?/ w1 n5 s保证能尽可能准确的断句 punctuation,但是不是决定性的。
: @1 |8 W! {& B" J其他参数可参考源文件:
, n; F5 ^' w6 z+ ]1 Whttps://github.com/guillaumekln/ ... isper/transcribe.py
7 g- T4 P! J0 o2 J$ a( ]* i+ l+ j152 def transcribe(
$ x4 D9 x. `7 \从源文件你可以看到是支持中文的句号断句的。
! [$ X6 H, w! E" ^0 _
1 Q/ ~8 r' J9 |  {/ J- o7 t4 P+ ^0 P) f& D6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
1 _+ {9 j! O( G1 q" c7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
$ w, U4 Z# B% w' y( R+ k- K8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
) b4 f0 M2 l3 q4 x5 r" |: }4 Z1 ^% W$ ]& }; U6 k" e3 L' L" d

6 l7 L/ y7 d! d; g. P( F+ e8 ], X+ K1 j+ M# |* G

作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://129.226.69.186/bbs/) Powered by Discuz! X3.2