爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 7 D! j, ]8 @( S5 k% u4 G
4 T+ E0 U+ [+ y5 ~* G" i
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。, y+ n9 a3 s7 M
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。; ?/ A9 ]2 l2 a* {3 O' O8 ]7 W: j
----------------------------------------/ V0 d3 d* p! A$ S3 q) ]
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
) U/ g8 r6 P) a* A0 M在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。# C) {; R/ u/ a7 w; O$ x
----------------------------------------: E+ W5 a: d9 ^, t0 j
https://github.com/guillaumekln/faster-whisper3 q7 l2 G7 @8 y6 P
安装如下:
7 \1 X4 y! {! b" \1, Windows 10% |  G1 K" j, e; ?: p
2, Python 3.10.110 E8 c/ v. _5 i3 Y% H
3, CUDA 12.1( R  G" F. |& l1 K
4, 在python 3 中安装
5 }8 X7 k8 m' S: C! mpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117* J# U+ \1 a" b3 K8 g) m
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 b( r9 m+ T4 y  U* e8 f* W
5,pip install -U openai-whisper
& r- w: @7 O+ [" }$ S这是向whisper 致敬,可以不装" Y1 x/ h' S: E
6,pip install faster-whisper
6 j, {: u& I( P' b----------------------------------------
( G) g2 Q  q' w5 d" |$ y. ]whisper 我用的命令行,faster-whisper 我用的是python。
# i; C5 h' ]6 I: u2 P6 r* I: K下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
% |+ G1 f/ `6 R$ y! G( S# v
; V* a% S8 ~& q----------------------------------------
7 y. \8 H  `5 E( R! }
% f* y* ]  v0 t0 Q9 o/ Hfrom faster_whisper import WhisperModel; S- O1 p+ [3 b5 F

5 n! E/ A$ K. p1 s$ qmodel_size = "small"  k. t9 V, o& a! F. E
% X4 N' D6 V& |. i8 j
model = WhisperModel(model_size, device="cuda", compute_type="int8")
: ?) p$ F! |; W% |3 P9 B: F0 v' c+ G. [1 m$ `
segments, info = model.transcribe(. ~5 P" W8 e. ~! t
    sourceFileName, 6 _6 n3 O" {# z5 I7 F
    beam_size=5, 0 d% f; n/ t. o" d  `3 F
    language="en",
, G/ ~- W0 T( g* T+ W4 H! b1 k, d    task="transcribe",
& x" [  ?/ b* F2 {  w    word_timestamps=True, * X) t7 l: S) q5 p. u, k
    initial_prompt = "Hello, welcome to my lecture.")
' a& x5 J  N8 L3 u, w# \7 s% y/ j, V( j$ J! j% j4 o
for segment in segments:1 P; E' m5 h9 e# p  ~& Y% [
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))- h- y9 V1 b! s' Q1 N5 T; k

: i' T3 w0 n& A4 k+ p, n: v( C        for word in segment.words:( G' R& t- V  J6 G
                $ ^5 r2 W: J6 I' `
----------------------------------------
4 k7 b) n( \" x8 x
  f) K7 k: H) T' C& e8 t( m! }; y. s; N代码说明:/ Q2 y# N6 `5 v
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。$ ^5 j8 B, p6 N. U
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。8 j2 h% Y0 f  A9 n# y2 A  \) a
2,segment 本身是很粗糙的,做字幕勉强能用。
$ ]4 G/ S5 E4 w  `# ~3 O3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
1 l6 e/ ?# T2 l# l+ V- M" J4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中7 j3 z) u& ~) |0 K, A, b2 m
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
* B- R$ \# w2 e) T5,model.transcribe 中参数说明:
, t, I/ M0 q7 @5 [/ u你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数1 w8 K- i  w1 o% F, N/ ^0 R/ E
其中
* W0 |' l6 r# [    word_timestamps=True, ( G) r9 u3 d: G1 v
保证了你能拿到 word,否则是拿不到的8 Y# G, w7 M- G0 R8 _
    initial_prompt = "Hello, welcome to my lecture.")7 m2 r4 ]1 q9 @3 ]# r
保证能尽可能准确的断句 punctuation,但是不是决定性的。
) r! z1 z! K+ G  t! N* d$ A+ a其他参数可参考源文件:
  z! q; r* j, i/ y3 X- C; A% Zhttps://github.com/guillaumekln/ ... isper/transcribe.py0 R) Z7 c# U. ?+ g
152 def transcribe(7 U4 @( I! y. \1 t8 F, f
从源文件你可以看到是支持中文的句号断句的。
( @8 l4 w0 W# `1 w' ^  G* K5 O! U' A! _( M
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
/ S% n9 U/ N6 ^. H$ C7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。& n$ C# q7 {1 w6 U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。4 d3 f) O. z8 c4 ?" s$ \

" n$ D; y" n/ u% r6 J7 ^8 C8 A
  i5 s0 F" D. i
5 `( P1 S1 x; Y, S
作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




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