跳到内容

m-bain/耳语X

存储库文件导航

WhisperX公司

GitHub明星 GitHub问题 GitHub许可证 ArXiv纸 推特

耳语拱门

该存储库提供快速的自动语音识别(70x实时,大v2),具有单词级时间戳和说话者日记。

  • 基于slipper large-v2的70x实时转录批量推理
  • 🪶快速耳语后端,对于beam_size=5的large-v2,需要<8GB gpu内存
  • 🎯 使用wav2vec2对齐的精确单词级时间戳
  • 👯‍♂️ 使用扬声器日记的多扬声器ASRpyannote-audio公司(扬声器ID标签)
  • 🗣️ VAD预处理,减少幻觉和配料,且WER不会退化

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

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

强制对齐指的是将正字法抄本与录音对齐以自动生成电话级别分段的过程。

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

扬声器分辨率是根据每个说话人的身份将包含人类语音的音频流划分为同质段的过程。

新建🚨

  • 第1名自我4d转录挑战🏆
  • WhisperX公司INTERSPEECH 2023验收
  • v3转录片段-句子:使用nltk sent_tokenize实现更好的字幕和日记化
  • v3发布,70x加速开源。使用批量耳语快速耳语后端!
  • v2发布,代码清理,导入耳语库VAD过滤现在默认打开,如本文所述。
  • 掉纸🎓👨‍🏫! 请参阅我们的ArxiV预打印有关WhisperX的基准测试和详细信息。我们还引入了更高效的批处理推理,以*60-70倍的实时速度实现了大v2。

设置⚙️

经过PyTorch 2.0、Python 3.10测试(使用其他版本的风险自负!)

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

1.创建Python3.10环境

conda create--name低语x python=3.10

康达激活耳语

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

conda安装pytorch==2.0.0 torchaudio==2.0.0pytorch-cuda=11.8-c pytorch-c nvidia

参见其他方法在这里。

3.安装此存储库

pip安装git+https://github.com/m-bain/helopx.git

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

pip安装git+https://github.com/m-bain/helopx.git--升级

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

$git克隆https://github.com/m-bain/helopX.git$cd耳语X$pip安装-e。

您可能还需要安装ffmpeg、rust等。请遵循此处的openAI说明https://github.com/openai/wilver#setup(网址:https://github.com/openai/wilver#setup)

扬声器分辨率

收件人启用扬声器分辨率,包括您可以从中生成的“拥抱脸”访问令牌(读)在这里之后--高频令牌论证并接受以下模型的用户协议:细分扬声器分辨率-3.1(如果选择使用扬声器分辨率2.x,请遵循要求在这里相反。)

注释
截至2023年10月11日,有一个众所周知的问题,那就是在wheepX中使用pyannote/Seaker-Dialization-3.0的性能很慢。这是因为faster-sleep和pyannote-audio 3.0.0之间存在依赖冲突。请参阅这个问题了解更多详细信息和潜在的解决方法。

用法💬 (命令行)

英语

在示例段上运行sleep(使用默认参数,sleep small)add--highlight_words正确以可视化.srt文件中的单词计时。

耳语示例/sample01.wav

结果使用告密者X强制对齐到wav2vec2.0 large:

样品01.mp4

将此与最初的即时耳语进行比较,其中许多文字记录不同步:

示例_ hisper_og.mov

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

耳语示例/sample01.wav--型号large-v2--align_model WAV2VEC2_ASR_large_LV60K_960H--批次大小4

用说话人ID标记成绩单(如果已知,设置说话人数量,例如。--最小扬声器2 --最大扬声器2):

耳语示例/sample01.wav--型号large-v2--日记--highlight_words True

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

耳语示例/sample01.wav--compute_type int8

其他语言

音素ASR对齐模型是特定语言,对于测试语言,这些模型是自动从torchaudio管道或拥抱面拾取只需传入--语言编码,并使用耳语--大型模型

当前为提供的默认模型{en,fr,de,es,it,ja,zh,nl,uk,pt}。如果检测到的语言不在此列表中,则需要从中查找基于电话的ASR模型拥抱面模型轮毂并在您的数据上进行测试。

例如德语

耳语--model large-v2--language de examples/sample_de_01.wav
示例_de_01_vis.mov

查看其他语言的更多示例在这里

Python使用🐍

进口 耳语
进口 气相色谱法 

装置 = “库达” 
音频文件(_F) = “音频.mp3”
批处理大小 = 16 #GPU内存不足时减少
计算机类型 = “浮点16” #如果GPU内存不足,则更改为“int8”(可能会降低精确度)

#1。用原始耳语录制(成批)
模型 = 耳语加载模型(_M)(“大v2”装置计算机类型=计算机类型)#将模型保存到本地路径(可选)
#model_dir=“/path/”
#model=耳语x.load_model(“large-v2”,device,compute_type=计算类型,download_root=模型目录)

音频 = 耳语加载音频(_A)(音频文件(_F))结果 = 模型转录(音频批处理大小=批处理大小)打印(结果[“段”])#对齐前

#如果GPU资源不足,则删除模型
#进口gc;gc.collect();torch.cuda.empty_cache();del模型

# 2. 对齐耳语输出
模型a元数据 = 耳语加载对齐模型(语言代码=结果[“语言”],装置=装置)结果 = 耳语排列(结果[“段”],模型a元数据音频装置返回char_alignments=False(错误))打印(结果[“段”])#对齐后

#如果GPU资源不足,则删除模型
#进口gc;gc.collect();torch.cuda.empty_cache();del模型a

# 3. 分配扬声器标签
日记_模型 = 耳语Diarization管道(使用验证令牌=您的现金代币装置=装置)#添加扬声器的最小/最大数量(如果已知)
日记_段 = 日记_模型(音频)#diarize_model(音频,最小扬声器=最小扬声器,最大扬声器=最大扬声器)

结果 = 耳语指定说话人(日记_段结果)打印(日记_段)打印(结果[“段”])#段现在被分配了扬声器ID

演示🚀

复制(large-v3 复制(large-v2 复制(中等)

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

技术细节👷👷👷👷👷👷👷👷👷👷👷👷👷👷

有关批处理和对齐、VAD效果以及所选对齐模型的具体细节,请参阅预打印纸张

要减少GPU内存需求,请尝试以下任一操作(2.&3.可能影响质量):

  1. 减少批量,例如。--批处理大小4
  2. 使用较小的ASR模型--模型库
  3. 使用较轻的计算类型--计算机类型int8

与openai耳语的转录差异:

  1. 没有时间戳的转录。为了启用单程批处理,执行耳语推理--without_timestamps为True,这确保了批次中每个样品有一个正向传递。然而,这可能会导致默认耳语输出的差异。
  2. 与openai的缓冲转录不同,基于VAD的片段转录。在Wthe WhisperX论文中,我们表明这可以减少WER,并实现准确的批处理推断
  3. --先决条件设置为False(错误)默认情况下(减少幻觉)

限制⚠️

  • 对齐模型词典中不包含字符的成绩单单词,例如“2014”或“£13.60”无法对齐,因此没有给出时间。
  • 耳语和耳语都不能很好地处理重叠语音
  • 日记化远非完美
  • 需要特定于语言的wav2vec2模型

贡献🧑‍🏫

如果你会说多种语言,你可以为这个项目做贡献的一个主要方式是在拥抱脸上找到音素模型(或训练你自己的),并在目标语言的语音上测试它们。如果结果看起来不错,请发送一个拉请求和一些显示其成功的示例。

我们也非常感谢Bug查找和pull请求,因为它已经偏离了最初的研究范围。

TODO公司🗓

  • 多语言初始化

  • 基于语言检测的自动对齐模型选择

  • Python使用

  • 合并扬声器日记

  • 模型刷新,用于低gpu内存资源

  • 快速耳语后端

  • 添加maxline等,请参见(openai的sleep-utils.py)

  • 句子级段(nltk工具箱)

  • 改进对齐逻辑

  • 使用日记化和单词突出显示更新示例

  • Subtitle.ass输出<-将其恢复(在v3中删除)

  • 添加基准测试代码(用于spd/WER和分词的TEDLIUM)

  • 允许silero-vad作为备用vad选项

  • 改进日记化(单词级)。比最初想象的更难。。。

联系人/支持📇

联系人maxhbain@gmail.com用于查询。

给我买杯咖啡

致谢🙏

这项工作和我的博士学位得到了VGG(视觉几何组)牛津大学。

当然,这是建立在openAI的耳语借用重要的路线代码PyTorch强制对齐教程并使用了出色的pyannote VAD/Dializationhttps://github.com/pyannote/pyannote-audio网站

[pyannote audio]提供的宝贵VAD和Dialization模型[https://github.com/pyannote/pyannote-audio]

来自的强大后端快速耳语C横向2

那些拥有在财政上支持这项工作🙏

最后,多亏了操作系统贡献者继续进行并识别错误。

引用

如果你在研究中使用这一点,请引用论文:
@文章{bain2022helperx公司标题={WhisperX:长格式音频的时间准确语音转录}作者={贝恩、马克斯和胡、杰桑和韩、腾达和齐瑟曼、安德鲁}杂志={2023年国际演讲}={2023}}