コンピュータ言語と自然言語

2009/12/01 よろずSEの戯言

はじめまして。なずき推進開発担当の菅原です。

私は開発担当なので、開発者側視点から見たコンピュータにおける自然言語処理についていろいろ書いていこうと思います。

「なずき」は自然言語処理というコンピュータにとっては一見相性の悪い処理を実現しています。しかし今では一昔前はできなかった大量の演算処理が可能となりました。そしてインターネットの普及によりさまざまな、そして途方も無い膨大なテキスト文書が日々生成されています。

それらのリソースを生かして今のなずきがあります。しかしそれらのリソースを使っても人間のように柔軟に言語を理解し、それに応じた処理を実現することは未だ困難です。

コンピュータのプログラミング言語は曖昧さが基本的にありません。例えばコンピュータに「hello world」と出力させたいとします。C言語というプログラミング言語だと、


     #include 

     void main(void){
     printf(“hello world\n”);
     }

となります。しかし日本語で「hello world」と出力させる命令をさせたい場合はどうなるでしょう?「『hello world』とモニタに出力しろ」「モニタに『hello world』と出力しろ」「『hello world』という文を表示しろ」などなど、いろいろな表記があります。

コンピュータはこの表記のゆれを理解することができません。0か1かの世界であり、曖昧さは許されないのです。しかしその曖昧さにあえて挑んでいるのが「なずき」です。

人間はどうして先の例のような曖昧な文を理解できるのでしょう?
その謎が解ければ真の意味でコンピュータが自然言語を理解する日が来るでしょう。

遠い将来は判りませんが、少なくとも今は未だ謎は解けていません。ではコンピュータに曖昧な言語を理解させるにはどうすればよいのでしょう?そこでインターネットにある大量の文書リソースが役に立ちます。曖昧さを膨大な文書によって「学習」し、表記ゆれによる曖昧さを「学習」したデータで吸収してしまえばよいのです。

理屈は簡単ですが、いざ実現しようとすると非常に困難です。インターネットの膨大な文書を単語レベルにまで落とす作業、「形態素解析」をしなければなりません。英語系の言語であれば単語単位に区切りがあるので比較的容易に実現できますが、日本語は切れ目が句読点程度しかなく、この分解処理は困難でコンピュータの処理量は膨大なものとなります。
また文書を解析するときは、蓄積した膨大な学習データから適切な意味を探してこなければならないのです。

これらの処理をいかに高速に処理するかが開発側に課せられている課題でもあります。

今回は初回ということでコンピュータによる自然言語処理の概要に触れてみました。次回は趣を変えて先日開催された「マッシュアップコンテスト」でのWebAPIの話について触れようと思います。

今後ともよろしくお願いします。

Yahoo!ブックマーク  Googleブックマーク  はてなブックマーク  del.icio.us  newsing