🚀 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 許可證。