爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 0 A. E8 H, I! r
) @6 j4 K3 j6 f' O& T
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。, C! P' N4 L( K$ Z! k
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。( F* H" a3 }/ Z* ]. s( P2 j  ^
----------------------------------------) N; n1 b) y; Y+ @: ^$ Z( J, G! u
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。2 w" ]/ P/ G# m2 e9 S# G) F
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
, a. {# v2 H9 V! _4 [! y----------------------------------------1 W5 \! ?3 m9 W, {9 k3 q1 A3 o: ~
https://github.com/guillaumekln/faster-whisper
* D, j( h$ [6 C' E9 f+ c安装如下:; g9 r) H6 N, L& H/ z/ w. u6 f
1, Windows 10
/ N; u# w! ^3 M+ j2 L$ O2, Python 3.10.11
6 T( Y( s3 H3 \- d, Q+ v! r% J$ u3, CUDA 12.14 ?; M5 O1 l4 [& G) R6 s  K6 N* K
4, 在python 3 中安装
( I' V0 Y0 z- i' [/ fpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
0 \, y- H7 Z" g* F0 H& t这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 L8 e& j* o, ~) i$ y
5,pip install -U openai-whisper
+ y: S0 q1 w3 z  W/ W9 O4 d0 K这是向whisper 致敬,可以不装% h4 v! H9 ^7 }# i
6,pip install faster-whisper% [6 d. L5 u+ s/ g
----------------------------------------6 w; U, ^" J8 L+ s
whisper 我用的命令行,faster-whisper 我用的是python。
! p& j- e- ^+ R: m) X  `& u下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 L- J8 R" \+ s& m
1 y) K( U5 E* I& t' D7 @) O9 [7 u----------------------------------------
) }+ H5 _' O) d$ C2 ^+ m/ I4 v" X5 j* k$ n. A' `6 J
from faster_whisper import WhisperModel; m  m1 B& {3 U5 @0 x6 K7 V
  j1 U# O8 g. U4 L. v# Z/ p% n, T# A
model_size = "small"
4 y6 G2 M# t# Z- M( [( `% h) f+ P/ e/ q5 [( c8 p3 h& P! R
model = WhisperModel(model_size, device="cuda", compute_type="int8"). c* \4 m8 c! z. `* @
5 ~/ B5 S$ A1 Q* K
segments, info = model.transcribe(
: a. T  F& e$ w% s- b    sourceFileName, - ]2 e6 O$ y) z- D% b: }
    beam_size=5,
' B; C! i* t( ?( @    language="en",
, v5 J1 L* `7 l    task="transcribe", : R5 Q" Q* _3 T/ `
    word_timestamps=True,
* d7 W0 S  M9 R) h( I9 u) H8 t    initial_prompt = "Hello, welcome to my lecture.")5 `( i, C. T4 T
+ T! C! _0 r+ Q3 w& {3 Y$ G& h6 u8 o3 E
for segment in segments:
9 W/ V0 p" _% `3 o; A. u, B3 C    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
" n' e6 s5 M/ C1 R2 s
% Q. {" S4 N8 E* r        for word in segment.words:
. }( i5 B9 [% Q& I' y* t0 y                " Q3 u/ l2 D; c
----------------------------------------
9 [7 j8 |1 I$ ^3 ?7 J' T  ]2 F( B/ x( Q. Y! G/ H
代码说明:
, y8 m$ ~, K6 h: p$ m5 b% h1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
7 m, @5 r" R/ i7 e但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
! p9 W$ F+ d8 ~% L3 }- J& r2,segment 本身是很粗糙的,做字幕勉强能用。
( T4 b) B) f% B4 H3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。" ^/ Z2 F0 s  o/ x( b
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中% i6 _5 O& {8 ~& ^) e; ^+ ~8 e
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
, K/ r5 r5 ^$ b  v' V$ o5,model.transcribe 中参数说明:
7 |9 \% a7 D2 l- D2 F你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数& ]; S! C# Q# z& d
其中9 L( R* A/ M$ Q! b2 ?9 @6 D, |
    word_timestamps=True,
- P9 l" J  v9 y/ ]保证了你能拿到 word,否则是拿不到的
" K$ R& R4 V0 v0 Q" \+ W    initial_prompt = "Hello, welcome to my lecture.")! A9 K* P3 D! n" `2 R2 Y' W
保证能尽可能准确的断句 punctuation,但是不是决定性的。$ }# I* P3 c2 u6 u) V9 E
其他参数可参考源文件:
4 L" h3 i& W" G% T* bhttps://github.com/guillaumekln/ ... isper/transcribe.py
. i" J! }! B: C& L1 x152 def transcribe(% z$ d7 a8 G% E/ _% B  ~! C
从源文件你可以看到是支持中文的句号断句的。
( D+ u- d+ l2 A1 A' x5 ]
4 U# a5 C  c* K4 H6 w8 \3 r3 o* f6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
$ D2 ~- ^7 B6 B/ V- g, c7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
# x& _) m0 i* Z8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ ], I4 m* [) F( n* z* O. i5 K" y* Q7 W' l( e' z  z) x

2 X1 L9 T2 b5 u/ O- m9 c9 k
4 M9 D" L1 ^9 {5 ?
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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