|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
b' h9 r4 e, Y# Y. n9 e. A: m0 H% H. b: Y
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
( y) @1 u2 E4 ^, w/ x$ m8 @效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。, W/ z3 o& y1 r
----------------------------------------: c; a- _* U& r ?
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。9 y( s& f& g; J5 x2 p5 c+ w
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
6 W- X; m9 E% S' H4 q2 _& l. H----------------------------------------8 `: D1 V2 `7 \& z, {
https://github.com/guillaumekln/faster-whisper$ u8 Y: _& r4 D; S3 @4 e$ \2 ~
安装如下:8 S/ h S6 B2 q/ o" _1 c
1, Windows 10
3 C& w1 h0 @1 E6 x" ~8 T2, Python 3.10.11- S6 t9 B2 \5 d# \5 [
3, CUDA 12.1+ g( Z* V, a5 S: \0 A$ l- C
4, 在python 3 中安装
: H6 v$ u, Q2 w$ T+ Npip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117: u, I$ c. x' V+ z( k Y. ?, a
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
8 ^# Z% \. m/ M! U5,pip install -U openai-whisper7 y( G! _4 S( d: w: T
这是向whisper 致敬,可以不装
& j) H! J L! U8 P5 s/ `6,pip install faster-whisper
1 O/ h: O0 w* R----------------------------------------1 _, n6 {& P1 a" ?" D% p
whisper 我用的命令行,faster-whisper 我用的是python。, G! }$ t7 p. M2 y* g
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:: X( v8 k" m2 H
) Y x# x+ t, M/ S9 [
----------------------------------------: J, B3 p% u X9 I7 S, g
4 E/ L) g5 @$ Pfrom faster_whisper import WhisperModel
- P" y- U$ |/ ^! Y) q) A. F" f
5 S. K$ p. n$ k. Z! Emodel_size = "small"4 z$ j: M9 c* v8 x4 W
: m X7 D8 f# B; @/ f6 A* Imodel = WhisperModel(model_size, device="cuda", compute_type="int8")
* T+ s7 Y' x6 Y9 Z. x
3 q) i: h! _/ |2 lsegments, info = model.transcribe(
+ W, l) P. q* k3 O1 _ sourceFileName, 3 F0 b: u: A( x. ?
beam_size=5,
( I- G9 \9 _" g/ Y; X language="en",
% c- q4 L9 E0 c6 A9 g+ N6 X task="transcribe",
5 C: u3 v d+ v word_timestamps=True,
3 V9 @# q/ f! D initial_prompt = "Hello, welcome to my lecture.") `7 s- D: y( l7 x, U! z# _
8 J6 e& [3 c& J6 \5 J$ afor segment in segments:
' `$ m# }- k# [$ }! ?: T5 \- k- P print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))0 `2 _" P3 \9 h0 A8 U- t% t" y1 |: D
) o/ x" x1 m3 ` for word in segment.words:+ a/ |+ V/ E. z! M; R3 R8 p' p' }
" J2 X5 e' t3 U8 B
----------------------------------------- r/ A# n6 j# x$ z0 c) A
: |' x. @+ F/ { Q* h3 _6 C! o
代码说明:
# `" H/ M( o/ P* m: |1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。: U) t. O2 c7 _6 F
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。, b$ f" y$ b0 `+ w- e
2,segment 本身是很粗糙的,做字幕勉强能用。
) H, P1 l3 ?0 v7 W. N3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
, s: ^ ?& n8 q, }. v8 v4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中- s0 D, h& A$ U' [ U# l7 H2 k: h
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。! V, Q2 V& b. u; ^- Q2 m( W( p% X" G
5,model.transcribe 中参数说明:! L6 S% u1 k/ J6 A
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
: _' p1 C( S8 L) n& q7 \, I; U* W9 q, n其中0 O* R* B2 J: w; @7 L- S
word_timestamps=True,
( c; W9 w9 p( Y; a$ Q保证了你能拿到 word,否则是拿不到的( i9 _# v9 j* h: W3 x
initial_prompt = "Hello, welcome to my lecture."). U& U& [; B& h
保证能尽可能准确的断句 punctuation,但是不是决定性的。
5 t5 E! r: f, w- Y- Y其他参数可参考源文件:" p q/ d* N' E7 Y j
https://github.com/guillaumekln/ ... isper/transcribe.py
# g' i- A7 D+ |9 x1 k- N152 def transcribe(2 E9 U* ?. d/ \* F: r# Z( Z
从源文件你可以看到是支持中文的句号断句的。
7 \# y) B- c! Y6 x
. v, V4 M0 ^- \- l6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
* O/ n# B B# {/ Z7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
( y; X+ Y/ S# w6 c8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
9 F; B6 H4 S& a& k" H- @# I
& y9 _4 W: r* Y ; M# a1 U+ i* j: Z2 }9 d4 s3 J& j
8 H g, h* z Z |
评分
-
查看全部评分
|