|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 {! S5 Z+ U% Q( L$ R( b4 e& l4 W
+ M8 j x% H: R3 W# F5 w- M借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。7 @, ^( h R. S H
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
' B+ t8 }+ Q9 t6 g1 }----------------------------------------6 T, N. q+ S0 s3 F9 `
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。& W! p3 C* a, |5 [6 s1 {; U
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。) v: n& D% D# F% z. ]
----------------------------------------1 o+ o1 i3 D( ~% v# @
https://github.com/guillaumekln/faster-whisper
5 a" q' P2 F! w ^安装如下:
5 i+ J( D% c4 f: i1, Windows 10
# l8 f# C( e6 M9 a' F; x2, Python 3.10.115 D1 ` c; X( n: X1 d d O
3, CUDA 12.17 X. T5 S! e9 U1 j2 ^. t0 y2 L
4, 在python 3 中安装
. p: f! u4 Y) Z5 s$ X6 c3 {pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
) W; A6 H* \0 E5 n0 ]这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
+ T. H8 M& ]- Y- ]" E7 Y5,pip install -U openai-whisper. A5 w' I, T) }; J6 S @5 x; `, i
这是向whisper 致敬,可以不装
. w+ [2 Q* z/ v' m9 N6,pip install faster-whisper5 m! C) p5 n% E
----------------------------------------
1 Y/ X% H* G u/ @7 e3 ewhisper 我用的命令行,faster-whisper 我用的是python。; _" a# Y4 d) l y1 Z
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ J5 L2 x2 y! X1 d! @& U# w/ h
) X0 N0 J9 {( p----------------------------------------
2 z! p2 j# m7 e" M" ~; _% n% ?5 r" H, o: K' A2 ?$ \% q
from faster_whisper import WhisperModel1 j! ^! W2 g0 C: ~/ y
4 v j! y4 ]9 q V% G1 \model_size = "small"
! N& z& H% z: A1 v8 S- o+ G4 v5 R0 i) R1 F! }- X) e
model = WhisperModel(model_size, device="cuda", compute_type="int8")- p2 S1 Y/ {, S) F: Y
1 n1 c" w) `* U
segments, info = model.transcribe(( C, ~' B6 d/ T+ Q. ? X# ^/ p
sourceFileName, : @2 R% e3 f# [% |
beam_size=5, 3 S3 Q1 }* }6 l1 Y
language="en", % k+ j: _* l, y& U% a% d* G
task="transcribe",
% X/ E- \6 G+ X, Z2 v% K8 o8 P word_timestamps=True,
4 V$ m7 ?" m; q6 N$ p1 P6 ? initial_prompt = "Hello, welcome to my lecture.")% E' h: d* W& b! l7 `
) \' G, |0 |9 T4 C% ?' f4 u- \
for segment in segments:
5 u/ H8 A8 n& [* _1 g2 T O print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
5 {. f; K; O1 G6 m
0 k4 B8 l7 a$ a+ S9 b for word in segment.words:9 D8 ~3 e2 h/ I y! i; ^' u* r
" a3 \9 ^& f8 e( f
----------------------------------------% Y* u, X* ~9 v! `
5 U; q. o4 u; u! J' l4 m$ D: j代码说明:
6 ?/ }) w: G* A! n8 ]& g1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。
5 A# g+ G+ W0 E! O* |但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
_9 l. l/ F. Q7 c8 O5 |- N4 S2,segment 本身是很粗糙的,做字幕勉强能用。) R5 ~) a5 @1 ~0 [/ \! T: }, j& |
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。: z: p! h4 b) v8 O
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中7 ^7 D# T, g& o! m3 N
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。+ R |' `5 X) `% H' T
5,model.transcribe 中参数说明:$ D% c" p6 j# }6 q- X$ j
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数! [' }* _, n3 w: |0 b2 a
其中
" o" j8 q' o+ H3 o! s word_timestamps=True, $ F& a& N( U5 P8 O& P8 Q5 S
保证了你能拿到 word,否则是拿不到的
, B0 Q3 }* T4 C* R/ { initial_prompt = "Hello, welcome to my lecture.")) n, @% ]2 ^, v" t1 g4 r% g* G
保证能尽可能准确的断句 punctuation,但是不是决定性的。/ E2 k% H( h) y2 I- Z& Z' Q3 u
其他参数可参考源文件: H2 n' J8 m" t& V
https://github.com/guillaumekln/ ... isper/transcribe.py
5 I' z' h) P$ \3 e152 def transcribe(/ t$ J8 q+ s, T5 e
从源文件你可以看到是支持中文的句号断句的。
# C. U, U; |$ ]0 j# |
( S! d5 l) h" n) J) ]; A8 K6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
6 n- j0 c+ O; U5 n, l7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。/ x$ }# b& z! i+ V( ~8 o
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
! i7 X5 @: {* s9 u- ^" t8 p$ e; Z
5 P1 i5 u' `' A. r. y
: U; M7 _$ z; v: B$ R$ L, p( b6 X* h& t5 T; X8 j
|
评分
-
查看全部评分
|