|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ( W. g9 H' `( ]: i. _& [ f
7 e% |" j2 f! }- H; F- t借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。* z5 D M# x: l' J
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。0 Z& `8 o3 \4 P0 W; E; ~9 S& B
----------------------------------------- r" g9 x, L& X) U
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
! k/ z" _# T( N. O在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。1 E3 u6 ?$ g4 u3 G& d. |
----------------------------------------
8 o* F' G7 m6 G: k6 R7 \7 v9 ?https://github.com/guillaumekln/faster-whisper, A" R X2 [, |& h8 m# A0 a% f
安装如下:
5 h& ` b. n7 T6 h8 \1, Windows 103 n5 N6 }4 h& r& G& y& e$ v
2, Python 3.10.11
/ N! e! w- e$ q9 K. |" ^9 y3, CUDA 12.1; I- ^1 @/ s9 e, s
4, 在python 3 中安装
7 L$ S# \( g4 z2 }; @: {9 ~pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
5 j6 M; O: I' p+ a0 q7 w$ k这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
! D5 `4 m/ L" X: C8 q! f2 l7 `5,pip install -U openai-whisper
! t! ?) r: T6 p) h: u, m这是向whisper 致敬,可以不装
0 y' p8 j/ ], Z h& k9 A# o6,pip install faster-whisper
- V( z0 O% C* V7 w( Y----------------------------------------( a4 p9 I5 g7 A& }
whisper 我用的命令行,faster-whisper 我用的是python。
Y6 _! m& Y5 y) e( }8 P下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
5 P4 e$ R4 [6 K4 A' X7 J0 T1 N, S2 c0 {6 f5 i; W
----------------------------------------4 k( `2 c! \3 d' h( h* ~
# l7 A( ^0 ~* A
from faster_whisper import WhisperModel/ t' V$ q( _5 @1 W
; Z M8 l8 \ z4 T0 ^7 Bmodel_size = "small"
. A9 T* z$ b" }* X+ C8 z8 Y- @* w" H! A5 a1 q
model = WhisperModel(model_size, device="cuda", compute_type="int8")
% Y* j/ _) D& E, N B1 i: I0 Z' L% c( h4 G& M
segments, info = model.transcribe(3 Q- }3 u$ F& l
sourceFileName, # j" }* V. r! }7 P& [
beam_size=5,
8 r3 s2 b k4 |5 Z! u language="en",
( v0 H, |0 L2 T! C task="transcribe", : x3 S* N. [! k @* I2 N6 P
word_timestamps=True,
* E2 O" d/ P+ M initial_prompt = "Hello, welcome to my lecture.")
! V) _! s8 N; w* h) ^
3 X4 s9 Y& \! s3 j S/ b6 [for segment in segments:
' h# C U1 W* e, ^9 J" \7 F print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
! u7 h$ V! \# n$ n
9 m7 K( l/ ~/ r2 c+ [ for word in segment.words:
: |0 r2 |! [/ M* d1 E 7 G: G4 L5 i7 E& j4 j
----------------------------------------
" D7 v: V! ? w( M7 i% ~1 D- J: I8 ?4 {& P9 {( i. b
代码说明:" x3 R- u3 s" n3 l" y6 m4 X
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。. ~9 Y. O7 ^0 Z3 ~8 i( J
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。
) A3 k& A+ A$ K2,segment 本身是很粗糙的,做字幕勉强能用。9 n8 v4 P& d$ C' \$ A# y# l
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。( C8 F2 @; d2 N* l
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中! l* C& F# k; _, e; M* b* N
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。6 e) A1 T- X6 L7 S
5,model.transcribe 中参数说明:* b Z8 |& l! ]/ Q3 v; F4 S0 q
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
; ]$ p$ k* y; n" I! T: O其中
8 a* Z# S) _3 p word_timestamps=True,
2 f8 A& e: h8 d+ w保证了你能拿到 word,否则是拿不到的
, d6 g ?* N' d& e. K4 C( } initial_prompt = "Hello, welcome to my lecture.")
& r- ]9 C* L! q- w保证能尽可能准确的断句 punctuation,但是不是决定性的。
$ M* O" L* \3 e+ P; F其他参数可参考源文件:
! D$ `$ |4 A4 I4 F7 ihttps://github.com/guillaumekln/ ... isper/transcribe.py
% x- e$ u) Y# R& u) x152 def transcribe(9 n4 h! S1 y9 ?; o
从源文件你可以看到是支持中文的句号断句的。
# `" T8 a" V+ {: {/ I: T9 F
# r- q& u8 Y' n5 i1 x7 Q7 Q J) b6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
}$ N; y8 X J1 E( {) [3 [7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。; ~# n7 V4 g, t) U
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 }6 H; q4 b( s+ X( k# m- L
# c* i. i/ t2 z, Q: Z
, K( f8 F/ j7 u" M; t/ r
8 @( e( h3 e C& Z+ t |
评分
-
查看全部评分
|