Dwango Media Village(ドワンゴメディアヴィレッジ,dmv)

音素の弁別的素性に基づいたアラインメントツール pydomino

日本語音素アラインメントとは、音素単位で書かれた日本語文章とその読み上げ音声データを入力として与えて音声のどの区間で文中の何の音素が読まれたかを割り当てるタスクで、音声変換や音声合成の機械学習データセット作成に使われます。人手による音素アライメントは多くの労力がかかりますが、自動の日本語音素アラインメント手法では人間の割り当てに比べて直観に反した推定結果が得られることがある、という問題があります。そこでより弁別的素性を考慮することでより人間らしい日本語音素アラインメントを行うツール pydomino(https://github.com/DwangoMediaVillage/pydomino)を開発しました。pydomino はオープンソースであり、以下の GitHub レポジトリより pip でインストールしてGPU不要ですぐに使えます。

git clone --recursive https://github.com/DwangoMediaVillage/pydomino
cd pydomino
pip install .

このページでは pydomino のコアアルゴリズムである弁別素性を考慮した音素アライメントの手法とITAコーパスマルチモーダルデータベースを用いた比較実験について紹介します。

音素アラインメントとは?

音素アラインメントとは人が発した音声について、どの時刻で何の音素を発しているかのラベルを付けることです。ただし、音素の並びは最初に与えられています。複数のラベルが同時に割り当てられたり、ラベルが1つも割り当てられてない時刻が存在することはありません。

図1: 音素アラインメント結果の例:「ドワンゴ」と発している音声。ラベルの「pau d o w a N g o pau」は入力としてあたえられる。
図1: 音素アラインメント結果の例:「ドワンゴ」と発している音声。ラベルの「pau d o w a N g o pau」は入力としてあたえられる。

これらのラベルは表1に示す39種類の音素です。ここではおおむねヘボン式ローマ字のように音と対応づけられています。たとえば、”i” は母音の “い”、”u” は母音の “う”、“k” はカ行の子音、”n” はナ行の子音を意味しています。またヘボン式ローマ字にないラベルとして “pau”、“N”、“I”、“U”、“cl” はそれぞれ無音 “pause”、撥音 “ん”、無音化した “i”、無音化した “u”、促音 “っ” を意味しています。

表1:39種類の音素ラベル一覧
pauryrmymny
njzbybdy
kchtsshshy
hvdgygky
fpyptyw
Naiueo
IUcl

したがって音素アラインメントは音声波形データとその読み上げ音素データからそれぞれの音素の発声時刻を予測する問題として次のような問題設定になります。

入力16kHz 単チャンネル音声波形\( \boldsymbol{x} \in [0, 1]^{T} \)
読み上げ音素列\( \boldsymbol{l} \in \Omega^{M} \)
出力各音素が読まれた時刻の区間\( \boldsymbol{Z} \in \mathbb{R}_{+}^{M \times 2} \)

ここで、読み上げ音素列 \( \boldsymbol{l} = (l_1, l_2, \cdots l_M) \) は両端に pau 音素を持ち(\( l_1 = l_M = \mathrm{pau} \))、各音素が読まれた時刻の区間 \(\boldsymbol{Z} = [\boldsymbol{z}_1, \boldsymbol{z}_2, \cdots \boldsymbol{z}_M]^{\top}\) は\(\boldsymbol{z}_m = [z_{m1}, z_{m2}]\) で 音素 \( l_m \) が時刻 \( z_{m1} \)秒 から \( z_{m2} \) 秒の間で読まれていることを表します。

この問題を解くことでテキストを入力とした音声変換(Voice Conversion)やテキスト読み上げ(Text-to-Speech)の声変換モデルの機械学習において、各音素が読まれた時刻の区間を活用できます。たとえば Seiren Voice では音素アラインメントを利用して音声変換の品質を上げています[1]。一般的に各音素が読まれた時刻の区間情報を用意するには人手でのラベリングが必要です。しかしこのラベリング作業には技術が必要でなおかつ時間がかかります。そのため、機械学習によってラベリングを代替することが期待されますが、機械学習によるラベリング結果では人が聞き比べたときに直感に反する結果が得られることがあります。

また近年の研究では、学習時に各音素が読まれた時刻の区間情報を教師ラベルとして用意せずともその内容を自己教師的に獲得する Text-to-Speech が提案されています。しかしそのようにして獲得された区間情報は、実際の音声データと必ずしも一致しておらず、あとで発音のタイミングを修正したい場合にその制御が難しい場合があります。

そこで pydomino は人間の作ったラベルデータに近い区間情報を自動で推定することを目標にしました。そこで音声学に基づいて設計された弁別的素性に着目し、音素アラインメントの性能改善に取り組みました。

いままでの研究

音素アラインメントは一般的にアラインメント重み行列 \( \boldsymbol{A} \in \mathbb{R}^{T' \times M} \) を計算し、それを Dynamic Time Wrapping (DTW)[2] によって各時刻フレームで何番目の音素が読み上げられているかで推定されます。ここで、\( T' \) は入力音声データの時刻フレーム数、\( M \) は読み上げ文に含まれる音素の総数です。

アラインメント重み行列:縦軸が音素、横軸が時間に対応しており左上から右下までの経路上での音素事後確率が最大となる経路がアラインメント結果になる
アラインメント重み行列:縦軸が音素、横軸が時間に対応しており左上から右下までの経路上での音素事後確率が最大となる経路がアラインメント結果になる

このアラインメント重み行列 \( \boldsymbol{A} \) の計算方法はいくつか存在し、ハードアラインメント済みのラベルデータを教師として各時刻フレームで Classification タスクを解くことで計算する方法や[3] [5] やアラインメントされていない音素読み上げデータから CTC Loss により計算する方法[4] [5] [6] があります。また、直接 Loss として表現せずに、音声分離タスクのモデル内に Attention 重みとして導入する手法[7] も提案されています。

key idea:弁別的素性を考慮した音素特徴の設計

音素には、聞こえたときに互いに似ているものとそうでないものがあります。たとえば ”ry”(“りゃ” 行の子音)と “r”(“ら” 行の子音)は似ていますが、”ry”(“りゃ” 行の子音)と ”w”(“わ” 行の子音)は前者ほどは似ていません。このようなよく知られている音素の類似性は、Classification Loss や CTC Loss、Attention ベースの手法などでは明示的に考慮されていません。そこで今回は音素同士の類似度を表現するために、弁別的素性 の定義を参考に以下の表のとおり音素の特徴量を設計しました。+ が陽性、- が陰性、空白欄は未定義です。

音素両唇音歯茎音硬口蓋音軟口蓋音口蓋垂音声門音破裂音鼻音はじき音摩擦音接近音円唇音非円唇音前舌音後舌音広母音半狭母音狭母音子音性共鳴音接近性音節性有声性継続性促音無音
ry-++-----+--+++-+-
r-+------+--+++-+-
my+-+----+---++--+-
m+------+---++--+-
ny--+----+---++--+-
n-+-----+---++--+-
j-++---+--+-+---+-
z-+----+--+-+---+-
by+-+---+----+---+-
b+-----+----+---+-
dy-++---+----+---+-
d-+----+----+---+-
gy--++--+----+---+-
g---+--+----+---+-
ky--++--+----+-----
k---+--+----+-----
ch-++---+--+-+-----
ts-+----+--+-+-----
sh-++------+-+----+
s-+-------+-+----+
hy--+--+---+-+----+
h-----+---+-+----+
v+--------+-+---++
f+--------+-+----+
py+-+---+----+-----
p+-----+----+-----
t-+----+----+-----
y--+-------+-++-++
w+---------+-++-++
N----+--+---++--+-
a-++-+---+++++
i-++---+-+++++
u-+-+--+-+++++
e-++--+--+++++
o+--+-+--+++++
I-++---+-+++--
U-+-+--+-+++--
cl--+
pau--+

これらの特徴を明示的に利用することで、音素同士の類似性を考慮しながらアラインメントの学習が可能になります。

手法:音素特徴量予測による音素アラインメント学習

音素ラベルに対する前処理

学習時と推論時に母音音素 “i” と “I” に紐づく子音に対してその子音に拗音が付随した子音に書き換えます。たとえば “き (k i)” は ky i に変換しています。これは日本語のイ段の発音が口蓋化しており、実際の発音としては拗音の発音と近くなっているためです。つまり「き」は「かくけこ」の仲間ではなく「きゃききゅきぇきょ」の仲間になっています。

音声に対する前処理

16kHzモノラル音源の入力音声に対して、hop 幅 160 で窓幅 400 の hann 窓により短時間フーリエ変換した後 80 次元の 対数 mel スペクトログラムに変換してニューラルネットワークの入力特徴量にしています。つまり、入力の時間フレーム1つあたりは10ミリ秒に対応しており、したがってアラインメントも10ミリ秒単位の予測になります。

学習

学習時の損失は、各音素の特徴量について binary cross entropy \( \mathcal{L} \) を計算しています。

$$ \mathcal{L} = \sum_{t=1}^{T'}\sum_{i \in I} y_{ti} \log \pi_{ti} + (1 - y_{ti}) \log (1 - \pi_{ti}) $$

ここで、\( T' \) は時刻フレーム数、\( I \) は前述した音素特徴量の集合、\(y_{ti}\) は時刻 \(t\) で特徴 \(i\) が陽性かどうかの二値変数ラベル、 \( \pi_{ti} \) は時刻 \(t\) で特徴 \(i\) が陽性である確率でこれがニューラルネットワークの出力にあたります。

推論

本手法では各時刻フレームのアラインメントのために Viterbiアルゴリズム [8] を使用します。このとき、音素の長さを考慮して音素1つあたりの最低割り当て時間を設定してアラインメントします。

Viterbiアルゴリズム を適用する前に、ニューラルネットワークによって得られた特徴量の予測確率 \( \boldsymbol{\Pi} \in [0, 1]^{T' \times |\Omega| }\) をもとに時刻 \(t\) での音素事後確率 \( p_{tv} \) を計算します。時刻 \( t \) における 音素 \( v \in \Omega \) の音素事後確率 \( p_{tv} \) は

$$ p_{tv} = \frac{ \prod_{i} \pi_{ti}^{y_{vi}} (1 - \pi_{ti})^{(1 - {y_{vi}})}}{\sum_{v \in \Omega} \prod_{i} \pi_{ti}^{y_{vi}} (1 - \pi_{ti})^{(1 - {y_{vi}})}} $$

になります。桁落ちを防ぐために実際には対数領域で計算しています。

Viterbiアルゴリズム 改良について

DTW によるアラインメントミスで起こりがちなものとして、ネットワークの予測の時点で読み上げられた音素の一部を予測することができず、Viterbiアルゴリズム で時間フレームを1つだけ割り当ててしまうものがありました。例えば、図2において ”w” のアラインメント重みが割り振られていないことが読み取れます。このとき Viterbiアルゴリズム は ”w” に割り当てる時間を極力短くするような推論をしてしまいます。ですが、本稿の問題設定において入力される音素は音声データ内で読まれたことが保証されているため、割り当てる最低時間フレーム数を導入することでネットワークで予測できなかった音素の発音を保証することにしました。

擬似コードは以下のようになります。\( N = 1\) で一般的な Viterbiアルゴリズム と等価になります。

      \begin{algorithm}
        \caption{Viterbi Algorithm}
        \begin{algorithmic}
          \INPUT $\boldsymbol{P} \in \mathbb{R}^{T' \times |\Omega|},$ $\boldsymbol{l} \in \Omega^{M},$ $N \in \mathbb{Z}_{+}$
          \OUTPUT $\boldsymbol{Z} \in \mathbb{R}_{\ge 0}^{M \times 2}$
          \STATE $\boldsymbol{A} \in \mathbb{R}^{T' \times M} =$\CALL{initialize}{$\boldsymbol{P}, \boldsymbol{l}$}
          \STATE $\boldsymbol{\beta} \in \mathbb{B}^{T' \times M} =$\CALL{forward}{$\boldsymbol{A}, T', N$}
          \STATE $\boldsymbol{Z} \in \mathbb{R}_{\ge 0}^{M \times 2} =$\CALL{backtrace}{$\boldsymbol{\beta}, T', N$}
        \end{algorithmic}
      \end{algorithm}
    
      \begin{algorithm}
        \caption{Initialize}
        \begin{algorithmic}
          \INPUT $\boldsymbol{P} \in \mathbb{R}^{T' \times |\Omega|}, \boldsymbol{l} \in \Omega^{M}$
          \OUTPUT $\boldsymbol{A} \in \mathbb{R}^{T' \times M}$
          \FOR{$t = 1$ \TO $T'$}
            \FOR{$m = 1$ \TO $M$}
              \STATE $a_{tm} = p_{t,l_m}$
            \ENDFOR
          \ENDFOR
        \end{algorithmic}
      \end{algorithm}
    
        \begin{algorithm}
          \caption{Backtracing}
          \begin{algorithmic}
            \INPUT $\boldsymbol{\beta} \in \mathbb{B}^{T' \times M}, N \in \mathbb{Z}_{+}$
            \OUTPUT $\boldsymbol{Z} \in \mathbb{R}_{\ge 0}^{M \times 2}$
            \STATE $t=T'$
            \STATE $m=M$
            \STATE $z_{m1} = T' / 100$
            
            \WHILE{$t > 0$}
                \IF{$\beta_{tm}$}
                    \STATE ${t = t - N}$
                    \STATE $z_{m0}$ $= (t+1) / 100$
                    \STATE ${m = m - 1}$
                    \STATE $z_{m1} = t / 100$
                \ELSE
                    \STATE $t = t - 1$
                \ENDIF
            \ENDWHILE
            \STATE $z_{00} = 0.0$
          \end{algorithmic}
        \end{algorithm}
    
      \begin{algorithm}
        \caption{Forwarding}
        \begin{algorithmic}
          \INPUT $\boldsymbol{A} \in \mathbb{R}^{T' \times M}, N \in \mathbb{Z}_{+}$
          \OUTPUT $\boldsymbol{\beta} \in \mathbb{B}^{T' \times M}$
          \FOR{$t = 1$ \TO $T'$}
            \FOR{$m = 1$ \TO $M$}
              \IF{$t = 1$ \AND $m=1$}
                \STATE $\alpha_{tm} = a_{tm}$
              \ELSE
                \STATE $\alpha_{tm} = -\infty$
              \ENDIF
            \ENDFOR
          \ENDFOR
          \FOR{$t = 1$ \TO $T'$}
            \FOR{$m = 1$ \TO $M$}
              \STATE $\beta_{tm} =$ \FALSE
            \ENDFOR
          \ENDFOR
          
          \FOR{$t = N$ \TO $T'$}
            \FOR{$m = 2$ \TO $M$}
                \STATE $b^{\mathrm{(next)}} = \alpha_{t-N,m-1}$
                \FOR{$n=0$ \TO $N-1$}
                    \STATE $b^{\mathrm{(next)}}$ $= b^{\mathrm{(next)}} + p_{t-n,m}$
                \ENDFOR
                \STATE $b^{\mathrm{(keep)}} = \alpha_{t-N,m}$
                \FOR{$n=0$ \TO $N-1$}
                    \STATE $b^{\mathrm{(keep)}} = p_{t-n,m}$
                \ENDFOR
                \IF {$b^{\mathrm{(next)}} > b^{\mathrm{(keep)}}$}
                    \STATE $\alpha_{tm} = b^{\mathrm{(next)}}$
                    \STATE $\beta_{tm} = $ \TRUE
                \ELSE
                    \STATE $\alpha_{tm} = b^{\mathrm{(keep)}}$
                \ENDIF
              \ENDFOR
          \ENDFOR
        \end{algorithmic}
      \end{algorithm}
    

実験

作った音素特徴の有効性を確認するために、one-hot ラベルと比較実験しました。

ネットワーク構成

比較実験の際に使ったネットワークは MLP1層 + 双方向LSTM 4層 + MLP1層 + Sigmoid関数 で、活性化関数にReLUを使用しています。いずれも隠れunit数は256です。このネットワークには前述の方法で作った対数melスペクトログラムを入力し、弁別素性の logit を出力させ

ました。入力と出力の詳細な設定は次の節に記載します。Optimizer は Adam を使い、学習率 1e-3、スケジューリングなしに設定しました。

データセット

学習にはCSJデータセット [9] を使いました。このとき、データ内の音声を空白区間で15秒以内の音声になるように区切って学習に使っています。弁別的素性のラベルはCSJデータセットのラベルをもとに julius segmentation kit [10] を用いて作り換え、10ミリ秒単位の粗さに作り替えています。このとき、1ミリ秒の位で四捨五入しています。性能評価にはITAコーパスマルチモーダルデータベース [11] からずんだもん、東北イタコ、四国めたんの3キャラクタの読み上げ音声とそのアラインメントを使いました。ITAコーパスマルチモーダルデータベースの正解ラベルは人の手によって作られています。そのため、本稿の実験で性能評価に用いました。

評価指標

pydomino が音素アラインメントツールとしてどれほど良いのかを測るためにアラインメント誤り率を導入しました。連続時間を扱う際は

$$ \mathrm{アラインメント誤り率 (\%)} = \frac{正解ラベルと異なる区間の秒数}{\mathrm{音声データの合計秒数}} \times 100 $$

によって計算できます。

実験ではこのアラインメント誤り率を Viterbiアルゴリズム 出力後のアラインメントデータの両方に対して計算します。

juliusアラインメントとの比較

既存の日本語音素アラインメントツールとの比較をするために、julius segmentation kit を用いてITAコーパスマルチモーダルデータをアラインメントし、その結果と比較しました。実験に使ったモデルは、(one-hot ベクトルラベル, 音素特徴量バイナリラベル) ✕ (口蓋化ラベル書き換えあり, 口蓋化ラベル書き換えなし) の4通りです。この4通りの比較をすることで、音素特徴量ラベルと口蓋化ラベル書き換えのそれぞれの有効性を確認します。結果は以下のようになりました。音素への最低割り当て秒数は50ミリ秒としました。これは後述する実験をもとに設定しています。

表3:julius segmentation kit との比較
アラインメント誤り率(%)
1hot vector / 口蓋化なし14.650 ± 0.324
1hot vector / 口蓋化あり14.647 ± 0.897
弁別的素性 / 口蓋化なし14.186 ± 0.257
弁別的素性 / 口蓋化あり (Ours)14.080 ± 0.493
julius segmentation kit19.258

表3より、one-hot ベクトルよりも音素特徴量のほうが、口蓋化ラベル書き換えなしよりも口蓋化ラベル書き換えありのほうが、ITAコーパスマルチモーダルデータの音素アラインメント誤り率が低いことが分かります。また、提案手法は julius segmentation kit よりも音素アラインメント誤り率が低いことも分かりました。

ITAコーパスマルチモーダルデータの音素アラインメントラベルデータは人手でラベリングされているため、提案手法では julius segmentation kit に比べて人手のそれに近いラベリングができることが示されています。

julius segmentation kit で作ったラベルで学習したにもかかわらず julius segmentation kit よりも人間の聴感に近い音素アラインメント手法であるという目標を達成できている理由は今のところ不明ですが、Deep Image Prior [12] で指摘されているように、ニューラルネットワークの構造そのものが人の手によるアラインメントを生成する事前分布と同じ働きを持っていることによる効果なのではないかと推測しています。

最低割り当て時間フレーム数 \(N \ge 1\) を変化させたときのアラインメント誤り率の変化

音素1つに割り当てる最低時間フレーム数を変化させたときの、アラインメント誤り率の変化を図に示しました。最低割り当て秒数は 10、20、30、40、50、60、70 ミリ秒に設定し、それぞれ Algorithm 1~4 の \(N=1, 2, 3, 4, 5, 6, 7\) に対応します。

図3:最低割り当て秒数によるアラインメント誤り率の変化
図3:最低割り当て秒数によるアラインメント誤り率の変化

図3からわかるように、弁別的素性かつ口蓋化したラベルで学習した音素アラインメントネットワークによる推論結果が最も人手による音素アラインメントデータに近く、さらに1音素あたり最低50ミリ秒を割り当てる音素アラインメントデータが最も人手による音素アラインメントデータに近いことが分かります。各モデルの最低50ミリ秒を割り当てる音素アラインメントデータの誤り率は、表3の音素誤り率の平均と対応しています。

結び

本稿では、弁別的素性の学習に基づく音素アラインメントツールの紹介とその技術詳細について述べました。時間フレーム単位で弁別的素性を予測しそれに基づいて音素事後確率を計算、アラインメントには Viterbiアルゴリズム を用いました。これによって、julius segmentation kit よりも人手による結果に近い音素アラインメントデータを推論できるツールを実現しました。また Viterbiアルゴリズム に音素1つに割り当てる最低時間フレーム数を導入することで、より人手による結果に近い音素アラインメントデータを推論できるツールを実現しました。今後の課題としましては、ネットワーク構造や予測する弁別的素性の洗練による音素アラインメント精度のさらなる向上や、読み上げ文を同時推論することで読み上げ文の入力が不要な音素アラインメントツールの開発が残されています。

参考文献

[1] 変換と高精細化の2段階に分けた声質変換 (2024年4月18日に取得) https://dmv.nico/ja/casestudy/2stack_voice_conversion/

[2] H. Sakoe and S. Chiba, Dynamic programming algorithm optimization for spoken word recognition, IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 26, no. 1, pp. 43-49, February 1978 https://ieeexplore.ieee.org/document/1163055

[3] Matthew C. Kelley and Benjamin V. Tucker, A Comparison of Input Types to a Deep Neural Network-based Forced Aligner, Interspeech 2018 https://www.isca-archive.org/interspeech_2018/kelley18_interspeech.html

[4] Kevin J. Shih and Rafael Valle and Rohan Badlani and Adrian Lancucki and Wei Ping and Bryan Catanzaro, {RAD}-{TTS}: Parallel Flow-Based {TTS} with Robust Alignment Learning and Diverse Synthesis, ICML Workshop on Invertible Neural Networks, Normalizing Flows, and Explicit Likelihood Models 2021 https://openreview.net/forum?id=0NQwnnwAORi

[5] Jian Zhu and Cong Zhang and David Jurgens, Phone-to-audio alignment without text: A Semi-supervised Approach, ICASSP 2022 https://arxiv.org/abs/2110.03876

[6] Yann Teytaut and Axel Roebel, Phoneme-to-Audio Alignment with Recurrent Neural Networks for Speaking and Singing Voice, Interspeech 2021 https://www.isca-archive.org/interspeech_2021/teytaut21_interspeech.html

[7] K. Schulze-Forster, C. S. J. Doire, G. Richard and R. Badeau, Joint Phoneme Alignment and Text-Informed Speech Separation on Highly Corrupted Speech, ICASSP 2020 https://ieeexplore.ieee.org/abstract/document/9053182

[8] A. Viterbi, Error bounds for convolutional codes and an asymptotically optimum decoding algorithm in IEEE Transactions on Information Theory, vol. 13, no. 2, pp. 260-269, April 1967 https://ieeexplore.ieee.org/document/1054010

[9] Maekawa Kikuo, Corpus of Spontaneous Japanese : its design and evaluation, Proceedings of The ISCA & IEEE Workshop on Spontaneous Speech Processing and Recognition (SSPR 2003) https://www2.ninjal.ac.jp/kikuo/SSPR03.pdf

[10] Julius 音素セグメンテーションキット (2024年4月23日に取得) https://github.com/julius-speech/segmentation-kit

[111] ITAコーパスマルチモーダルデータベース https://zunko.jp/multimodal_dev/login.php

[12] Ulyanov, Dmitry and Vedaldi, Andrea and Lempitsky, Victor, Deep Image Prior, 2020 https://arxiv.org/abs/1711.10925

Appendix.1 口蓋化はどういう音素に有効なのか

口蓋化の対象となる子音ラベルの書き換えが特にどういう音素に有効なのかを調べるために、口蓋化の対象となった音素に関してアラインメントの誤り率を比較しました。この実験でも最低50ミリ秒を割り当てる Viterbiアルゴリズム を用いて推論した音素アラインメントとの比較を使いました。

ラベルの書き換え元の音素とその書き換え先(例:か行の場合、それぞれ “k” と “ky”)においてのアラインメント精度の比較のために

の5種類を比較しました。その結果が以下になります。

ラベルの書き換えによって “ny”、“my”、“ry”、“gy”、“dy”、“by” のアラインメント誤り率が改善しているのが分かり、訓練データ内で出現頻度の低い子音に対する音素アラインメントの適用において、人手のラベリングにより近くなることが読み取れます。

子音ラベル書き換え書き換え元の子音の全体の誤り率(%)書き換え先の子音の全体の誤り率(%)い段の子音のみの誤り率(%)書き換え元の子音のい段以外の誤り率(%)書き換え先の子音のい段以外の誤り率(%)
k と kyあり28.11428.15326.17027.08025.638
なし28.11428.47126.93627.08026.388
s と shあり14.45715.2968.7328.5248.197
なし14.45715.2199.6619.5738.225
t と chあり32.26033.16119.92419.80816.535
なし32.26033.17425.51619.80816.936
n と nyあり20.54319.76617.74622.50317.158
なし20.54320.84319.93022.50316.753
h と hyあり16.27416.65319.56620.05119.144
なし16.27415.68019.99920.05119.283
m と myあり17.78517.47621.07731.80817.221
なし17.78517.66228.47031.80816.612
r と ryあり24.41123.71123.00033.35416.881
なし24.41124.97533.11633.35417.244
g と gyあり29.37229.96530.51935.65424.537
なし29.37230.22432.97435.56426.450
z と jあり20.18121.85613.34612.83214.301
なし20.18121.43212.28512.24014.283
d と dyあり24.11725.07232.34836.39630.713
なし24.11724.88133.12436.39630.334
b と byあり26.16725.59830.72038.01118.560
なし26.16726.35535.90338.01117.997
p と pyあり36.40836.36041.71443.46033.970
なし36.48036.79343.74043.46033.290

Appendix.2 音素特徴によるアラインメントで特に精度向上した音素はどれなのか

Appendix.1の実験結果では、教師データに登場頻度の少ない音素の精度の向上がみられました。それならば one-hot ラベル予測から音素特徴予測にしたときにも、登場頻度の少ない音素の精度の向上が確認できるはずです。

このセクションでは、実験のセクションで用いたネットワークを使って各音素ごとの精度を計算しました。この実験でも最低50ミリ秒を割り当てる Viterbiアルゴリズム を用いて推論した音素アラインメントデータとの比較を使いました。one-hot ラベルの書き換えなしで学習したモデルとの比較結果は以下のようになりました。

図4:各モデルによる各音素の精度。音素は左からITAコーパスマルチモーダルデータ内で出現頻度の高い順に並べている

図4からもわかるように出現頻度の少ないにおける精度が向上しているのが分かり、特に “dy” や “v” では音素特徴を使った学習によって精度が向上しているのが分かります。以上より訓練データ内で出現頻度の低い子音に対する音素アラインメントの適用において、人手のラベリングにより近くなることが読み取れます。

Author

Publish: 2024/05/27

Shun Ueda