初めに
Transformer モデルに基づく、書記素から音素への変換ライブラリがあります。このライブラリで使用できるモデルをデータセットの整形からモデルの事前学習まで作ってみます
以下の記事で推論は試しているので、どのようなものなのかは記事をご確認ください。
開発環境
準備
今回は、学習しやすいように少し変更したものを使うため、以下のリポジトリをcloneして進めます
まずは、以下のライブラリをインストールします
pip install -r .\requirements.txt
データセットの準備
今回は英語のデータセットを使用するため、以下のリポジトリの cmudict-0.7b-ipa.txt を使っていきます
学習に使用できるようにするため、以下のコードで整形をして別ファイルとして保存します
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