设为首页收藏本站

爱吱声

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

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

[复制链接]

该用户从未签到

跳转到指定楼层
楼主
 楼主| 发表于 2023-6-4 02:10:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nanimarcus 于 2023-6-4 02:24 编辑 + f/ ~. J5 g5 P- X

2 \' t5 K% \8 Z借着 chatGPT 这股热潮研究了一下 Whisper,学名叫 automatic speech recognition (ASR) ,就是转换声音到文字的。8 W& z- ^( y& F* ^0 Z
效果我是很满意的,唯一不满的是速度,在六年前的主流显卡上基本上是一倍速,基本上只用在自己特别喜欢的媒体文件上了。* s0 F6 I8 @( u
----------------------------------------
. j$ p; x3 X" p/ F显然不满意的不是我一个,活雷锋很快就出来了,名字很谦虚也很霸气 faster-whisper。% c. A: x, s( o6 e' P8 M
在六年前主力显卡3G内存上,model small,能跑到12倍速,这个是相当满意了。6 M/ F! f. m6 v/ |& a, {6 x1 d2 {
----------------------------------------
0 }) A2 E3 T" s% D1 whttps://github.com/guillaumekln/faster-whisper/ V- a& L. n( ^4 P: Z
安装如下:, n; @2 e, i: s/ |  C3 F9 u
1, Windows 10
. m! g2 l4 v( v% Z  A' X2, Python 3.10.111 ~: T0 e5 i& j0 r, B! b0 `$ V
3, CUDA 12.1
1 w7 z2 i" O7 T# C& F$ y! H4, 在python 3 中安装( _/ w. p. D1 {
pip install setuptools-rust torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
- H' O' O; G6 h, w这一步最后一个安装文件 cu117-cp310-cp310-win_amd64.whl 大小2343.6 MB,如果没显示,你得检查一下你的环境。5 V  r$ ?6 ^1 [( K9 Q
5,pip install -U openai-whisper
# e" x0 V9 ?9 p( U4 o) ^4 @这是向whisper 致敬,可以不装4 L, f2 u  v; \! Q. R
6,pip install faster-whisper/ I( Z' [" p7 W% `; d* ~; a- F
----------------------------------------4 [+ U0 J1 G' H# G% Y8 B1 g( `
whisper 我用的命令行,faster-whisper 我用的是python。
( G# s, n9 [- _2 E3 z& P8 V6 B6 ~下面给出了部分参考代码,根据主页上的参考代码我做了修改,但这个不是能运行的代码:( ]/ ~) a- A# L3 l, u
/ k; F% @0 {2 D6 n) ], _
----------------------------------------7 Q( x/ i6 t6 j3 b1 h5 J
# E" K& h  h: _' @
from faster_whisper import WhisperModel
* ^6 o. V( g: F' Z! r
, F$ {$ x0 P& U- W- b% tmodel_size = "small"9 s/ `- v3 ?! r3 p  Q  m( p3 Z! F

8 n& e4 X0 w9 i3 I( Wmodel = WhisperModel(model_size, device="cuda", compute_type="int8")
  `4 f; I: |# E# d7 a" |
3 U4 S3 C5 c5 _. x! N/ Jsegments, info = model.transcribe(' Z! A3 m: Q1 B7 E
    sourceFileName,
. x5 K( z+ j  U5 Y. d    beam_size=5, 2 |+ C5 m1 [9 p9 p4 _# G. v
    language="en",
, w) h2 q. b( R. D: ]" c. s# A% c    task="transcribe",
  }4 `3 ?" W. f+ i% Y' X    word_timestamps=True, . @, F! ]5 L3 I0 n& k) H
    initial_prompt = "Hello, welcome to my lecture.")
, t6 Y4 q1 Z! v+ d% ?3 t* C1 @3 A4 g3 o9 \/ g! r
for segment in segments:+ S. V; E8 a! Y, `3 O$ M
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))3 O! o3 K- H5 k7 s
8 i* a7 C6 M1 h) l, B5 B
        for word in segment.words:
! c  x# ^' Q2 J+ J" }5 O" K                6 j3 x2 Z; J( r8 g& U3 P! t7 L
----------------------------------------0 B7 S) G/ W5 q" Q3 ?& d8 g

/ O6 U4 U9 T# Y+ W- P代码说明:9 J8 r3 l9 q& K+ a, i
1,model.transcribe 只是建立了模型,并没有运行,运行 是从 for segment in segments: 这一句开始的。; t4 }+ K' p. E. C5 N! F  O
但是这一步很重要(废话),我的程序有时候会无征兆退出就是在这一步,没有任何错误信息,倒是Windows 侦测到,但也没给出有意义的信息。& M! H, H+ e" D2 d6 g9 w( p& T8 ]5 f
2,segment 本身是很粗糙的,做字幕勉强能用。
) O& Y5 z2 I$ E* L0 o- s( H% V: B3,word 才是真正的精确控制的,本身带时间轴,所以要做比较好的字幕,必须用到word。
- p4 J/ f' S& U$ d' q9 v1 `" W4,word 里面是包含标点符号的,也就是说标点符号不是独立的,是附着在前一个word中0 i* E2 S3 s) D$ ~
比如 "faster." 这个句号是和前一个单词 faster 放在同一个 word 里面的。! Y2 G: p2 j1 l: [$ L
5,model.transcribe 中参数说明:
+ W+ o1 n! \1 D9 j  P你要是对 whisper 的参数有所了解的话,基本上这些参数就是对应whisper 的参数- M. ]5 Y* n3 _
其中
+ ^* `% L( |* ^6 s  t    word_timestamps=True, 2 f& O  m, I! N$ U& C  ]! X
保证了你能拿到 word,否则是拿不到的+ F% F" C$ i4 }; a1 r' i9 x
    initial_prompt = "Hello, welcome to my lecture.")
7 z, ^. a# W" F2 n  Q$ c) {保证能尽可能准确的断句 punctuation,但是不是决定性的。
9 Z( T) s& K$ ?5 N4 p' u其他参数可参考源文件:$ Z- U; _$ L, Y4 O+ O" F1 ^
https://github.com/guillaumekln/ ... isper/transcribe.py
# v6 `  x" b2 z9 }152 def transcribe(
1 _/ l" ^1 R6 l1 j  {从源文件你可以看到是支持中文的句号断句的。
% t; i$ u7 \+ N7 ^3 g
/ u# B) ~4 B8 z% V6 p9 v  h6,如果要尽可能准确的 punctuation,根本办法是用比较大的模型 medium,或者更大。
) O9 x, E* g# _  t! Q7,我自己观察一个小时之内可以保证断句准确,再长就很可能不行,所以我的办法是切割文件到一个小时,识别后再聚合,效果不错。1 W- R7 ^* G3 k! g# _
8,faster-whisper 会上传一些信息,检测到不停的使用网络,曾经有一次代码出错就是访问网络,你要是有洁癖就把网络暂时给关了。; e  c' A1 ]  g' o1 K

& Z5 s5 P3 J1 y) ]4 |' h" x& Q + `* X% }6 z, \2 x& P0 D
" ?$ j# h5 Y# d4 D# z: [

评分

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

查看全部评分

该用户从未签到

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

使用道具 举报

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

GMT+8, 2025-7-14 03:00 , Processed in 0.041385 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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