機械学習にとって重要な「自然言語処理」について説明します。
「自然言語」とは、人が日常に使っている日本語や英語などの言語のことです。コンピュータで使用するC言語やJavaなどのプログラミング言語と区別するため、このような呼び方をしています。自然言語は、人間の長い歴史の中で自然に発達してきたため、プログラミング言語と比べると、曖昧性が非常に高く、「自然言語処理(Natural Language Processing)」という特別な処理を行う必要があります。それでは、この特別な処理とはどのような処理でしょうか。
コンピュータは、原理的に数値しか扱うことしかできません。アルファベットや漢字を扱う際には、数字のかたまりである「コード」を割り当てます。しかし「単語」となると、その数は膨れ上がるため巨大な辞書となります。さらに単語を組み合わせた「文章」となると、無限の組み合わせになるためコード(数値)を割り当てることは、非現実的です。
このため考え出されたのが、単語や文章の「特徴量」です。この特徴量を数値化することで、文章を数値で扱えるようになり、文章のデータ量を大幅に圧縮することができたのです。
単語や文章の特徴量は、英語の場合では上の図にあるような「N-gram処理」や「TF-IDF処理」が一般的です。どの文章でも使われているような単語は重要でなく、対象となる文章内では高頻度の単語が特徴的である、というのが基本的な考え方になります。
それでは、まず英語での自然言語処理の方法です。
この自然言語処理は、コンピュータが未だに人間と自然に会話ができないことからも分かるように、まだまだ研究段階にあります。しかし英語のように、単語と単語の間がスペースで区切られている言語は比較的処理が容易だったため、先行して発達しています。
上のフロー図は、英語の文章をコンピュータで扱えるようにするための一般的な「前処理」です。文章を単語に分割してクリーニングした後、その文章の「特徴量」を抽出することで「ベクトル化」します。このベクトルという数値にすることで、文章同士の類似度を比較したり、意味を抽出したり、機械翻訳することが可能となります。
ここではベクトルとしましたが、前述のように自然言語処理は未だに発展途上の学問のため、国や人によっては「連想配列」、「hash table」など様々な呼び方があるため、注意が必要です。
次に日本語での自然言語処理です。
日本語をコンピュータで処理をするためには、まず国語辞典や文法の知識、一般常識等をデータベース化しておく必要があります。しかし、自然言語は生き物のように変化し、常に新しい言葉、新しい用法も生まれ、一つの言葉が多数の意味を持ったり、その意味も変化します。
人間も言語情報を完全に処理している訳ではなく、多数の解釈の中から最も「妥当な」解釈を判断していると言われます。その「妥当性」を、コンピュータに実装することは難しいのです。
自然言語処理の難しさの根本原因は、自然言語が本質的に持ち、多様な解釈を可能とする「曖昧さ」にあるのです。
自然言語処理の最も身近な例は、「かな漢字変換」です。また日常生活欠かせない「検索エンジン」は、日本語の自然言語処理のおかげで利用することができ、「機械翻訳」の研究成果で自然言語処理は発達してきたとも言えます。
日本語は、英語のようにスペースで単語が区切られていないため、まず文章から単語を切り出す必要があります。この処理を「形態素解析」と言います。次に文章の構造をコンピュータで取り扱える形式にしますが、一般的には「係り受け構造」で表現します。そこからさらに、「意味解析」、「文脈解析」と進みますが、未だに研究段階であり精度の良い確立した手法はありません。詳しくは専門書を参考にしてください。
日本語処理の基本である前処理(形態素解析)を説明します。
英語圏で開発された優れた技術やサービスを日本語で利用しようとしても、単語区切りにスペースを設定しているため日本語では正常に動作しません。このような問題を解決するためにも、日本語の自然言語処理において、単語を切り出す「形態素解析」は非常に重要な技術です。
この形態素解析では、単語分割に加えて「品詞付与」などの処理も同時に行います。品詞付与とは、文章中の単語が名詞か動詞かといった品詞に分類する処理です。この品詞情報を用いることで、単語分割処理の精度が高まり、文章中から名詞だけ取り出してキーワードにするようことが出来ます。
この形態素解析ソフトウェアとして有名なのが、「MeCab」というオープンソース(OSS)です。非常に優れた性能を持ち、しかも誰でも無料で使えるので、興味のある方はWebサイトからダウンロードして勉強してみてください。
このMeCabがあれば、機械学習で利用可能な英語用の自然言語処理でも、ある程度利用が可能となります。単語の類似度計算程度なら簡単に利用できるようになります。