🚀 XPhoneBERT : 用于文本转语音的预训练多语言音素表示模型
XPhoneBERT 是首个用于文本转语音(TTS)的预训练多语言音素表示模型。它采用了与 BERT-base 相同的模型架构,在来自近 100 种语言和地区的 3.3 亿个音素级句子上,使用 RoBERTa 预训练方法进行训练。实验结果表明,将 XPhoneBERT 用作输入音素编码器,能显著提升强大的神经 TTS 模型在自然度和韵律方面的性能,同时也有助于在有限的训练数据下生成高质量的语音。
XPhoneBERT 的总体架构和实验结果可在 我们发表于 INTERSPEECH 2023 的论文 中查看:
@inproceedings{xphonebert,
title = {{XPhoneBERT: A Pre-trained Multilingual Model for Phoneme Representations for Text-to-Speech}},
author = {Linh The Nguyen and Thinh Pham and Dat Quoc Nguyen},
booktitle = {Proceedings of the 24th Annual Conference of the International Speech Communication Association (INTERSPEECH)},
year = {2023},
pages = {5506--5510}
}
请引用 我们的论文,当使用 XPhoneBERT 来帮助产生已发表的研究结果或将其集成到其他软件中时。
如需更多信息或有相关请求,请访问 XPhoneBERT 的主页!
🚀 快速开始
✨ 主要特性
- 首个用于文本转语音的预训练多语言音素表示模型。
- 采用与 BERT-base 相同的模型架构。
- 在近 100 种语言和地区的 3.3 亿个音素级句子上预训练。
- 显著提升神经 TTS 模型在自然度和韵律方面的性能。
- 有助于在有限训练数据下生成高质量语音。
📦 安装指南
- 安装
transformers
:使用 pip 安装 pip install transformers
,或者 从源代码 安装。
- 安装
text2phonemesequence
:pip install text2phonemesequence
。我们的 text2phonemesequence
包用于将文本序列转换为音素级序列,用于构建我们的多语言音素级预训练数据。我们通过集成 CharsiuG2P 和 segments 工具包来构建 text2phonemesequence
,它们分别用于执行文本到音素的转换和音素分割。
⚠️ 重要提示
- 为每种语言初始化
text2phonemesequence
需要其对应的 ISO 639 - 3 代码。支持的语言的 ISO 639 - 3 代码可在 此处 查看。
text2phonemesequence
接受分词后的序列作为输入。用户在将分词后的序列输入 text2phonemesequence
之前,也可以对其进行文本归一化处理。在创建我们的预训练数据时,我们使用 spaCy 工具包对每种语言的所有文本文档进行单词和句子分割,但越南语使用 VnCoreNLP 工具包。我们还使用 NVIDIA NeMo 工具包 中的文本归一化组件处理英语、德语、西班牙语和中文,使用 Vinorm 文本归一化包处理越南语。
📚 详细文档
预训练模型
属性 |
详情 |
模型名称 |
vinai/xphonebert-base |
参数数量 |
88M |
架构 |
base |
最大长度 |
512 |
预训练数据 |
来自近 100 种语言和地区的 3.3 亿个音素级句子 |
💻 使用示例
基础用法
from transformers import AutoModel, AutoTokenizer
from text2phonemesequence import Text2PhonemeSequence
xphonebert = AutoModel.from_pretrained("vinai/xphonebert-base")
tokenizer = AutoTokenizer.from_pretrained("vinai/xphonebert-base")
text2phone_model = Text2PhonemeSequence(language='jpn', is_cuda=True)
sentence = "これ は 、 テスト テキスト です ."
input_phonemes = text2phone_model.infer_sentence(sentence)
input_ids = tokenizer(input_phonemes, return_tensors="pt")
with torch.no_grad():
features = xphonebert(**input_ids)
📄 许可证
本项目采用 MIT 许可证。