WhisperX

news2024/9/20 21:58:43

文章目录

    • 一、关于 WhisperX
      • 新闻 🚨
    • 二、设置⚙️
      • 1、创建Python3.10环境
      • 2、安装PyTorch,例如Linux和Windows CUDA11.8:
      • 3、安装此repo
      • 4、Speaker Diarization
    • 三、使用💬(命令行)
      • 1、English
      • 2、他语言
        • 例如德语
    • 四、Python使用🐍
    • 五、Demos 🚀
    • 六、技术细节👷‍♂️
    • 七、限制⚠️


一、关于 WhisperX

WhisperX:具有字级时间戳的自动语音识别(和分类)

  • github : https://github.com/m-bain/whisperX
  • 联系支持:maxhbain@gmail.com

在这里插入图片描述


该存储库提供快速语音识别(70倍实时与big-v2)与字级时间戳和说话人分类。

  • ⚡批量推断70x实时转录使用耳语大v2
  • 🪶更快的耳语后端,需要<8GB的gpu内存用于beam_size=5的big-v2
  • 🎯使用wave 2vec2对齐准确的字级时间戳
  • 👯‍♂️多扬声器ASR使用来自pyannote音频的扬声器分类(扬声器ID标签)
  • 🗣️VAD预处理,减少幻觉和批处理,没有WER降解

Whisper 是一个ASR模型由OpenAI开发,在各种音频的大型数据集上进行训练。虽然它确实产生了高度准确的转录,但相应的时间戳是在话语级别,而不是每个单词,并且可能不准确几秒钟。OpenAI的耳语本身不支持批处理。

Phoneme-Based ASR(基于音素的ASR) 一套经过微调的模型,用于识别区分单词的最小语音单位,例如“tap”中的元素p。一个流行的示例模型是wav2vec2.0.

Forced Alignment(强制对齐) 是指将正交转录与录音对齐以自动生成手机级分割的过程。

语音活动检测(VAD) 是检测是否存在人类语音。

Speaker Diarization 是根据每个说话者的身份将包含人类语音的音频流划分为同质段的过程。


新闻 🚨

  • 第一名在Ego4d转录挑战🏆
  • WhisperX在INTERSPEECH 2023上被接受
  • V3成绩单segment-per-sentence:使用nltksent_tokenize更好的字幕和更好的分词
  • V3发布,70倍加速开源。使用批量耳语和更快的耳语后端!
  • v2发布,代码清理,导入耳语库VAD过滤现在默认打开,如论文所示。
  • 🎓👨‍🏫!请参阅我们的ArxiV预印本,了解WhisperX的基准测试和详细信息。我们还引入了更高效的批处理推理,从而产生*60-70x实时速度的big-v2。

二、设置⚙️

已针对PyTorch 2.0、Python 3.10进行测试(使用其他版本需自行承担风险!)

GPU执行需要在系统上安装NVIDIA库cuBLAS 11.x和cuDNN 8.x。请参阅 CTranslate2 documentation.


1、创建Python3.10环境

conda create --name whisperx python=3.10
conda activate whisperx

2、安装PyTorch,例如Linux和Windows CUDA11.8:

conda install pytorch==2.0.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia

其他方法可见 这里。


3、安装此repo

pip install git+https://github.com/m-bain/whisperx.git

如果已安装,请将包更新为最近提交

pip install git+https://github.com/m-bain/whisperx.git --upgrade

如果希望修改此软件包,请以可编辑模式克隆并安装:

$ git clone https://github.com/m-bain/whisperX.git
$ cd whisperX
$ pip install -e .

您可能还需要安装ffmpeg、rust等。请在此处按照openAI说明进行操作 https://github.com/openai/whisper#setup


4、Speaker Diarization

启用 Speaker Diarization,请包含您可以从此处 生成的拥 Hugging Face token(read)在-hf_token参数之后,接受以下模型的用户协议:Segmentation和 Speaker-Diarization-3.1(如果您选择使用Speaker Diarization 2.x,请按照要求此处 操作替代)

:截至2023年10月11日,在WhatperX中存在一个关于pyannote/Speaker-Diarization-3.0性能缓慢的已知问题。这是由于更快的耳语和pyannote音频3.0.0之间的依赖冲突。有关更多详细信息和潜在的解决方法,请参阅此问题。


三、使用💬(命令行)


1、English

在示例段上运行耳语(使用默认参数,耳语小)添加 --highlight_words True 来可视化.srt 文件中的单词计时。

--highlight_words True
whisperx examples/sample01.wav

使用WhisperX强制对齐到wav2vec2.0大的结果:

sample01.mp4


将此与许多转录不同步的原始耳语进行比较:

sample_whisper_og.mov


为了提高时间戳的准确性,以更高的gpu mem为代价,使用更大的模型(更大的对齐模型没有那么有用,见论文)例如。

whisperx examples/sample01.wav --model large-v2 --align_model WAV2VEC2_ASR_LARGE_LV60K_960H --batch_size 4

要用说话者ID标记成绩单(如果已知,请设置说话者数量,例如-min_speakers 2, --max_speakers-2):

whisperx examples/sample01.wav --model large-v2 --diarize --highlight_words True

要在CPU而不是GPU上运行(以及在Mac OS X上运行):

whisperx examples/sample01.wav --compute_type int8


2、他语言

特定语言的自动挑选从torchaudio管道或huggingface--language``--model large

{en, fr, de, es, it, ja, zh, nl, uk, pt}拥抱脸模型集线器


例如德语
whisperx --model large-v2 --language de examples/sample_de_01.wav

sample_de_01_vis.mov

More EXAMPLES



四、Python使用🐍

import whisperx
import gc 

device = "cuda" 
audio_file = "audio.mp3"
batch_size = 16 # reduce if low on GPU mem
compute_type = "float16" # change to "int8" if low on GPU mem (may reduce accuracy)

# 1. Transcribe with original whisper (batched)
model = whisperx.load_model("large-v2", device, compute_type=compute_type)

# save model to local path (optional)
# model_dir = "/path/"
# model = whisperx.load_model("large-v2", device, compute_type=compute_type, download_root=model_dir)

audio = whisperx.load_audio(audio_file)
result = model.transcribe(audio, batch_size=batch_size)
print(result["segments"]) # before alignment

# delete model if low on GPU resources
# import gc; gc.collect(); torch.cuda.empty_cache(); del model

# 2. Align whisper output
model_a, metadata = whisperx.load_align_model(language_code=result["language"], device=device)
result = whisperx.align(result["segments"], model_a, metadata, audio, device, return_char_alignments=False)

print(result["segments"]) # after alignment

# delete model if low on GPU resources
# import gc; gc.collect(); torch.cuda.empty_cache(); del model_a

# 3. Assign speaker labels
diarize_model = whisperx.DiarizationPipeline(use_auth_token=YOUR_HF_TOKEN, device=device)

# add min/max number of speakers if known
diarize_segments = diarize_model(audio)
# diarize_model(audio, min_speakers=min_speakers, max_speakers=max_speakers)

result = whisperx.assign_word_speakers(diarize_segments, result)
print(diarize_segments)
print(result["segments"]) # segments are now assigned speaker IDs


五、Demos 🚀

https://replicate.com/victor-upmeet/whisperx
https://replicate.com/daanelson/whisperx
https://replicate.com/carnifexer/whisperx

如果您无法访问自己的GPU,请使用上面的链接试用WhisperX。


六、技术细节👷‍♂️

有关批处理和对齐、VAD的效果以及所选对齐模型的具体详细信息,请参阅预印本 paper.

要减少GPU内存需求,请尝试以下任何一项(2.&3.会影响质量):

  1. 减少批量大小,例如--batch_size 4
  2. 使用较小的ASR模型--model base
  3. 使用更轻的计算类型--compute_type int8

与openai耳语的转录差异:

  1. 没有时间戳的转录。要启用单程批处理,执行耳语推理--without_timestamps True,这确保了批处理中每个样本1次正向传递。但是,这可能会导致默认耳语输出的差异。
  2. 基于VAD的片段转录,不同于openai的缓冲转录。在Wthe WhisperX论文中,我们展示了这可以降低WER,并实现准确的批量推断
  3. --condition_on_prev_text默认设置为False(减少幻觉)

七、限制⚠️

  • 对齐模型字典中不包含字符的抄本单词,例如“2014”或“13.6英镑”无法对齐,因此没有给出时间。
  • 耳语或耳语不能很好地处理重叠的语言
  • 分类远非完美
  • 需要语言特定的wave 2vec2模型

2024-07-21(日)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

厦门会展可视化:展览全方位动态展示

通过图扑先进的可视化技术&#xff0c;实时呈现厦门会展中心的各类活动和展览布局&#xff0c;提供直观的导航和详细的展区信息&#xff0c;让参观者轻松完成数字化体验。

ELK日志管理与应用

目录 一.ELK收集nginx日志 二.收集tomcat日志 三.Filebeat 一.ELK收集nginx日志 1.搭建好ELKlogstashkibana架构 2.关闭防火墙和selinux systemctl stop firewalld setenforce 0 3.安装nginx [rootlocalhost ~]# yum install epel-release.noarch -y [rootlocalhost …

谷粒商城实战笔记-37-前端基础-Vue-基本语法插件安装

文章目录 一&#xff0c;v-model1&#xff0c;双向绑定2&#xff0c;vue的双向绑定2.1 html元素上使用指令v-model2.2 model中声明对应属性2.3&#xff0c;验证view绑定modelmodel绑定view 完整代码 二&#xff0c;v-on1&#xff0c;指令简介2&#xff0c;在button按钮中添加v-…

【机器学习】超参数选择:解锁机器学习模型潜力的关键

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 超参数选择&#xff1a;解锁机器学习模型潜力的关键引言什么是超参数&#xff1…

【云原生】Kubernetes中的DaemonSet介绍、原理、用法及实战应用案例分析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

谷歌账号忘记密码怎么办?这样找回——但是90%都是找不回的。关于密码有三个建议

Google账号忘记密码怎么办&#xff1f;谷歌账号的密码不记得了怎么办&#xff1f;如何找回谷歌账号的密码&#xff1f;谷歌账号记得账号名、辅助邮箱&#xff0c;但是密码不记得了还有办法吗... 在GG账号服务给朋友们提供服务的过程中&#xff0c;时不时会遇到这样的问题&…

Linux/Windows 系统分区

1. Windows 系统 1.1 系统分区 系统分区也叫做磁盘分区&#xff0c;即分盘&#xff1b; 举个例子&#xff0c;好比家里有一个大柜子&#xff0c;把衣服&#xff0c;鞋子&#xff0c;袜子都放在里面&#xff0c;由于没有隔断&#xff0c;找的时候非常麻烦&#xff0c;找是能找…

LCD、LED与OLED的区别

在现代显示技术中&#xff0c;LCD、LED和OLED是三种常见的显示技术&#xff0c;广泛应用于笔记本电脑、手机、电视等设备。每种技术都有其独特的优势和局限性&#xff0c;了解它们之间的差异对于选择合适的显示设备至关重要。本文将详细探讨这三种显示技术的特点及其在笔记本上…

2024大数据职业技能竞赛(国赛)模块E,子任务九:用散点图展示省份平均消费额

2024大数据职业技能竞赛&#xff08;国赛&#xff09;模块E数据展现题解 编写Vue工程代码&#xff0c;根据接口&#xff0c;用基础散点图展示2020年最高10个省份平均消费额&#xff08;四舍五入保留两位小数&#xff09;&#xff0c;同时将用于图表展示的数据结构在浏览器的co…

rk3568 OpenHarmony4.1 Launcher定制开发—桌面壁纸替换

Launcher 作为系统人机交互的首要入口&#xff0c;提供应用图标的显示、点击启动、卸载应用&#xff0c;并提供桌面布局设置以及最近任务管理等功能。本文将介绍如何使用Deveco Studio进行单独launcher定制开发、然后编译并下载到开发板&#xff0c;以通过Launcher修改桌面背景…

《无线互联科技》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《无线互联科技》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《无线互联科技》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;江苏省科学技术厅 主办单位&#xff1a…

生成式 AI 的发展方向,是 Chat 也是 Agent,双向奔赴

随着生成式AI技术的不断进步&#xff0c;关于其未来发展方向的讨论也愈发激烈。究竟生成式AI的未来是在对话系统&#xff08;Chat&#xff09;中展现智慧&#xff0c;还是在自主代理&#xff08;Agent&#xff09;中体现能力&#xff1f; 一、整体介绍 生成式AI在对话系统&…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)

目录 引言 5.5 广播远程识别码&#xff08;Broadcast Remote ID&#xff09; 5.5.1 使用PC5的广播远程识别码 5.5.2 使用MBS的广播远程识别码 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及…

PyTorch深度学习实战——使用深度Q学习进行Pong游戏

PyTorch深度学习实战——使用深度Q学习进行Pong游戏 0. 前言1. 结合固定目标网络的深度 Q 学习模型1.1 模型输入1.2 模型策略 2. 实现深度 Q 学习进行 Pong 游戏相关链接 0. 前言 我们已经学习了如何利用深度 Q 学习来进行 Gym 中的 CartPole 游戏。在本节中&#xff0c;我们将…

LeetCode 热题 HOT 100 (004/100)【宇宙最简单版】

【单调栈】No. 0739 每日温度 【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#…

python-多任务编程

2. 多任务编程 2.1 多任务概述 多任务 即操作系统中可以同时运行多个任务。比如我们可以同时挂着qq&#xff0c;听音乐&#xff0c;同时上网浏览网页。这是我们看得到的任务&#xff0c;在系统中还有很多系统任务在执行,现在的操作系统基本都是多任务操作系统&#xff0c;具备…

Typora 1.5.8 版本安装下载教程 (轻量级 Markdown 编辑器),图文步骤详解,免费领取(软件可激活使用)

文章目录 软件介绍软件下载安装步骤激活步骤 软件介绍 Typora是一款基于Markdown语法的轻量级文本编辑器&#xff0c;它的主要目标是为用户提供一个简洁、高效的写作环境。以下是Typora的一些主要特点和功能&#xff1a; 实时预览&#xff1a;Typora支持实时预览功能&#xff0…

MySQL 查询 limit 100000000, 10 和 limit 10 速度一样快吗?

MySQL 查询 limit 100000000, 10 和 limit 10 速度一样快吗&#xff1f; MySQL内部分为server层和存储引擎层。一般情况下存储引擎都用innodb。 server层有很多模块&#xff0c;其中需要关注的是执行器是用于跟存储引擎打交道的组件。 执行器可以通过调用存储引擎提供的接口&…

order by 索引优化

根据 add_time 顺序扫描数据&#xff0c;然后根据 where 过滤数据&#xff0c;order_status4的数据很稀疏&#xff0c;会导致扫描很多数据 add_time 0 表达式使得无法使用add_time索引&#xff0c;则会先使用order_status进行过滤数据&#xff0c;然后对add_time进行排序&…