实用工具 | 语音文本对齐MFA的安装及使用

 Montreal Forced Aligner(MFA)[1]是一个用于将音频和文本进行对齐的工具。它可以用于语音识别、语音合成和发音研究等领域。MFA支持多种语言和语音,用户可以根据需要自定义训练模型。

本博客介绍如何使用MFA对音频和文本进行对齐,其中使用的是MFA的最新版本(版本v2.2.12)。

目录

MFA的安装

安装方法一:

安装方法二:

生成词典文件

对齐

PS


MFA的安装

MFA 支持 Windows、macOS 和 Linux 操作系统。

本博客是基于 Linux 操作系统(Ubuntu20.04)其他可参考MFA安装。

安装方法一:

conda create -n aligner -c conda-forge montreal-forced-aligner
conda activate aligner
conda update --all
conda install -c conda-forge montreal-forced-aligner



pip install g2pk

安装方法二:

 git clone https://github.com/pyrasis/MFARunner

conda create -n mfa -c conda-forge montreal-forced-aligner
source activate
conda activate mfa

conda install montreal-forced-aligner==2.0.6
cd MFARunner
pip install -r requirements.txt
sudo apt-get install g++ openjdk-8-jdk python3-dev python3-pip curl
pip install konlpy==0.6.0 ffmpeg==1.4
bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)



 修改config.py中的数据集路径地址

*这里需要注意的是,语音数据和txt文件不能放在同一个文件夹内。

然后运行main.py生成字典。

python main.py

生成词典文件

1.下载预训练模型

包含:字典,G2P()模型,声学模型,

实用工具 | 语音文本对齐MFA的安装及使用_第1张图片

下载g2p模型

#英文

mfa model download g2p english_uk_mfa

#中文

mfa model download g2p mandarin_pinyin_g2p
# 也可到官网上直接下载

 #韩文

实用工具 | 语音文本对齐MFA的安装及使用_第2张图片

mfa model download g2p korean_jamo_mfa

 

2.1.示例数据集中文

mfa g2p mandarin_pinyin_g2p 数据集路径/dataset 保存路径/mandarin_dict.txt

.wav文件为数据集中的语音文件,.lab文件为语音文件对应的文本,其中文本的语言应与你使用的声学模型所能识别的文本以及词典文件中的语言相一致。如:声学模型所识别的文本为汉字,而你的语言文件说的内容为“我爱你”,则你的.lab文件中应存储着“我爱你”的文本,若是声学模型识别的文本为拼音,则.lab文件中应为“wo3 ai4 ni3“,同时词典文件中也应有着汉字-音素或者拼音-音素的对应信息。

2.2.示例韩文数据集Korean Single Speaker Speech Dataset | Kaggle

 新建kss-align.py,生成.lab文件

import os, tqdm, re
from tqdm import tqdm
from jamo import h2j
from glob import glob

text = '/workspace/dataset/kss/transcript.v.1.4.txt'
base_dir = '/workspace/dataset/kss'

filters = '([.,!?])'

with open(text, 'r', encoding='utf-8') as f:
    for line in f.readlines():
        temp = line.split('|')
        file_dir, script = temp[0], temp[3]
        script = re.sub(re.compile(filters), '', script)
        file_dir = file_dir.split('/')
        fn = file_dir[0] + '/' + file_dir[1][:-3] + 'lab'
        file_dir = os.path.join(base_dir, fn)
        with open(file_dir, 'w', encoding='utf-8') as f:
            f.write(script)

file_list = sorted(glob(os.path.join(base_dir, '**/*.lab')))
jamo_dict = {}
for file_name in tqdm(file_list):
    sentence =  open(file_name, 'r', encoding='utf-8').readline()
    jamo = h2j(sentence).split(' ')
    
    for i, s in enumerate(jamo):
        if s not in jamo_dict:
            jamo_dict[s] = ' '.join(jamo[i])        

dict_name = 'korean_dict.txt'
with open(dict_name, 'w', encoding='utf-8') as f:
    for key in jamo_dict.keys():
        content = '{}\t{}\n'.format(key, jamo_dict[key])
        f.write(content)
#pip install jamo

#生成.lab文件
python kss-align.py

 实用工具 | 语音文本对齐MFA的安装及使用_第3张图片

lexicon 文件生成

mfa train_g2p korean_dict.txt korean.zip
mfa g2p korean.zip kss korean.txt
mfa train kss korean.txt out

命令解释

实用工具 | 语音文本对齐MFA的安装及使用_第4张图片

输入到每个指令的参数可以根据用户进行更改。

  • mfa train_g2p 是 korean_dict 路径, 运行后生成的 zip 文件路径
  • mfag2p 来自 train_g2p 的 zip 文件路径、 带有数据的文件夹路径、 运行后生成的 txt 文件路径
  • mfatrain接收有数据的文件夹路径、g2p中出现的txt文件路径、运行后保存TextGrid文件的路径

全部运行后,TextGrid文件将被保存到out文件夹中


 

对齐

mfa align /path:/dataset path:/dictionary path:/acoustic_modle path:/output


执行mfa后,可能会出现名为unaligned.txt的文件。

PS

[PS1]the global mfa database server does not exist, initializing it first . 

全局mfa数据库服务器不存在,请先对其进行初始化。

montreal_forced_aligner.exceptions.DatabaseError: DatabaseError:

There was an error encountered starting the global MFA database server, please see /root/Documents/MFA/pg_init_log_global.txt for more details and/or look at the logged errors above.

实用工具 | 语音文本对齐MFA的安装及使用_第5张图片

 参考网址【未解决】

mfa configure --enable_auto_server
mfa server init

 [PS2]yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:python/object:argparse.Namespace'

实用工具 | 语音文本对齐MFA的安装及使用_第6张图片

 尝试

pip install pyyaml==4.2b2

重装yaml版本依旧出现错误

修改文件

vim /opt/conda/envs/mfa/lib/python3.8/site-packages/montreal_forced_aligner/config.py

config = yaml.safe_load(file_data)

改为

config = yaml.unsafe_load(file_data)

 之后正常运行。

疑问与解答(Q&A)

1.在MFA命令中,mfa train和mfa train_g2p的区别?

mfa train:训练一个新的声学模型

mfa train_g2p :训练一个汉字变音素模型

参考材料

【1】PYRASIS.COM: 내 목소리를 TTS로 만들기(FastSpeech2)

【2】Installation — Montreal Forced Aligner 2.0.0 documentation 

你可能感兴趣的:(#,-,Linux,-,实用篇,-,-,环境配置,-,linux,服务器,MFA,语音识别,自然语言处理)