WhisperX

文章目录

    • 一、关于 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.mzph.cn/news/874032.shtml

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

相关文章

Cyber Weekly #16

赛博新闻 1、OpenAI 发布 GPT-4o mini OpenAI 本周官宣推出 GPT-4o mini&#xff0c;这是 GPT-4o 更小参数量的简化版本。ChatGPT 的免费用户、Plus 用户和 Team 用户能使用 GPT-4o mini 而并非 GPT-3.5 Turbo&#xff0c;企业用户在下周也将获得 GPT-4o mini 的权限。GPT-4o…

少儿编程启蒙宝典:Scratch动画游戏108变

一、编程教育的时代价值与意义 随着数字时代的深入发展&#xff0c;社会对人才的需求正发生深刻变革&#xff0c;计算思维与编程能力已成为衡量个人竞争力的重要指标。在此背景下&#xff0c;培养孩子们运用计算思维解决实际问题的能力&#xff0c;成为教育领域的重要任务。编…

UE4-获得角色控制权的两种方法

方法一&#xff1a; 方法二&#xff1a; 注意此方法不能有多个玩家出生点&#xff0c;如果有多个玩家出生点&#xff0c;会随机的选择一个玩家出生点进行生成。

IP5306移动电源DIY

最近制作一款移动电源&#xff0c;芯片采用的是IP5306

UDP详细总结

UDP协议特点 UDP是无连接的传输层协议&#xff1b; UDP使用尽最大努力交付&#xff0c;不保证可靠交付&#xff1b; UDP是面向报文的&#xff0c;对应用层交下来的报文&#xff0c;不合并&#xff0c;不拆分&#xff0c;保留原报文的边界&#xff1b; UDP没有拥塞控制&#…

python实现图像对比度增强算法

python实现直方图均衡化、自适应直方图均衡化、连接组件标记算法 1.直方图均衡化算法详解算法步骤公式Python 实现详细解释优缺点 2.自适应直方图均衡化算法详解算法步骤公式Python 实现详细解释优缺点 3.连接组件标记算法详解算法步骤8连通与4连通公式Python 实现详细解释优缺…

微服务实现全链路灰度发布

一、实现步骤 再请求 Header 中打上标签&#xff0c;例如再 Header 中添加 "gray-tag: true" &#xff0c;其表示要进行灰度测试&#xff08;访问灰度服务&#xff09;&#xff0c;而其他则访问正式服务。在负载均衡器 Spring Cloud LoadBalancer 中&#xff0c;拿到…

Deepin系统,中盛科技温湿度模块读温度纯c程序(备份)

#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <termios.h>int main() {int fd;struct termios options;// 打开串口设备fd open("/dev/ttyMP0", O_RDWR | O_NOCTTY|O_NDELAY); //O_NDELAY:打开设备不阻塞//O_NOCTT…

Qt Creator配置以及使用Valgrind - 检测内存泄露

Qt Creator配置以及使用Valgrind - 检测内存泄露 引言一、下载安装1.1 下载源码1.2 安装 二、配置使用2.1 Qt Creator配置2.2 使用2.3 更多详细信息可参考官方文档&#xff1a; 三、参考链接 引言 Valgrind是一个在Linux平台下广泛使用的开源动态分析工具&#xff0c;它提供了一…

任务2:python+InternStudio 关卡

任务地址 https://github.com/InternLM/Tutorial/blob/camp3/docs/L0/Python/task.md 文档 https://github.com/InternLM/Tutorial/tree/camp3/docs/L0/Python 任务 Python实现wordcount import re import collectionstext """ Got this panda plush to…

【机器学习】智能驱动未来:机器学习在能源效率提升与环境管理中的创新应用

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀目录 &#x1f50d;1. 引言&#x1f4d2;2. 机器学习能源环境领域的应用潜力&#x1f304;能源效率提升&#x1f3de;️环境管理⛰️具体案例…

Linux之旅:常用的指令,热键和权限管理

目录 前言 1. Linux指令 &#xff08;1&#xff09; ls &#xff08;2&#xff09; pwd 和 cd &#xff08;3&#xff09;touch 和 mkdir &#xff08;4&#xff09; rmdir 和 rm &#xff08;5&#xff09;cp &#xff08;6&#xff09;mv &#xff08;7&#xff09;…

开发工具推荐:await-to-js

目录 前言&#xff1a; 1. .then().catch() 2. async await 3. await-to-js 前言&#xff1a; 今天给大家推荐一块我觉得用着还不错的工具&#xff0c;await-to-js&#xff1b; await-to-js - npm GitHub - scopsy/await-to-js: Async await wrapper for easy error ha…

HTML+CSS+JS精美气泡提示框

源代码在效果图后面 点赞❤️关注&#x1f49b;收藏⭐️ 主要实现&#xff1a;提示框出现和消失两种丝滑动画 弹出气泡提示框后延迟2秒自动消失 效果图 错误框 正确 警告 提示 源代码 <!DOCTYPE html> <html lang"en"> <head><meta cha…

PHP场地预约共享茶室棋牌室小程序系统源码

&#x1f375;&#x1f3b2;【聚会新宠】场地预约神器&#xff0c;共享茶室棋牌室小程序大揭秘&#xff01;&#x1f389; &#x1f3e1;【开篇&#xff1a;告别繁琐&#xff0c;聚会新选择】&#x1f3e1; 还在为找不到合适的聚会场地而烦恼吗&#xff1f;想要一个既私密又舒…

JS 原型与原型链图解:彻底搞懂的终极指南

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 在JavaScript中&#xff0c;原型和原型链是非常重要的知识点&#xff0c;只有理解了…

2.2.填充和步幅

我们已经知道&#xff0c;卷积的输出形式取决于输入形式和卷积核的形式。 ​ 此外还有其他因素会影响输出的大小。假设以下情景&#xff1a; 有时&#xff0c;在应用了连续的卷积之后&#xff0c;我们最终得到的输出远小于输入大小。这是由于卷积核的宽度和高度通常大于1所导致…

驱动框架——CMSIS第一部分 RTE驱动框架介绍

一、介绍CMISIS 什么是CMSIS&#xff08;cortex microcontrol software interface standard一种软件标准接口&#xff09;&#xff0c;官网地址&#xff1a;https://arm-software.github.io/CMSIS_6/latest/General/index.html 包含的core、driver、RTOS、dsp、nn等部分&…

Linux系统编程:自定义协议(序列化和反序列化)

1. 协议 在之前我们谈到&#xff0c;协议就是一种"约定"&#xff0c;socket api接口&#xff0c;在读写数据时&#xff0c;都是按照"字符串"的方式来发送接收的&#xff0c;那么我们要传输一些"结构化"数据时怎么办呢&#xff1f;,比如说一个结构…

前端-04-VScode敲击键盘有键入音效,怎么关闭

目录 问题解决办法 问题 今天正在VScode敲项目&#xff0c;不知道是按了什么快捷键还是什么的&#xff0c;敲击键盘有声音&#xff0c;超级烦人啊&#xff01;&#xff01;于是我上网查了一下&#xff0c;应该是开启了VScode的键入音效&#xff0c;下面是关闭键入音效的办法。…