设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑
9 A6 S& q, b. g; O5 E- M# f$ g# T- f: ]2 q+ V5 D; Y( o. l, b1 o
借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。
0 a  E9 g/ m! P$ h, ^效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。, f% s" B5 i  y! R
----------------------------------------
" M- Z& k8 E1 B9 K: \! _显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。2 F! [& e% H* [. ?" g4 _& h/ A
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。
% [0 O' o3 q5 q' Y* \( E& o0 w' F----------------------------------------* z$ ]. A' N# F
https://github.com/guillaumekln/faster-whisper
9 `, v9 n' ^5 \0 k! P* C0 V安装如下:+ X  R0 p+ ]) z# X- E; ^5 a
1, Windows 109 Q, R' G+ ~) z& m
2, Python 3.10.11
% f; V2 z% w* L0 @5 N3, CUDA 12.1+ h0 S3 N' |( y6 s. p2 k: X( t2 a
4, 在python 3 中安装
1 P$ s, ]" G! g! v3 v' gpip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117- }8 q8 U2 V. M1 C/ `
这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。
- e8 j4 z9 Z8 C5,pip install -U openai-whisper
* K: z, D! u) W3 U# _6 Q7 i) a这是向whisper 致敬,可以不装
; V( Y9 ]# @* t6,pip install faster-whisper
, P  u/ ^$ A0 g$ S$ L& e----------------------------------------) {2 j# z8 X3 |7 U' q
whisper 我用的命令行,faster-whisper 我用的是python。
5 D0 `1 x/ x1 R下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:0 y4 H' o) p" N" `
4 ]* m  s& H. Y; w1 t' h$ }% ]
----------------------------------------
$ K6 m. z& v5 L1 K% o# o7 {
. y2 V/ U3 j; v/ O; rfrom faster_whisper import WhisperModel
, q4 U  K& A8 @" J! D+ a! A5 N8 |4 a3 }* d
model_size = "small"8 g8 Y( I6 L" z* M+ w$ |2 Z6 v

' M% K$ x. z! m, ^& B$ xmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
+ [* d: q" p, s
4 H# ]. d# b) a  [0 O/ B0 J: B+ qsegments, info = model.transcribe(" T: y7 j( @! J( a: ?7 `
    sourceFileName, 2 ?0 r% S+ o9 n4 v2 v2 C
    beam_size=5, ) E5 w9 g9 R4 x. N
    language="en",
+ E. X( ]/ P, o+ ^4 O' H+ h    task="transcribe", & f* j) C+ @3 O  S4 g9 ^; {# w: P9 z
    word_timestamps=True,
% l' d  N6 t+ Z' }6 {6 q    initial_prompt = "Hello, welcome to my lecture.")
* c" q( C. _5 w) F
: j5 @0 n: k3 l4 \2 Efor segment in segments:
7 ]% N/ o- \' \! D    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
) j( J) e8 i+ R# z$ h# n2 g
4 H  l7 m" m1 B9 D* ^% |4 B        for word in segment.words:
& J. F- u( M# B4 z; U% T* X               
7 R' T; X  ^: l" D0 c. Z----------------------------------------
( X% K4 g$ g1 W$ }6 V4 _) F1 n, Q$ i: x4 O! x1 B
代码说明:
% W7 C, \  `% ^3 O3 G: I1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。6 @6 d, P4 b- \# t9 ?: |
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。! I$ |: c4 A2 T
2,segment 本身是很粗糙的,做字幕勉强能用。8 |  ]* _- d4 k7 d" [* ?# e
3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。' x$ G( z9 S6 _$ F  {9 U
4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中, g, a+ d6 A, ~3 Y- v/ n& q
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。7 D% e7 O, T8 F" G+ `, F6 `% H
5,model.transcribe 中参数说明:' c. U) f/ L) T4 T- y! u
你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数9 @+ H* Z, ~9 _* M+ J
其中. d9 P- P% O" F. ~1 E7 \( c
    word_timestamps=True, % c& p0 ~) W, T6 Q
保证了你能拿到 word,否则是拿不到的$ c# \* _. p& q! h. Q! n
    initial_prompt = "Hello, welcome to my lecture.")
( _+ x) D; ]( _3 K! Q4 I( r/ A! ]保证能尽可能准确的断句 punctuation,但是不是决定性的。
8 e! S3 U: a% R* x其他参数可参考源文件:" m/ ~3 N4 j( q% ?9 F) ~- `& V
https://github.com/guillaumekln/ ... isper/transcribe.py: N" I+ a/ z) X% K' V, a* O
152 def transcribe(
0 q( `4 V; ?) }- W从源文件你可以看到是支持中文的句号断句的。# S1 @( E: L" o. x/ V) |8 p
5 n# T3 \* R) E- l6 q: D( Z
6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
" q9 f" O) ^0 q$ u! N" f7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。
* k' n( }3 i& h! E8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。
- r4 T% v; C: J+ z6 H$ q5 _6 p. f' a0 @$ h4 h( [. \% K% x! ~( R
2 K* ^5 @* L0 w6 I
3 a: j  k& Q* I

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2026-7-14 11:56 , Processed in 0.060977 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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