|
|
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ) H4 L9 G6 U5 n/ R8 R( ? A
. [$ W1 W/ H4 A' A# v
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。( \0 P# k5 V! s, U1 O' h
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。! c* v( c. ]8 \% s$ }
----------------------------------------- g& q- e8 F& g. C, G
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。, {6 k6 w! U& W- a2 _7 x
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
) E" u7 R( Y- K5 W4 [----------------------------------------6 |" y( C. d3 u
https://github.com/guillaumekln/faster-whisper! U7 f) t$ o' S( n/ w/ k0 o% @5 F
安装如下:
" H* |+ b" o) S% A% X3 p0 s1, Windows 10- Q8 a' v4 |5 Q' R1 N
2, Python 3.10.11
2 g$ Y8 I1 z. k" c9 R( D( A3, CUDA 12.1
: h7 e* W; w+ K) b1 `. ^4, 在python 3 中安装
9 G; P7 @$ |; {( j2 y# w- Vpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
# Y" {2 w' x v4 d* @, w这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
( W* u, b4 f# }, _% Q! s5,pip install -U openai-whisper/ }8 Q8 T1 w# z1 a# O8 j6 ?- W" Q
这是向whisper 致敬,可以不装$ H. C' ^+ p- v8 b; n0 J. ?
6,pip install faster-whisper2 p) B0 X! v- Q# q/ r/ X9 l6 I& @
----------------------------------------
9 w9 k, e+ k5 twhisper 我用的命令行,faster-whisper 我用的是python。
6 C. k. L+ q/ Z& _5 N下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
' C& H$ b. ^8 o$ F( w6 l/ d5 g" q9 t# d
----------------------------------------
! q$ M/ `5 c* i. A% c G& e, J! _9 T6 _4 X
from faster_whisper import WhisperModel0 @6 E( ^* e3 ~' w. B* K: e
- y+ z; e% i- [6 g4 `: ~
model_size = "small"
* C9 Z7 c* r. J: p" {1 k: Y; z* Y4 W9 h$ ~9 {0 x! d
model = WhisperModel(model_size, device="cuda", compute_type="int8")
& o6 X/ t1 m0 U$ ~9 Y: |9 m9 U
- \- E8 E9 I2 j% u- J) fsegments, info = model.transcribe( Z/ I4 Y. H2 w1 ?- U
sourceFileName,
+ ]% s4 Q1 ]6 f' { beam_size=5,
% y8 l" |4 j6 @ language="en", % A1 W7 r+ a1 ~, ~
task="transcribe",
% n, ~3 j8 K; n5 E" P3 ~ word_timestamps=True,
/ b0 M% z- K0 ^2 T* b# o$ ~6 s5 H initial_prompt = "Hello, welcome to my lecture.")
" h* D( J4 E2 D; p' m5 l1 z
' `4 r, t$ f. P5 t4 K! ?for segment in segments:
. |7 q h* ^- h7 r) K print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 k3 c4 S( z; x" }4 t a1 a* ]
. t' Y* B8 B4 e for word in segment.words:( {% u; @) B+ R7 y
( W0 V. K' m. `
----------------------------------------; ^& N( e6 E- Y3 P' R) r& S9 n) d
! i/ b$ D0 C9 z
代码说明:
. Q6 h/ }' f5 ^# { j" t1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。3 L- i9 `. K) t
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。( A. i; `' H2 V, m. ^
2,segment 本身是很粗糙的,做字幕勉强能用。! L( c2 [5 d7 A2 s8 r7 s4 B1 A6 W3 j
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
5 f$ \- v% V- p! j$ `; i4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
% z" Z8 S. o' d比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。7 e/ g+ ?4 E- j, O) b8 ?. Z* c6 z5 k
5,model.transcribe 中参数说明:
7 ^% w; @% c7 @- }你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数. I- a9 x/ u! d
其中
' \, ^- i2 ~, L. t word_timestamps=True,
8 e9 v7 v% H8 ]保证了你能拿到 word,否则是拿不到的6 Q. J% A9 r) V0 h, [
initial_prompt = "Hello, welcome to my lecture.")3 W, H. R( r, u& ]2 R3 H
保证能尽可能准确的断句 punctuation,但是不是决定性的。
4 ]" k/ ~$ E+ @/ }( T* r, U其他参数可参考源文件:! E' r$ Z$ n& v4 _9 p
https://github.com/guillaumekln/ ... isper/transcribe.py* W" ]* G% I5 }: K; E: }3 d y3 c
152 def transcribe(
& h9 ^- } Z) b" I从源文件你可以看到是支持中文的句号断句的。
" o1 d2 P z q( f w' X, m0 Y
$ U( J0 @' m1 y) N, ?6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
- X' t. ~* }( j/ ~1 L7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
, D6 C T; C, _. N0 o. `- _8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
4 K: T( t$ M! f3 G8 y2 K! B" ?0 I) {- I+ p% M$ I3 w+ X# S
: Z6 k$ j5 r1 a* E# `
& K2 ]; i6 f% A: ` |
评分
-
查看全部评分
|