音音研に行ってきた。「音声CAPTCHAの検討」。

 東大の西本先生が「音音研」という研究会を主催しているということをウェブ上で知ったので、行ってきた。2009年6月18日のことである。発表者は二組いたが、そのうち一組のことを本日の日記では語る。なお、音音研のサイトにも書かれているが、参加者は発表者を含めて八人だった。非常にこぢんまりとした研究会である。

 事前に知らされていた発表要旨に「人間が聞き取ることができ、機械に認識されにくい音声」というフレーズがあったので興味を惹かれて行ってきた。実のところ私は全く別の種類の手法を想像していたのであるが、議題に上がった手法は非常に単純なものだった。すでにこの発表は音声CAPTCHAのための音韻修復効果の検討(PDF)という題名で公開されているので、そこまでなら手法について書いても問題はなかろう。手法自体は古典的なものだった。音声を周期的に消して、その部分にノイズを乗せるというものである。古くから使われている手法ではあるが、どうやら研究の主眼は音声の加工法の提案ではなく、どのように加工法の「有効性」を測るかにあるようだった。難しい研究である。

 そもそも、この研究の目的は、福祉の一種であるようだった。例えば、ブログにコメントを記入するときなどに、人間か自動のスパムのロボットかを判別するためにゆがんだ文字を入力させる画像認証の技術がすでに確立されているが、これは視覚障害者には使用することができない。代わりに、「ゆがんだ」音声でそれをしようということらしかった。すでにgoogleなどではそういった試みが実用化されているそうだが、もっと使い勝手のよいものを作りたいらしかった。そのために技術の有効性の尺度が必要なようである。

 と、ここまでがこのブログに書けることである(というかここまでは上記のPDFに書かれている)。以下、事前に知らされていた数行の発表要旨から私が想像していた「人間が聞き取ることができ、機械に認識されにくい音声」の一例を語る。

 今の自動音声認識というのは、スペクトルのおよそのパワー分布(包絡)を頼りに認識結果を出している。つまり、人間の聴取に問題のない程度に包絡を崩してやればよい。どのように崩すかということだが、何かしらの伝達関数をかけてやればよいと思う。特に、時間によって変化するような伝達関数である。喩えるなら、口を手で覆ったり覆いを外したりを繰り返しながら喋っているような感じの音声を作るということである。

 最も単純なかたちでそれを実現することを考える。まず、同一カットオフ周波数のハイパスフィルタとローパスフィルタを用意する。この二つがなめらかに変化するようにすると、人間にはなんの苦もなく聞きとれるけど、機械が誤認識するような音声が作れるのではないかと思う。

 試しにプログラムを書いてみて、「人間にはなんの苦もなく聞きとれる」というところまでは確認した(確認したといっても私一人が聞いただけだが、これなら聞きとれるだろう)。機械が誤認識するかどうかは確認していないが、そこそこ誤認識してくれるのではないかと思う。これをさらに時間的・周波数的に複雑化させると、多分かなりの誤認識をしてくれることと思う。

 とにかく、「時間変化する伝達関数をかけてやる」というのが聞きに行く前の想像だった。研究会の会場に着いてからそんな想像などすっかり忘れてしまって話し損ねたので、ここに書いてトラックバックを送る。私と主催の先生以外みんな文系の方だったのも、話し損ねた原因である。

 いつものように、SkyDriveにスクリプトと音声をアップロードしておく。なお、ここまでは試行錯誤なしでできるので、信号処理に慣れた修士くらいの学生なら、一日か二日で似たようなスクリプトが書ける。アイディアもまだまだ抽象的なものなので、誰にでも出せるレベルにとどまっている。問題は、ここから先である。