Home Artists Posts Import Register

Downloads

Content

前回した、リストの「最適化」ですが、

あれは、純粋に必要なエイリアスを、

「前からの要素を拾っていって最大効率になる手法」といえます。

⇒つまり貪欲法です。


ここで別途、疑問に思ったのが

「辞書データとして使用している、cmdict全体を「もし録ったら」というダミーデータを仮に作って(*1)、oto.iniを生成させ、それを上記の貪欲法の手法で単語を抜き出せば、cmudict全体からミニマライズした英単語リストが作れるのではないか?」という疑問です。

結果、それらしいリストにはなります。ただ以下の図を見てもらえれば分かりますが、正確にはあまりよくないリストになります。

ソートされた単語リストを使えば、当然、前から単語が選ばれがちになります。

1132単語で収録できるようですが、そのうち716個が「a」から始まるものとなってしまいます。これはよくありません。

not_good_at_cmudict

これを、プログラミングよわよわでも実装できそうな、多点出発局所探索法を使用して、最適化を行いました。

50回試行させると最終的に200個くらい減って、904単語を録ればcmudict全体の音素を録れるリストができました。

reclist_cmudict.dict

逆にこの結果から、

リストの英単語数が900ぐらいを超えているのであれば、読みやすさを重視するあまり、冗長部分が過分になっていることがわかります。


じゃあ、

「自分が作っていたリストでそれをこれやったらいくつ減るのかな?わくわく!」

って思って実行してみました。

その結果、617単語だったところ、571単語まで減り、更に46語も減らすことができました。かなり現実的なリストになってきてる実感が湧いてきていて、自分としてもなかなか良いものができつつあるんじゃないのかな?と思ってしまうところであります




(*1)ダミーデータを作る処理

index.csvを分解して、

=====sample.txt=====

ダミーラベル時刻 ダミーラベル時刻 sil

ダミーラベル時刻 ダミーラベル時刻 ラベルname

ダミーラベル時刻 ダミーラベル時刻 sil

===== =====

という感じで分解するものを作れば「録った」ことになる。

…まぁ、いちいち実際にtxtファイルを作らずにデータとして処理した方が速そうですが…

Files

Comments

No comments found for this post.