设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 ! K# l2 y- m% |! D7 ~5 @

4 i0 H9 k& X4 M( {; `" u3 t) a借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。' C; {% Q: m; \, r( ^
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。
2 ?+ k7 N7 |  |. `0 W2 L# v----------------------------------------6 u! Q2 v5 n9 ~4 v  U! q3 `
显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。4 c0 U& J3 u$ b, D8 Y1 c% {# M& C
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% ^! G+ G# @, `0 n) b% A" D----------------------------------------
4 b2 x: M5 o& D3 @& k9 bhttps://github.com/guillaumekln/faster-whisper* E- Y: i  q# ?8 n* P
安装如下:
- M7 [3 N! _0 H( t! u4 ]1, Windows 10
; P. L* A; t1 n) M3 q- v. H6 s2, Python 3.10.11  ?$ j" c. S9 h$ a/ H; x3 z+ Q
3, CUDA 12.1) i$ |6 B4 \! }7 W, w* [( F# ?5 |% e
4, 在python 3 中安装5 @, ~6 N3 E1 ~
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
" ~7 |$ S  n9 N这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。9 C$ {' W4 k5 B9 _4 s# L0 ]) Y+ ]$ I
5,pip install -U openai-whisper
$ `' @% H6 x" a这是向whisper 致敬,可以不装
; ]! `# Y8 ]! k: F$ M6,pip install faster-whisper
( V9 u0 Y3 i) o----------------------------------------
6 L9 ~- J/ y7 |! \( P2 \- A7 \+ Awhisper 我用的命令行,faster-whisper 我用的是python。
: K$ ]5 |( ?1 Y+ C  Y2 K下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:
" |8 c7 f0 M: t- L" S
, m1 z& D, H% v( u----------------------------------------! k2 o: O- I( z3 h. Q5 p1 f
: I+ }+ n! y% k+ I  _5 E$ M$ D
from faster_whisper import WhisperModel9 j7 C" p2 \1 K/ [

4 U1 p2 [* F  I/ k( C8 \model_size = "small"
: ?% M+ D+ N" t! ]
" h' T' X8 a- K: L* ^  l' emodel = WhisperModel(model_size, device="cuda", compute_type="int8")' M  k0 W8 P# ~$ S: @

0 R5 q! Y6 \9 ]) P. @/ w% j5 tsegments, info = model.transcribe(/ u# B( W* B, L+ `$ X8 w
    sourceFileName,
8 |1 D3 {5 v- S) }  [    beam_size=5,
: V9 ]( N& _- D6 g( {5 A9 U# y5 D    language="en",
) I% `. }9 x$ D# @    task="transcribe", 0 o& }0 _& f: v% u0 w5 y
    word_timestamps=True, 5 K  S# B: k0 o# E2 Z5 ^. l0 _" ^" `
    initial_prompt = "Hello, welcome to my lecture.")
7 g" }. C# A! t4 g
1 A: a9 U: s+ b+ ]for segment in segments:
2 Z5 F* B9 G/ W; u  F# F    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) Z$ k# O' v+ b2 K
6 V2 C+ @( g1 Y4 V. `        for word in segment.words:6 Y  R0 \$ T5 {7 w) K
               
( Y: @3 P& M4 M: s----------------------------------------$ R% t5 f+ J% Y  s1 _

) a6 j( Q: f4 ^( {6 E) K% U3 m代码说明:
' T- L  S1 i! V: j/ z9 ^3 l3 q3 c1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。7 G( d  p, f5 ]  ?
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。# R* S* _7 k$ T! \- {8 S' E/ D: k
2,segment 本身是很粗糙的,做字幕勉强能用。4 M6 ?2 Z$ l0 i) G/ b3 ]
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。, B! P* O, U# \* n- }7 k' a$ Z
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中5 Z! l4 w1 S) Z" Q( c
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。: H! ~  o6 u& Z; a9 l# b
5,model.transcribe 中参数说明:! u5 D7 T. H) J
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数
& h4 w1 H; J; P4 e1 _/ f其中3 ~' b8 b0 B, @. s; u8 `% n
    word_timestamps=True,
( o* H  i; z8 r2 w, Q5 ^1 A* W保证了你能拿到 word,否则是拿不到的, d; P% l% ]" p% }; w9 P1 _
    initial_prompt = "Hello, welcome to my lecture.")
/ f7 Z5 ]" C" L: a- k保证能尽可能准确的断句 punctuation,但是不是决定性的。0 s  _. v- F; a7 {) \
其他参数可参考源文件:
+ X) ?0 B+ E9 B7 T" i& uhttps://github.com/guillaumekln/ ... isper/transcribe.py; B/ D- W) z2 W. \
152 def transcribe(/ w  p: p5 [+ d5 F$ {" {
从源文件你可以看到是支持中文的句号断句的。: K1 n1 N" W& n+ t( N- h0 l

: O$ I* ^' w/ K: y% m" s) b: q6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。# ^' E2 p; M+ m/ }# R9 P2 I
7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
# f9 F+ Q# u/ {6 J, u8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
* j/ f9 {0 s# i3 ~% n  ?2 Q( y$ W1 V% ^$ i( {: _) I! S. u
; Y7 q6 P1 w4 Q) F' j3 @- d
! c; K+ p9 a; v5 q

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-3-4 02:31 , Processed in 0.054191 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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