爱吱声
标题:
faster-whisper 更快的语音到文字的识别 ASR
[打印本页]
作者:
nanimarcus
时间:
2023-6-4 02:10
标题:
faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
5 c8 z r, C* A t+ K0 c3 f
- f" t% w2 k" s2 X& ?' @. I- ?6 h9 Z: o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
/ }: o- l4 N* N8 E
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
f+ b# w4 l! w4 I) S: Q
----------------------------------------
' e/ w9 l. l# X' L# t: W+ @5 P: d- i
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
0 Z7 f1 ~; r2 R9 A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
2 i7 e$ o- x2 k; Z7 ~( Q
----------------------------------------
( C- t9 B1 L" |3 h: d# |' a' r
https://github.com/guillaumekln/faster-whisper
+ l: i& Q K' {, B2 k
安装如下:
1 E: F0 T! {4 t2 b; G
1, Windows 10
' w3 ]/ v: i4 Z9 v5 P
2, Python 3.10.11
! U2 ~7 M0 m5 L7 S- j @
3, CUDA 12.1
' A2 i( Z" {7 T+ G1 j5 h
4, 在python 3 中安装
1 ]$ f( E( l$ [& `. R" g
pip install setuptools-rust torch torchvision torchaudio --extra-index-url
https://download.pytorch.org/whl/cu117
3 H0 C: I7 f/ M- V
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
& }% |9 c1 ]1 |0 { K# L
5,pip install -U openai-whisper
A4 @3 g i {- a, X/ ^
这是向whisper 致敬,可以不装
% J: ?1 R8 m: P) w& r+ Y0 D
6,pip install faster-whisper
9 c& z# P, ~8 A5 w
----------------------------------------
$ _' n& U/ _9 a; J/ E$ D X; y
whisper 我用的命令行,faster-whisper 我用的是python。
4 @2 h+ d v" W3 R4 G
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
; B: W' v) z# W
& M% J7 {* q9 ?5 e
----------------------------------------
; C5 I& a. t, ^/ S5 j; R8 I
( ^$ ^* o3 F" s- A8 l( M
from faster_whisper import WhisperModel
7 z% S* w* ~4 ^8 H2 {
9 L( w% K: @- a! U5 q4 G% [( [
model_size = "small"
1 W/ b- n4 H, H9 L" o" u, T
4 U2 V# O$ f7 `) {% e
model = WhisperModel(model_size, device="cuda", compute_type="int8")
6 h7 p7 a- [! {- Q* [- z
r3 C( L* k! E1 a1 i0 g2 t
segments, info = model.transcribe(
/ F6 T+ R4 D0 }6 x3 s, v
sourceFileName,
9 E- M+ x0 D8 v! A
beam_size=5,
/ a2 L; u' W4 T8 W5 l. ]
language="en",
. h) V( ^0 e& x
task="transcribe",
3 b: T5 f9 i: d, G; R
word_timestamps=True,
% F& v7 t. j0 r
initial_prompt = "Hello, welcome to my lecture.")
2 C% _! N, S \( U, y4 M0 e2 r
* K. R1 p% {6 C7 z n( l1 n0 ]# x
for segment in segments:
3 g$ w; h) n0 F7 ~0 r+ U6 S- W" ?9 p0 A
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
( u! h7 ?! {2 q3 s
3 E0 v0 Q. h9 V+ s5 _3 W3 B; y
for word in segment.words:
+ K. i4 _& n, ?2 w7 p/ Z4 y6 U) K$ K
- B# n& P" a1 f1 h
----------------------------------------
) C# ]; j5 {9 T3 O& i
, [5 S/ u* L% H1 }& @
代码说明:
+ u9 j$ V9 ^! y/ F# U- A+ H3 I; ^
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
{* h N4 z: O
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
) A) S4 [6 `" h: D" c( o* M& P+ L# h
2,segment 本身是很粗糙的,做字幕勉强能用。
) L+ i/ M4 u" }( F( j3 y
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
& u7 P( T% k, g
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% L( I1 w4 D4 D9 r6 S9 j) c
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
3 X$ u% b( I. M
5,model.transcribe 中参数说明:
; s2 U1 H/ z, w6 C+ C( i
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
' t0 L% |) a6 \
其中
! n; j# z0 m: d& Z
word_timestamps=True,
! p, f+ r6 |: l4 a9 c. K
保证了你能拿到 word,否则是拿不到的
8 x5 [& z Y7 ?+ {5 F) ~9 G
initial_prompt = "Hello, welcome to my lecture.")
) B" ?2 b, ?1 J, p; i) z/ j3 m
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 Z( A* C4 L, w# B9 R/ X
其他参数可参考源文件:
/ ?5 A; b$ f. l3 |
https://github.com/guillaumekln/ ... isper/transcribe.py
, |3 Y8 t3 t. W1 S& r) d3 H
152 def transcribe(
. ~4 v+ A; z+ T: e5 Q) w
从源文件你可以看到是支持中文的句号断句的。
. t8 L' J' Q' g( |
# |" K e+ Z# v9 W0 S/ S
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
7 z& b; K2 h; J! k+ `
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
2 W* Z4 } T9 Q x! ~# T% c! Z' e
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
; `0 r7 e; s- i( f; Y+ q- N
6 h& R) A. O* d3 j. S4 `
, R% J) ]# E( Y% Z7 K& ?% k7 Y
7 J& g8 c0 O9 _1 v6 v. l
作者:
nanimarcus
时间:
2023-6-4 11:53
多谢各位榜爷打赏。
欢迎光临 爱吱声 (http://129.226.69.186/bbs/)
Powered by Discuz! X3.2