爱吱声

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

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ! v( _, x+ k8 [3 n, x- U* q" A
" t8 u" q. `; `- d* U/ j
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
1 e( v2 U! `+ A, T效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。2 V2 A- |+ s$ l6 G+ I  a6 F1 F
----------------------------------------
# `# J- H* w" @, i2 x# Q3 u# e. D显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 J# \1 O* |4 K$ W9 X
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。: r; d, C6 E4 _1 J& k
----------------------------------------& U1 ?6 U5 a* N
https://github.com/guillaumekln/faster-whisper' @+ [4 D. H. V7 X, E
安装如下:. u1 Z4 _0 F" J% C& y0 {: `
1, Windows 10! k' z9 I; S2 I1 L  z- y
2, Python 3.10.11( D" H6 E! D, Q1 C2 Q
3, CUDA 12.1) W, A( E( {0 F3 b( j
4, 在python 3 中安装8 S. b  G7 W" F0 Y0 \# Q( O, t
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117* X$ B3 N' X) H" g
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。& p* Z1 z% o8 G6 a: w
5,pip install -U openai-whisper
1 K7 c+ z6 o1 p这是向whisper 致敬,可以不装0 G4 {# m/ s; Z- ?" N2 z
6,pip install faster-whisper
3 D$ n$ j- |3 I6 A  I/ _1 \----------------------------------------! f* D! O. q% l3 Q
whisper 我用的命令行,faster-whisper 我用的是python。
. U) }+ l7 R) `4 g. c6 K6 T下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:7 z- [2 R$ t. w2 a6 a: x& e
# X. r7 }- J  |6 A
----------------------------------------7 O, s5 H& Y1 L- ]8 r

5 ]7 y6 B# ?2 p& _7 }9 @! U7 |+ z+ [, E# J: ofrom faster_whisper import WhisperModel
# ~7 |; C  Q( k; [2 L2 V2 T  @' [2 T
model_size = "small"/ c6 K; U/ z! ?: h% d+ |( d2 ~
4 ~, K9 i; z7 v& h9 [
model = WhisperModel(model_size, device="cuda", compute_type="int8")
- _6 D' i. S  i) K" x+ @9 y% S
% E/ u+ A0 E0 ksegments, info = model.transcribe(. H% X4 X8 n% \
    sourceFileName,   X8 g& I+ I' a/ i6 T
    beam_size=5, " j( |% f  S( ?, A/ b0 R: S
    language="en", ; w4 e4 E5 t" D6 [/ j
    task="transcribe",
* @* t: w" {4 ?/ F2 J" K    word_timestamps=True,
. l3 P& l& x+ R9 K2 N  K    initial_prompt = "Hello, welcome to my lecture.")
) F4 c% ]0 O4 h- {- e( {5 m+ J: N- `* `& z
for segment in segments:% c/ x3 V7 t$ c1 u5 W* j
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
- C! M& B  p( U) p5 g. z
- b& t0 X3 J6 E' V, Y, ^        for word in segment.words:# L9 u- Y) R8 N5 [# h
               
9 V' t7 n( T& _# o----------------------------------------! U6 ^( q- F1 x4 E' u0 }7 a' E
1 I* E. s, n" @, \$ P: e
代码说明:
$ g% q" s& S. V- ^. H9 p1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。3 Z& x/ q6 P4 G9 \  m
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。; D# p/ F8 W" a  q6 Q
2,segment 本身是很粗糙的,做字幕勉强能用。: [( M0 \5 c5 W3 O  H3 q6 D
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
2 {( C9 M/ j: I9 M# r5 b$ Z" u4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
3 k% ~! J1 n; g# L比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
# X& i7 J' y* B, ^) O5,model.transcribe 中参数说明:' X8 [, @& a1 G% v# X1 y7 W
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数7 J, S) s5 `" m" j! j' J. _# L
其中
/ Z3 \4 S+ A$ P    word_timestamps=True,
6 u' ?% M+ i$ M+ T) {保证了你能拿到 word,否则是拿不到的
1 S  t- A4 g" k3 y* r* \* [    initial_prompt = "Hello, welcome to my lecture.")) }6 o3 o( e/ V. U0 u. f/ w0 q# U
保证能尽可能准确的断句 punctuation,但是不是决定性的。
: |: l7 W4 F; z: ]1 T6 ~其他参数可参考源文件:9 E9 F$ v8 K+ f2 }6 z/ `5 U- D6 l
https://github.com/guillaumekln/ ... isper/transcribe.py& _1 \# G8 @* m
152 def transcribe(
4 K, W3 ^: ], L  z  W* E从源文件你可以看到是支持中文的句号断句的。
1 Z* t/ i5 K) m0 [: U3 u, F9 F5 l% P/ o5 a
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
( ?1 [. l. h4 J* g) b# B7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
7 l1 i4 R5 X  W; @# R6 N# y8 z% J8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
2 U7 B# E: f; ?* [+ ?7 b7 C  U9 e3 j, t3 {; o6 W1 G9 T; K8 J, W! D% {
( i  M4 l% B. w/ f0 I1 j; x; A
2 K$ n% g( R% {# N! T  B

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




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