Archive for August, 2005

すべての単語のサウンドデータを保持するのは事実上不可能なので、検索結果の表示にはどうしてもText-To-Speechの機能が必要になる。Mac OS X上のText-To-Speech (以下、TTS)についてまとめた。

Cocoaには、NSSpeechSynthesizerというクラスが用意されている。使い方は非常に簡単。通常通り、alloc, initしたあとで、そのインスタンスに読ませたいストリングを与えるだけ。
[speechSynth startSpeakingString: string];
標準に用意されている声のリストが, +availableVoicesというクラスメソッドでとれるので、望みのものをインスタンスに -setVoiceすればよい。
この辺のことは、Cocoa Programming For Mac OS X に詳しい。delegateを使って、発声が終わった時点で特定の操作をする(例えば、ボタンを再度enableにするとか)といった方法について触れている。

別の方法としては、NSTextViewの-startSpeaking:(id) senderもある。(ドキュメントには書かれていないが、実は NSApplicationにも speakStringというメソッドがあるらしい。 [NSApp speakString:@”foo”]; でつかえる。)

この、簡単に使えるが、実はCarbonのほうのSpeechSynthesisフレームワークをラップしているだけで、機能が制限されている。発声のスピードをかえたりしたいときには、Carbonの関数を使う必要があるようだ。詳しくは、こちら、あるいはSpeechSynthesis.hを参照してほしい。

しかし、このフレームワークそのものにも重大な問題がある。単純に言うと、英語にしか対応していないのだ。上記のspeakString, startSpeakingStringなどの関数が呼ばれると、入力された文字列は内部の辞書を参照して、音素(Phoneme)の表示に変換され、それが実際のspeech synthesizerに与えられて音に変換される。問題なのは、この音素表示がIPAではなく、英語を対象とした表示になっている点だ(参照)。これでは、世界の言語を表すことはできない。

Appleの標準のTTSを使うのはあきらめて、ほかのシステムを探す必要がありそうだ。IPAの発音表記をすでにDB内に保持している分、TTSシステムのタスクとしてはシンプルになりそうなのだが…

PHAMSサーチエンジンの設計にあたって最も根本にあたる、各音素間の類似度についての参考文献をまとめる。音素間の類似度は、Phonetic Similarityというキーワードである程度まとまった数の論文が見つかった。
その中でも特に以下の論文が、関連分野全体を俯瞰する内容で、非常に役に立った。

Brett Kessler, “Phonetic Comparison Algorithms“, Transactions of the Philological Society, 2005

単語間の音の類似度については、これまであまり研究されていなかった、標準的な方法がまだ確立されていないということがまず書かれている。

Phonetics Similarityと一口に言っても、スピーチの音響的な特性の距離、調音(発音するときの舌の位置、のどの動かし方など) の仕方の距離、認知的な距離、実際の言語のコンテクストの中での距離、歴史的な距離.. どれを測るかによって大きく異なってくる。これまでの研究例をみると調音の距離を使うことが多いようだ。

まず簡単な例としては、音が同じかどうかによって0, 1のスコアを音列にあたえるBinary比較がある。非常に原始的にみえるが、対象とする問題が連続的ではない場合(似ているかどうかを判定するような場合)、より複雑な方法に比べてよい成績をあげるらしい。ただし、当然ながら、どの音とどの音を同じ音としてみるかという別の問題が付随してくる。たとえば、
- 子音を10個のカテゴリーに分類。同じカテゴリーに属するものに1をあたえるといった方法
- さらに有声/鼻音の区別を考慮する方法

もう少し複雑な例としては、調音の特徴を数値化する方法がある。
両唇音(1)から 唇歯音(2)… 声門音(7)までそれぞれ数値を与える。たとえば、/k/のような軟口蓋音(6)と口蓋音(5) /c/は近いが、軟口蓋音と両唇音/p/は大きく異なるといった数量化がなされている。(整数の番号付けにどれくらい意味があるのか疑問? 両唇音と唇歯音の差は、軟口蓋音と口蓋音の差と同じなのか??) さらに、音素の特徴をベクトル量として表し、その距離を測る方法が研究されている。ただし、Binary比較との性能の差は(応用分野にもよるが)それほど大きくはないようだ。

音列内での音素の位置による重みづけも必要。たとえば、同語族を調べたいときには第一音節のが同じであることが非常に重要になる(らしい)。そうした場合には、第一音節の違いに重みをつけることで、より目的に近い答えが得られる。音列全体の比較には、Levenshtein距離を使うのが標準的 (これに関しては別項に改めてまとめる)。

(追記: データベースの世界では、異なるスペルで発音の似た単語(たとえば、SmithとSmyth)を探すための簡単なアルゴリズムが広く使われているようだ。代表的なものとしては、次がある。
Soundex
Metaphone
いずれも英語のスペルに特化している、類似の判定が大雑把という問題があり今回のプロジェクトの用途にはそぐわない。)

Phonethicaは、インタラクティブなシステムを目指しているため、ユーザのクエリーに対して即座に(少なくともユーザがストレスを感じない程度の間に)答えを返すというリアルタイム性が要求される。そのため、検索の精度を多少犠牲にすることもやむをえない。実際にどういったアルゴリズムを採用するかは今後の実験にもよるが、まずは単純に各音素をBinary的に比較し、Levenshtein距離をとる方法を試すことにする。

* 以上は言語学/音声学/音韻学については全くの素人が書いているため、誤った記述が含まれている可能性が多分にあります。詳しい方に間違いを指摘していただけると幸いです。

(徳井)

国際音声記号 IPA: International Phonetic Alphabet に関するリンク/参考文献。

国際音声記号 (Wikipedia)

IPA Handbook
A Guide to the Use of the International Phonetic Alphabet.

本書内でつかわれている音声のサンプルをダウンロードできるサイト

日本語版
国際音声記号ガイドブック—国際音声学会案内

音声学に関するリンク/参考文献。

音声学 (Wikipedia)

Journal of Phonetics
The Journal of Phonetics publishes papers of an experimental or theoretical nature that deal with phonetic aspects of language and linguistic communication processes….

音声学リンク集 (東北大学 後藤氏による)

音声学参考文献 (筑波大学一般言語学研究室)

その他の参考文献
音声学概説
改訂 音声学入門

*単純にPhoneticsだけで検索すると、英語のPhonetics (発音の学習法)のページが多数ヒットする

(徳井)

2005年9月に,フランス国立図書館とパリ国際大学都市で開催されるメディアアートテクノロジーと文化遺産をテーマにした国際シンポジウム ICHIM(International Cultural Heritage Informatics Meeting:国際文化遺産情報化会議、通称イシム)の展覧会部門のキュレーター,Christophe Leclercq氏らとミーティング.

先日のエントリーの通り,我々はICHIM内のTRANSMISSIONSという展覧会において現在開発中のソフトウェアのデモンストレーションを含むプロジェクトプレゼンテーションを行う予定.ということで8月は強化月間.

遠藤拓己


Project Phonethica

Combining scientific technology and art, Phonethica is an interdisciplinary project which explores the diversity of the world, through the phonetics of its 6,000 languages.