合成音声向けには、音素の分割を自動にしたほうがいいか

※下記は試したわけではなくメモ

 

機械学習向けでは、音を録音したあと、人の手で音素のラベリングが行われている。

そこでの問題点としては

  1. 音素の切れ目が明確ではない。ラベルごとに誤差が発生する
  2. データが多いため複数人でラベリングを行うと、判断基準が人によって異なる
  3. 「あ」と「お」の中間の音をどちらに割り振るかなど、音自体に曖昧さがあり、単語を知っているあまり、音素を推測してしまう
  4. IPA、CSJなど音素に付けられていない音もあるのではないか?
  5. ラベリングした音素では、音の高さなどの情報が失われてしまっている

 

音声の変化ポイントを検出し分割

時系列データの変化ポイントを検出するのには、Bayesian Online Changepoint Detectionといった方法が知られている。

An Evaluation of Change Point Detection Algorithmsという論文でオンラインベイジアン変化点検出の性能が良いと言われている。

 

matlabを使う場合、オンラインベイジアン変化点検出関数はなさそうで、githubなどにあるものを使うか、自前で作る必要がある。

てっとり早く分割だけ試すには、変化点を検出関数としてfindchangeptsというのがある。

findchangepts(y,'MaxNumChanges',10,'Statistic','rms')

ここで問題となるのが分割数を指定しており、上の"10"というのが領域を10分割するという引数にあたる。

 

音声データを大量にバッチ処理することを考えた場合、分割数はデータに応じて変化させたい。

 

ここで、音素の最初と最後の変化部分を分割できることを期待している。

子音から母音に変わり安定するまでの変化点を分割するといった具合だ。

既存のラベリング方法では、ここが丸め込まれてしまっているのではないか、という仮設による。

 

合成音声システムの場合は、入力した文字と音を対応づけしないといけないわけだが、対応付けできない変化点が出てくると想像しており、変化の方法も複数あるだろう。

機械学習に持っていくためには、何かしらかの対応した数字を付けてラベリングすれば解決するのではないだろうか。

 

分割後の有声音や無声音の分類の自動化

有声音と無声音の分類には、ゼロ交差率 (Zero-Crossing Rate)といった方法がある。

 

 

 

n Online Changepoint Detection

Bayesian Online Changepoint Detection

Bayesian Online Changepoint Detection