如何使用英伟达 NeMo 构建语音翻译应用程序
导言
神经模块(NeMo)是一个开源工具包,旨在处理对话式人工智能任务。它是英伟达™(NVIDIA®)GPU 云(NGC)目录的一部分,该目录由工具、框架和预训练模型的集中存储库组成。这些模型加快了人工智能和高性能计算工作负载的开发、部署和管理。NGC GPU 加速容器也是 NGC 目录的重要组成部分,预配置了优化软件和库,以利用 GPU 资源加速性能。
本文将介绍如何在 GPU 加速 PyTorch 容器中使用 NeMo 框架来执行自动语音识别(ASR)和文本到语音(TTS)任务。您需要安装并运行 PyTorch 容器,然后使用 NeMo 预训练模型将导入的法语音频转换为英语音频。
前提条件
开始之前
- 使用 Vultr Marketplace 应用程序部署一个全新的Ubuntu 22.04 GPU Stack 服务器,该服务器至少具备以下配置
- 1/3 GPU
- 20 GB GPU 内存
- 3 个 vCPU
- 30 GB 内存
- 使用SSH 访问服务器
- 创建具有 sudo 权限的非 root 用户
- 切换到非 root 用户账户。用实际用户替换
sysadmin
# su sysadmin
安装 PyTorch 并访问 Jupyter Notebook
要在云 GPU 服务器上使用 NeMo 框架,请使用 Docker 安装并运行带有端口绑定的 PyTorch GPU 容器。然后,按照以下步骤访问预装在容器中的 Jupyter Notebook 服务。
- 使用 Docker 安装并运行 PyTorch GPU 容器
$ sudo docker run --gpus all -p 9000:8888 -it nvcr.io/nvidia/pytorch:23.09-py3
上述命令以下列配置运行 PyTorch GPU 加速 docker 容器:
- -
-gpus all
:将所有可用的服务器 GPU 分配给 Docker 容器。这将确保所有 GPU 资源都能运行 GPU 加速任务 - -
p 9000:8888
:将服务器上的主机端口9000
映射到容器端口8888
。这将创建一个独立的 Jupyter Notebook 访问端口,有别于在端口8888
上运行的 Vultr GPU Stack Jupyter Lab 服务 - -
它
:以交互模式启动容器并访问其 shell
成功后,验证服务器提示是否更改为
根
容器 shellroot@4a09da260af2:/workspace#
- -
- 将 Jupyter Notebook 作为后台进程启动
# jupyter notebook --ip=0.0.0.0 &
输出结果应如下所示
要访问笔记本,请在浏览器中打开此文件: file:///root/.local/share/jupyter/runtime/nbserver-369-open.html 或复制并粘贴此 URL: http://hostname:8888/?token=c5b30aac114cd01d225975a9c57eafb630a5659dde4c65a8
如上述输出所示,复制生成的令牌
?token=XXXX
,以便在网络浏览器中安全访问 Jupyter Notebook。 - 使用 Chrome 浏览器等网络浏览器,使用生成的访问令牌通过端口
9000
访问公共服务器 IP 上的 Jupyter Notebookhttp://SERVER-IP:9000/?token=YOUR_TOKEN
运行预训练模型
要使用预训练模型和必要的 NeMo 函数,请导入 NeMo 模块。然后,初始化预训练模型,并在 Jupyter Notebook 会话中执行音频转录和文本到语音合成等任务,如下所述。
- 访问 Jupyter Notebook 网页界面
- 在右中角单击 "新建"下拉菜单,显示一个下拉列表
- 在笔记本:类别下选择Python 3 (ipykernel),打开一个新文件
- 在新的 Jupyter Notebook 文件中,在新单元格中添加以下代码,以安装必要的依赖包
pip install Cython nemo_toolkit[all]hydra-core transformers sentencepiece webdataset youtokentome pyannote.metrics jiwer ijson sacremoses sacrebleu rouge_score einops unidic-lite mecab-python3 opencc pangu ipadic wandb nemo_text_processing pytorch-lightning
以下是每个软件包代表的内容:
Cython
一个 Python 模块,允许您为 Python 编写 C 扩展。它通常用于性能优化nemo_toolkit[全部]:
用于构建对话式人工智能模型的框架。其 全部标记安装所有可用组件和 NeMo 依赖项hydra-core
:用于配置复杂应用程序的框架。它用于以简洁有序的方式管理配置设置transformers
:与自然语言处理(NLP)中预先训练好的模型一起使用,包括 BERT、GPT-2 等模型sentencepiece
:执行文本标记化和分割的库,常用于 NLP 任务中webdataset
:执行高效的数据加载和扩充,在深度学习工作流中特别有用youtokentome
:执行子词标记化的库,适用于语言建模任务pyannote.metrics
:用于扬声器日记化和音频分析任务的工具包,包含这些任务的评估指标jiwer
:计算词错误率 (WER) 的库,这是自动语音识别 (ASR) 和其他语音处理任务中常用的指标ijson
:用于增量解析大型 JSON 文档的库。在高效处理大型数据文件时非常有用sacremoses
:执行标记化、去标记化和各种文本处理任务的 Python 库sacrebleu
:使用 BLEU 指标评估机器翻译质量rouge_score
:用于计算 ROUGE 评估指标的库,常用于文本摘要和机器翻译einops
:用于张量运算和重塑的库,在开发深度学习模型时非常有用unidic-lite
:形态分析词典mecab-python3
:在 MeCab 的 Python 绑定中工作的标记化语音部分标记器opencc
:简繁体文本转换库pangu
:中文文本间距库,用于在汉字之间添加空格ipadic
:形态分析词典wandb
:跟踪和可视化机器学习实验nemo_text_processing
:包含 NVidia NeMo 工具包专用的文本处理实用程序pytorch-lightning
:PyTorch 的轻量级封装器,可简化深度学习模型的训练
- 按主菜单栏上的运行或按CTRL ENTER 键安装软件包
- 在新的代码单元中,导入必要的模块
导入 nemo import nemo.collections.asr as nemoo_asr 导入 nemo.collections.nlp 为 nemo_nlp 导入 nemo.collections.tts 为 nemo_tts 导入 IPython
上述命令导入了运行 NeMo 预训练模型所需的必要模块。以下是每个模块所代表的内容:
nemo
:允许访问 NeMo 的功能和类nemo.collections.asr:
允许访问 NeMo 的 ASR 相关功能和模型nemo_nlp
:允许使用 NeMo 的 NLP 相关工具、模型和实用程序nemo_tts
:允许使用 NeMo 的 TTS 相关功能和模型IPython
:允许交互式运行和实验 NeMo 代码
- 打开 NGC NeMo 目录
nemo_asr.models.EncDecCTCModel.list_available_models() nemo_nlp.models.MTEncDecModel.list_available_models() nemo_tts.models.HifiGanModel.list_available_models() nemo_tts.models.FastPitchModel.list_available_models()
上述命令列出了以下类别中的所有可用模型:
- 自动语音识别
- 编码器-解码器:属于 MTEnDec 类别的自然语言处理 (NLP) 集合
- 文本到语音:HifiGan 和 FastPitch
根据目录,使用以下模型:
stt_fr_quartznet15x5
:用于语音识别,法语专用nmt_fr_en_transformer12x2
:将文本从一种语言翻译成另一种语言,法语专用tts_en_fastpitch
:为输入到文本到语音的文本生成频谱图tts_en_lj_hifigan_ft_mixertts
:将频谱图转换为用于 TTS 的语音
- 初始化模型
asr_model = nemo_asr.models.EncDecCTCModel.from_pretrained(model_name='stt_fr_quartznet15x5').cuda() nmt_model = nemo_nlp.models.MTEncDecModel.from_pretrained(model_name='nmt_fr_en_transformer12x2').cuda() spectrogram_generator = nemo_tts.models.FastPitchModel.from_pretrained(model_name='tts_en_fastpitch').cuda() vocoder = nemo_tts.models.HifiGanModel.from_pretrained(model_name='tts_en_lj_hifigan_ft_mixertts').cuda()
至少等待 15 分钟,让初始化过程成功完成
执行音频转录和合成
- 下载法语音频样本。将链接替换为您所需的音频源 URL
!wget 'https://lightbulblanguages.co.uk/resources/audio/bonjour.mp3' audio_sample = 'bonjour.mp3' IPython.display.Audio(audio_sample)
上述命令下载了公开的法语 MP3 音频样本文件
bonjour.mp3
,并将其保存在 Jupyter Notebook 的工作目录中。此外,它还使用 IPython 的音频
部件在 Jupyter Notebook 会话中显示和播放音频文件。 - 将音频样本转录为文本
transcribed_text = asr_model.transcribe([audio_sample]) print(transcribed_text)
上述命令使用语音识别模型,并显示从音频内容转录的文本
输出:
['你好']
- 将文本翻译成英文
english_text = nmt_model.translate(transcribed_text) print(english_text)
上述命令使用预训练模型将法语文本转换为英语,并显示转换后的文本
输出:
['你好']
- 生成频谱图
parseText = spectrogram_generator.parse(english_text[0]) spectrogram = spectrogram_generator.generate_spectrogram(tokens=parseText)
上述命令将英文文本转换为频谱图,这是文本到语音合成的预处理步骤,频谱图代表了生成音频的特殊特征
- 将频谱图转换为音频
audio = vocoder.convert_spectrogram_to_audio(spec=spectrogram) audioOutput = audio.to('cpu').detach().numpy()
上述命令通过 TTS 管道处理输入文本,生成音频输出
- 查看转录的音频
IPython.display.Audio(audioOutput,rate=22050)
验证以
22050 Hz
的速率生成的转录音频是否与英文文本相匹配
结论
您使用 NeMo 框架预训练模型和 Vultr Cloud GPU 服务器上的 NGC GPU 加速容器构建了一个人工智能翻译器。您将法语音频样本转录为法语文本,然后将文本转换为英语文本,并将文本转录为英语音频样本。通过使用 NeMo 模块和 NGC 目录中的预训练模型,音频语音识别管道变得高效便捷。
更多信息
更多信息,请访问以下文档资源:
版权声明:
作者:指北针
链接:https://www.vpscue.com/48684.html
来源:主机指北
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论