设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 4810|回复: 1
打印 上一主题 下一主题

[信息技术] faster-whisper 更快的语音到文字的识别 ASR

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 : U5 `5 O% {+ t7 J

+ b: ~# T' ^% B/ @4 b借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。- \5 b+ K; F% @$ K7 w- M
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 ?. f) s4 h8 A' U  A----------------------------------------
1 |+ D/ A/ R( q8 p& \, C显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。
9 U4 y7 S6 |# m6 P" r8 N5 q9 N在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% }( @/ L! ]% ]0 r* @2 e8 o: `----------------------------------------" O( U: T+ B& j, P# {% h9 U/ R/ i
https://github.com/guillaumekln/faster-whisper
) U& Y- p4 m3 g( \9 b: ]* p3 B安装如下:' U3 s: Q" _3 [2 P
1, Windows 10
: j% ^8 J4 Y) G2, Python 3.10.11
& ?* H7 @/ s  B' b+ y3 E5 S3, CUDA 12.1
4 W0 S1 l5 _0 C! F4, 在python 3 中安装/ _) I- \2 A% K
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117! t# U# a, n9 }0 s! s( l
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。' L/ Q! N3 G! i' ]6 B
5,pip install -U openai-whisper2 A  Q( j6 r8 F: W
这是向whisper 致敬,可以不装7 a" L& Y' Z1 K: Q$ d
6,pip install faster-whisper
; p* ~9 j' X- V/ v4 H" ]+ y0 T----------------------------------------
7 |/ f: W' L6 C$ U5 D  N. f# D' i5 a' N: Awhisper 我用的命令行,faster-whisper 我用的是python。
/ s! @0 ^# G) w* T- ?下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:- U$ S; g$ v+ D, w+ U

" k6 D9 E6 c( e1 ~/ A( X# N----------------------------------------, a8 h" W8 ~0 R; t7 \

* U  K& E$ s, P  T% mfrom faster_whisper import WhisperModel6 [  \5 N" w0 x) b; [$ o
, ^2 V" x( U1 j5 F- c2 F
model_size = "small"
' k) w. t8 _4 a3 d4 q! V' e8 [) I+ h% `( t  x
model = WhisperModel(model_size, device="cuda", compute_type="int8")% T  A7 Z% q% y. c% i/ f

" W/ Y' @* m" _0 tsegments, info = model.transcribe(
. B" c/ @% G" T& n+ M    sourceFileName,
2 J: g, d$ |8 [. j    beam_size=5,
, ]2 S# \2 k. ], M7 Z- }    language="en",
! T, P) p2 y1 F2 P" e; n" R    task="transcribe",
, b0 @% f) u1 F) b    word_timestamps=True, , S: E! J. ^& W6 p$ Y0 f9 g+ g
    initial_prompt = "Hello, welcome to my lecture.")
/ y( N/ k+ B( r) W  O
( Q) p# ?9 f2 Q7 lfor segment in segments:
9 j. n  a. a5 V! _: a    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))# ]* L. H. x9 i# a1 w- Y, [6 ]3 M

0 W6 {* l! n# L' D$ R& x7 x        for word in segment.words:0 W* c  Q2 l) w
                ! w; u4 M. D  G9 B1 [
----------------------------------------
; P* x: i7 F) t+ j5 S- q6 a1 [) ]* J7 D9 |" C
代码说明:* u1 [) g* X" f* j& W: }/ b. R1 t6 {' L
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。$ l' B& U) k5 `3 L! G3 ~6 ~
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。/ _, O5 \# R/ {# N0 P
2,segment 本身是很粗糙的,做字幕勉强能用。4 {( |: B8 T* g2 J
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。# o: [6 @9 @7 N: `8 r9 `7 I. F) u/ j
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中
" c* b' ~  v1 ^5 c% M* S2 z比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。
8 _7 _. _5 w8 ^7 A( Q& C* ]% C  l# A1 }5,model.transcribe 中参数说明:
3 |6 a% A, m+ @8 V  J你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
* a2 a5 w. z8 Y/ G5 Z$ r) r其中5 W2 c  z% C( o" Z0 s3 T: f/ N
    word_timestamps=True,
( S% _/ q7 r* {1 T4 e2 I保证了你能拿到 word,否则是拿不到的& a4 L) |. i4 i! _, }2 X7 ~  E& g
    initial_prompt = "Hello, welcome to my lecture."), B0 s" o1 x) i# Q: ?/ Y
保证能尽可能准确的断句 punctuation,但是不是决定性的。& N! B3 v4 D7 t9 M  |
其他参数可参考源文件:/ u$ {, ^0 J* U+ F
https://github.com/guillaumekln/ ... isper/transcribe.py
# l$ N( I* a, t, N& N, k& J152 def transcribe(
* g! y: j$ E7 s4 h$ b3 `" p8 B从源文件你可以看到是支持中文的句号断句的。
( f* O) f4 u: p5 L7 D4 j0 Y+ i6 ?0 K" J7 Z* {6 J
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。6 i2 N" K! e4 V' x( R+ d
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
/ E0 [( a) V8 V. G8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
1 \8 @( A  ^+ l9 i: \1 G' _" b# j: L. w$ _

* V+ z$ c! e1 h2 G* S4 G4 E
; a+ G- Z, k* f4 _/ I; G+ S

评分

参与人数 4爱元 +32 收起 理由
蓦然回首 + 8
唐家山 + 4
老票 + 12
老财迷 + 8

查看全部评分

该用户从未签到

沙发
 楼主| 发表于 2023-6-4 11:53:23 | 只看该作者
多谢各位榜爷打赏。
回复 支持 反对

使用道具 举报

手机版|小黑屋|Archiver|网站错误报告|爱吱声   

GMT+8, 2025-9-19 10:28 , Processed in 0.033483 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表