爱吱声

标题: faster-whisper 更快的语音到文字的识别 ASR [打印本页]

作者: nanimarcus    时间: 2023-6-4 02:10
标题: faster-whisper 更快的语音到文字的识别 ASR
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
) V- V6 c$ d% b' C3 k+ {# D" z4 i. G( a' |
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。! j. r, j$ h" ^
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。8 R& @1 ?0 T7 y+ G% a
----------------------------------------( v$ h3 V& V% k6 d! c3 j9 Q
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
& A* b# h* ^  p* h在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。" o1 c5 B% t( ?3 ~( c; T+ s5 i
----------------------------------------
2 i" w0 W/ y: S0 U& @https://github.com/guillaumekln/faster-whisper$ N3 @1 \9 i; x- x! o4 X
安装如下:
  Y' a9 d9 b- h, g+ C  W1, Windows 10; d# t0 x8 o, ^' L
2, Python 3.10.11
$ I/ T0 ~" V. X# z/ H5 @# t5 M3, CUDA 12.17 D' J: @9 Z) Y6 E& j
4, 在python 3 中安装
) w3 b8 r3 t- E% }0 |pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
* h: \! [$ t" v) V这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
: ]$ a& z' m; S  r% j& l5,pip install -U openai-whisper9 q# T6 n- O$ C4 I" ]% l$ b8 y% u" }  I+ e
这是向whisper 致敬,可以不装
" O% [5 U- x* @6,pip install faster-whisper9 Y7 l( W8 {3 v; a/ u
----------------------------------------4 z; s; J% E+ h3 z! |
whisper 我用的命令行,faster-whisper 我用的是python。$ j4 f: ^  B! C2 r! I5 C+ K0 O
下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:/ }/ |1 [9 @! G/ L5 N( |
' O7 x& B+ y/ C& }9 ?* b4 R" g8 }
----------------------------------------
6 {" q2 N+ u/ O  f. W" A6 F) I; r4 ~$ N# ?( d) i6 j
from faster_whisper import WhisperModel8 h1 z: F4 V9 ?1 A' [1 c7 v* o' I

$ G# t; r3 r: J) Gmodel_size = "small"
# w9 [& J: l% Y  K7 W! s
( B+ [, O3 Y; s, fmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
3 g  a. n8 H* y" W6 \! W( H2 Z3 x( J0 h% k' ]8 R6 P7 Z3 j
segments, info = model.transcribe(0 a  T' Y; S. s3 i) |& U% y9 S
    sourceFileName, 3 |* [/ Y. L" C6 G/ {& L
    beam_size=5, 9 d* v! R3 o" |7 X
    language="en", - O2 K. Y3 C6 L# l# ]7 w
    task="transcribe", . s+ G! n/ k7 c6 H
    word_timestamps=True,
& a/ w$ Q  I3 I( K! m# D1 `# y2 ]    initial_prompt = "Hello, welcome to my lecture.")
! u" P: s8 B) w7 q1 ]3 K" P6 s  A' z+ w* V  ^# B* \5 o; ?, j' i' _- ^6 T
for segment in segments:
* N: D- J9 C* L. E# F% ?    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))+ [! Y' `6 f: ~" Q

6 C9 E, f2 @2 y  X* ]# a) V2 B        for word in segment.words:
8 D/ k6 v( y/ b) n: V0 F( I               
, B0 H4 _2 v- n, }----------------------------------------9 v- D/ T( V7 i& w

! F! [: y. V& ]# J+ F. F' P代码说明:
6 Y8 T1 `6 s  d' r6 n$ e1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 d+ O- _5 |1 t: R* D% I( S7 w
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。+ b# q9 O( n) W, \# g
2,segment 本身是很粗糙的,做字幕勉强能用。
# X8 s5 T) M* k3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。5 x0 n6 ]5 r9 |( `4 \$ U
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中% C% c, x  j5 h8 |( q% Y. v
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。  n/ E" ^* e5 l5 ]& s. |
5,model.transcribe 中参数说明:8 X" t0 }7 I  a7 V# w6 ]1 C
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数* O  n- a6 z( C, P4 T( \8 s
其中
1 w9 E# G4 m4 d, u7 {) R9 x& b    word_timestamps=True, 1 _' d5 K0 K9 M' I
保证了你能拿到 word,否则是拿不到的& k) R2 S# E: e# N7 {$ y% A% {3 X8 W
    initial_prompt = "Hello, welcome to my lecture.")
7 K! \0 t! v$ m9 I保证能尽可能准确的断句 punctuation,但是不是决定性的。
# \# _3 ?/ t- l  u其他参数可参考源文件:# u% ]- m& u# \1 U; V
https://github.com/guillaumekln/ ... isper/transcribe.py
3 u( d2 C+ W7 W, X( M8 U$ N152 def transcribe(1 _1 E  H# l0 g0 t" H# o3 [
从源文件你可以看到是支持中文的句号断句的。
, E1 ?8 D; Q+ I% E) h9 h3 H' g
8 O4 u- g) Q4 }+ {% B7 a9 H6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
. L3 s3 Y- d1 }; Q: a: u9 A( p  J; m7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
; [+ d4 C! h6 S, d8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
+ _0 U0 @1 R& c5 X7 J0 U' e3 L
% p4 E+ w0 X2 t; ?
2 c( {3 \2 R  |+ @( N. {7 @* Y9 O. l  G2 i% v/ g: @

作者: nanimarcus    时间: 2023-6-4 11:53
多谢各位榜爷打赏。




欢迎光临 爱吱声 (http://129.226.69.186/bbs/) Powered by Discuz! X3.2