DeepPhonemizerの英語の事前学習モデルをcmudict-ipaを使って作成をする

初めに

Transformer モデルに基づく、書記素から音素への変換ライブラリがあります。このライブラリで使用できるモデルをデータセットの整形からモデルの事前学習まで作ってみます

github.com

以下の記事で推論は試しているので、どのようなものなのかは記事をご確認ください。

ayousanz.hatenadiary.jp

開発環境

準備

今回は、学習しやすいように少し変更したものを使うため、以下のリポジトリをcloneして進めます

github.com

まずは、以下のライブラリをインストールします

pip install -r .\requirements.txt

データセットの準備

今回は英語のデータセットを使用するため、以下のリポジトリcmudict-0.7b-ipa.txt を使っていきます

github.com

学習に使用できるようにするため、以下のコードで整形をして別ファイルとして保存します

import re

def convert_format(input_file, output_file):
    with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile:
        for line in infile:
            # タブで単語とIPA表記を分割
            parts = line.strip().split('\t')
            if len(parts) != 2:
                continue  # 不正な行はスキップ

            word, ipa_list = parts
            # カンマで区切られたIPA表記の最初の1つだけを取得
            ipa = ipa_list.split(', ')[0]

            # IPAから不要な文字(スラッシュ)を除去
            ipa = re.sub(r'^/|/$', '', ipa)
            
            # 新しい形式で書き出し
            new_line = f"('en_us', '{word}', '{ipa}'),\n"
            outfile.write(new_line)

# ファイルの変換を実行
convert_format('cmudict-0.7b-ipa.txt', 'cmudict-0.7b-ipa_convert.txt')

こちら側で整形したデータは cmudict-0.7b-ipa_convert.txtがあるので、必要であればご使用ください。

学習の実行

作成したデータセットをルートパスに配置します。

その後以下を実行して、学習を開始します

python .\run_training.py

パラメータ設定にもよりますが、1epochだけであれば1-2分ほどで終わります

学習が進むと以下のように checkpoints のフォルダ内にモデルが保存されていきます。

学習したモデルで推論

run_prediction.py を使用して、学習したモデルを使って単語を音素に変換します。

以下のコードで使用するモデルを指定します

checkpoint_path = 'checkpoints/latest_model.pt'

実行をすると以下のように出力されます

['ˈjʌŋ']
<en_us> 0.9999767541885376
ˈ 0.9446256160736084
j 0.9691675901412964
ʌ 0.3388298749923706
ŋ 0.9943882822990417
<end> 1.0
young | <en_us>ˈjʌŋ<end> | 0.3084510115930348