| 
 | 
 
 本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑  
1 Z0 N8 [, D, A& ]$ d# i3 G1 D/ G! F0 D# m, t( I 
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。& i$ v' K* n* U' @. [ 
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。) V2 o# {$ B  D1 f6 i) j0 w 
---------------------------------------- 
' Y' Z9 e% `# D- Y6 k! E显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。 
: ?& p5 q, h" J9 y0 {在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。 
9 P! b3 v9 E! e- ~5 c) A6 R----------------------------------------) g* [6 t  L/ R( O0 e 
https://github.com/guillaumekln/faster-whisper 
( O1 @' R7 K( s安装如下: 
: l3 d5 [0 ?* |$ }* i1, Windows 10 
+ q) R3 n8 j" k+ `" F2, Python 3.10.11 
. A6 G- S, [6 |7 e3, CUDA 12.1 
. [! Y  I( e: b. h; f4, 在python 3 中安装% K5 r9 [- M  G; T; Z& O- A 
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 
* y$ K; S. w$ {* W/ L, K$ G' s1 F2 P0 B这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。 
# y0 Z& W0 _2 B4 e2 X/ B5,pip install -U openai-whisper# v6 Q& f9 x4 s9 C 
这是向whisper 致敬,可以不装 
" R' [' p5 e/ v( e7 J6,pip install faster-whisper: S2 b( x3 Y5 ^/ y 
---------------------------------------- 
! K/ H+ Q$ Z5 U3 l# ?- h) Vwhisper 我用的命令行,faster-whisper 我用的是python。# A& A, u4 h# f3 l0 o, o5 B8 B, C  n$ f 
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码: 
8 T; u. b; n  w, O- W9 m" h) h 
( A/ j$ N9 d& H- L5 Q5 d8 y6 v----------------------------------------$ n+ t& I" I" u* F) ~ 
( \  N2 y# G. I' ]. l 
from faster_whisper import WhisperModel' [# L: s( P: B0 x 
 
1 H* ^6 _( [7 y. d: O. \model_size = "small" 
* `/ N: q% L3 h1 W 
, b1 G% O* [5 c1 [( Smodel = WhisperModel(model_size, device="cuda", compute_type="int8") 
) J" ^( I: e5 v$ M5 g- S# H4 {5 `4 x& k4 x 
segments, info = model.transcribe( 
+ Q& e3 D" \- C: e: K" C. F    sourceFileName,  
' Z" j5 s# T# k    beam_size=5,  
. z- D! h9 v4 K7 E; |# p8 z! L    language="en", ) K$ ]& R1 M7 j3 L; j0 T& w 
    task="transcribe", - L5 T3 J' b# z; K. X0 r$ l4 } 
    word_timestamps=True,  
1 \" }# t  J6 h: G# Z7 M' D  Y    initial_prompt = "Hello, welcome to my lecture.") 
- K, U" q4 ?4 y+ w$ K 
# [0 K# m) W4 Cfor segment in segments: 
# }. @9 Q  @/ x$ t' T$ e1 K- \; f    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))0 ?5 T0 s8 {! |$ c; |6 s. k9 O4 ]$ o 
 
6 j' j" \+ D% s, M# s0 g. k8 s        for word in segment.words: 
+ B3 I* y" g) N1 C$ v$ y                 
- H- H* n3 C6 L1 @0 `7 {  ~----------------------------------------6 m8 M7 H, R9 z. W+ ] 
 
) b% e& n3 x# ^' @$ P2 ^+ ]6 G) Z代码说明: 
5 @5 \! A, y4 J  x1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。% n1 ]$ x0 q9 M6 N4 t 
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。2 y/ L9 z- s; N4 N1 }! G  g 
2,segment 本身是很粗糙的,做字幕勉强能用。 
6 F2 H0 [# Y9 ~; n. y9 h/ A* f0 B3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。; a$ U6 F4 a2 h, ` 
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中 
1 j5 s/ L& h3 ~& N比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 u' f( [: L& f 
5,model.transcribe 中参数说明:2 v' m8 h) v/ t5 W 
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数 
) f# I  E% [3 i2 w  p6 {其中 
' P0 z/ u6 y6 I5 {/ q7 t    word_timestamps=True,  
) y, A( r. {7 l  S保证了你能拿到 word,否则是拿不到的0 Q# ^% N9 u. |; Q3 U 
    initial_prompt = "Hello, welcome to my lecture.") 
; d8 s. I) E! V保证能尽可能准确的断句 punctuation,但是不是决定性的。 
$ c8 y: u- ]5 Q( q3 s0 M7 f其他参数可参考源文件:% n  W) m6 E3 z: J5 x5 x& R. Q* ` 
https://github.com/guillaumekln/ ... isper/transcribe.py 
9 H2 V$ ?9 q/ t) O152 def transcribe( 
1 E8 [% ^2 {) A( m从源文件你可以看到是支持中文的句号断句的。 
9 {, W( S% E4 T5 w 
5 s1 |% Q: r' w8 O9 L% x$ T' U6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。7 _3 u0 c7 [0 ]# L, f$ t! ]5 l 
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。2 i& e9 ?  \  z6 o( v/ z8 w 
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。. O5 h9 `5 U$ M0 c& ^1 F1 Y 
. k# R: W% B5 G* n1 E 
 : E, S, v; R0 Y% L' P3 t7 q0 s5 b- S 
 
$ |  Z! t& R7 \: J |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |