|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
& a) ?/ F, N# B+ G% m- |: ]) \6 H" J2 X0 X( o) F
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
3 ^2 v! Q/ t2 Y3 C) K! J2 E效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
) N, o7 n# }* x9 Z0 E- q# z----------------------------------------
: r( ~/ h& D' I$ T% |# E显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
4 A+ r& V) W9 a8 s在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
# F0 f+ N8 p* Q% E----------------------------------------
$ v1 l% ~* B6 ? G6 ?# b& c3 k- shttps://github.com/guillaumekln/faster-whisper* t# K. O( M) [
安装如下:+ G. B `% [# C: V/ }7 s% C
1, Windows 10' j/ d& p% y2 C: @1 M0 W8 s
2, Python 3.10.11
T4 A+ X3 w- t1 S9 Y8 r3, CUDA 12.1 ^# E# A' v* h+ y( k
4, 在python 3 中安装
3 W4 O4 y+ T; s) kpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
. b: Z. i- V; {这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
+ _! _8 D8 W' C3 k% F. d& e% I5,pip install -U openai-whisper7 J3 s1 A: s, }, F$ q
这是向whisper 致敬,可以不装4 w$ [. ~: `) x: u! T5 e# u5 e6 R; u
6,pip install faster-whisper
: ]5 ]3 o; C4 |# D3 G- Y----------------------------------------
# o% M5 n' N0 n5 {. G/ J0 y6 bwhisper 我用的命令行,faster-whisper 我用的是python。
! P4 ^1 f ~: l P' |7 `下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
2 c6 ? g) t: q9 q- S! K X# D/ K- G: Z# B
----------------------------------------: a5 C# T# H- i
9 W. E3 c2 `( y* w3 W/ D: T
from faster_whisper import WhisperModel
2 e* F. z3 _0 t! J6 P! [6 i) |% j1 y1 r
model_size = "small"
9 R) ^2 b- Y0 _. g) |- j
9 y/ K) U+ s" `4 Ymodel = WhisperModel(model_size, device="cuda", compute_type="int8")
0 l' v6 m: ~$ g) Y
) M- t8 [3 w+ Y6 ~- t) ]: }, Usegments, info = model.transcribe() r& L `3 t- U
sourceFileName, * z9 K0 a* Q. L# h8 ~
beam_size=5,
6 }; @" `1 F7 s( L language="en",
+ W5 u3 I; U$ u) [ task="transcribe",
( q8 q, s* K$ Y. z) J2 n# E word_timestamps=True,
# Q, J- G! _1 m+ y initial_prompt = "Hello, welcome to my lecture.")
8 d: @) E+ @& @' P
( K0 m5 H p( ]for segment in segments:" ~4 P, N, w5 B4 B
print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
$ H5 Y$ i, N" z# Z9 b! q# X$ u& ^8 ~# P; n* K" f
for word in segment.words:4 P% o) k% e# J$ ^9 _1 t
# F) ]! K1 a, D' Y: T- C6 W----------------------------------------- d* y4 w+ T$ d
! F" f4 S, U* L2 l/ y
代码说明:6 _5 M* T# {* [3 ~1 Y
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
' ]' I6 c# u2 ~8 p但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。$ H7 w) M( l2 ]" `
2,segment 本身是很粗糙的,做字幕勉强能用。7 O, D# h/ ?4 x' l
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。( ?! B8 V8 i2 n8 I! ]
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
& ?3 O( Y' ` M5 h2 X比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。- Y8 ^$ Z: S p6 T3 p
5,model.transcribe 中参数说明:: L( Y! n6 Z- N* I
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数9 M& p# k q1 _/ t' ]7 t
其中5 r/ g) D1 c3 h' B
word_timestamps=True,
! I' y- F' Q& A保证了你能拿到 word,否则是拿不到的4 V9 s2 H, v4 v6 V
initial_prompt = "Hello, welcome to my lecture.")
9 `& V) C% |* B8 @0 v保证能尽可能准确的断句 punctuation,但是不是决定性的。
2 A. K2 I, X) H( p其他参数可参考源文件:
) ?7 b; Z- m5 Phttps://github.com/guillaumekln/ ... isper/transcribe.py0 q7 f- U) \! ?. [: s
152 def transcribe(
0 ]- P+ q: B7 }; F3 j. G从源文件你可以看到是支持中文的句号断句的。, y" m6 N' k* Y8 `3 U S
. ?# L. e- c2 p/ L
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
5 M0 [. D. N$ W+ a7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 R4 x) f" Y6 I8 e. v* v5 S& B" U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。' d7 S7 x0 O0 y8 M1 ~/ M
^- h$ n5 N# k: N3 i0 {5 ?' S8 X9 A
: ?. B' }7 m6 `3 B. H8 Z
- _ L" q4 W! R) R |
评分
-
查看全部评分
|