|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 9 p/ J8 u; L6 ]( t$ k; d4 b
0 p2 z; j6 i& r2 B0 e1 v- a借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。5 i) ?* e0 E9 x1 {* N& g# ]
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
; R4 M* P: }8 w) I$ { y----------------------------------------$ K7 ]- Y% i- a1 R
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
1 y; k& M0 e( M7 I6 ^0 J在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
- O5 q3 P5 Q' @----------------------------------------1 t) N+ Q# i& \0 N, H* ^% R. C* ]# c2 Z
https://github.com/guillaumekln/faster-whisper: E/ u+ {- ]0 [$ x( B c7 _" X
安装如下:
- T) d m+ W- `% `1, Windows 10# Q1 r' A# P6 W# y
2, Python 3.10.11# Z& P0 G4 [0 ^
3, CUDA 12.17 ]$ b/ [6 m+ R3 A# Y! @' E% @9 c6 @
4, 在python 3 中安装
* B' D# {) i; j+ A' [pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
/ T1 U; \% Y. E这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。1 M1 @# x1 P: g9 O8 y
5,pip install -U openai-whisper# i4 D: r6 y8 ]7 Z+ r9 Y5 Z# l
这是向whisper 致敬,可以不装
0 H S, v" ]+ v5 g6,pip install faster-whisper2 t F8 E3 N) ^6 U3 W6 O& U
----------------------------------------
l$ i; M O2 ?- F; O7 `$ h8 @whisper 我用的命令行,faster-whisper 我用的是python。
t' G2 R$ N( _/ u$ n& H下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:1 a5 d5 @! {+ D3 |' ?8 K' R+ }
2 [+ ~9 m- D3 l----------------------------------------
, \5 t+ B* @4 i) U% p$ v9 s0 P6 K; [. h! I6 @; o
from faster_whisper import WhisperModel
4 w8 ^: V& h# q: [
+ C( _* X6 L% @: U; s& I0 n0 [model_size = "small"0 D. }* T3 [6 z/ N( r8 m: k
% G4 G& q8 A+ t/ t
model = WhisperModel(model_size, device="cuda", compute_type="int8")
1 l; J! O7 D {9 d! Z
1 ~4 h7 u# g- f5 y# M( Z5 hsegments, info = model.transcribe(2 r8 K4 g0 ]& x
sourceFileName,
w& T& ` x2 G: T. G9 `( @& D beam_size=5, e/ M7 L/ x, e& E. O5 Q. e( D
language="en", # O1 _# O- a+ P K( f3 ^( Q
task="transcribe",
( P1 ^( W# B7 q" J' |: p7 ], r word_timestamps=True, * F4 z% B: H8 o, r7 h" o
initial_prompt = "Hello, welcome to my lecture.")1 M6 F" C r# E* X0 u. L
* \8 v1 r1 Z: r+ [. ] }
for segment in segments:
: l4 o. N8 x' K( d2 M8 P print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
. x' w- K s7 Y% @. j! C& k. @
+ `; v# G }' Z/ t I for word in segment.words:" _: ]4 R5 r3 C/ I: S1 q
% R+ W$ b& d2 W0 }8 F c& G& K/ |
----------------------------------------9 V. ]* I, b/ r0 c4 X: P* i
2 e4 z4 `4 W# a代码说明:* l1 w4 r3 {" ~3 s
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。, W- ~& {: T: z7 d7 J% x
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
2 t9 k: T7 f1 n2,segment 本身是很粗糙的,做字幕勉强能用。3 C+ Z7 p5 {0 m$ w" Q+ u" u6 \+ |
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
: W. y8 d0 x' {5 F! I4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
1 G/ u# {- X5 x/ i- E2 E( s( B! Q2 e/ R比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
4 D2 V B' C' @. _; }5,model.transcribe 中参数说明:
P! ~+ c5 V% M9 \你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数" j: g; K; y3 u: Y2 [
其中
7 Y- G( R6 u+ w5 A word_timestamps=True,
& G8 ~& h& A7 W0 M# t; i/ X# e保证了你能拿到 word,否则是拿不到的2 S4 s5 ~9 Q/ b. F9 a2 ]
initial_prompt = "Hello, welcome to my lecture."), d ^2 c: R3 L/ ~9 [- E6 J6 x$ `
保证能尽可能准确的断句 punctuation,但是不是决定性的。$ `' d5 p( {9 Y
其他参数可参考源文件:
q3 d! v8 D' yhttps://github.com/guillaumekln/ ... isper/transcribe.py; _: S' S" P, y0 |" m% W# }
152 def transcribe(
. T( s! @$ R1 ?+ j% b" }% Y- j从源文件你可以看到是支持中文的句号断句的。
- z2 Q* b3 W: n2 w3 W0 Q4 t9 C) z2 U) b3 @# ]% p+ N. b, m
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。4 Y) [& ^9 {( d$ S9 C9 V
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
1 h1 S6 L; [3 p1 k1 ~" J8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
' h7 N# c& l2 L/ _
% y8 @1 V. ]+ g8 y* ^" O # E1 q3 q$ h% j9 n) V5 q, n+ C
+ y9 P5 s$ A q) h- U- u' c |
评分
-
查看全部评分
|