自然言語処理の基本的なテクニック
自然言語処理の基本的なテクニック
前回の投稿では、全文検索を例にあげ、その中で形態素解析が果たす役割について解説を行いました。また、形態素解析は自然言語処理のタスク全般に共通して用いられるファンデーションである旨の解説を行いました。
本投稿では、再び全文検索を例にして、検索のヒット率をあげるという観点から、ステミング、読みの取得、同義語拡張、固有表現抽出等の自然言語処理の基礎テクニックを紹介していきます。既にだいぶ聞きなれない言葉が登場したかと思いますが、それぞれ、具体的にわかりやすく説明していきますのでご安心下さい。
ステミング(原型化)
まずはステミング(原型化)という言葉から解説をしていきます。ステム(stem)とは英語で幹の事を指します。自然言語処理の世界では、ステミングは動詞などの格変化のある品詞の原型を取り出す事を意味します。こちらを文章で記述するとわかりにくいかと思いますので、以下に形態素解析を用いて、文章を形態素解析した例、ステミングを行った例をそれぞれ表示します。
- 元の文章: 本を読みます
- 形態素解析済: 本|を|読み|ます
- ステミング済: 本|を|読む|ます
「本を読みます」という文章ですが、通常の形態素解析を施した状態と、ステミングまでを施した状態の違いは、「読み」が「読む」と動詞の原形になった事です。これだけでは正直、多くの方が、これが一体何の役に立つの?とポカンとしてしまうかと思います。なので、また全文検索の例に置き換えてお話をさせて頂きます。
皆さんが、上記の例で、「本を読みます」という文章を含んだドキュメントを検索していると仮定して頂き、検索キーワードとして「本 読む」という言葉を投げたと想定してみて下さい。ステミングを施さない場合、ドキュメントには「本 読み」という形で形態素が登録されているため、このままではヒットせず、このドキュメントが検索対象にならなくなります。ここでステミングを使用していると、ドキュメント側も「本 読む」という変換がなされるので、検索キーワードでヒットするようになります。
このように、ステミングは動詞や形容詞等の活用形の違いの差を吸収して、より多くのドキュメントをヒットさせるテクニックとして有益です。ステミングはMeCabを始めとする、だいたいの形態素解析器がデフォルトでサポートしている機能です。
読みの取得
ステミングの機能と同様に、MeCabを始めとする、だいたいの形態素解析器はデフォルトで形態素の読みを返してくれます。形態素の読みとは例えば、「花」という形態素があった場合に「ハナ」というカタカナの読みを取得する等の意味で、「平仮名」「カタカナ」「漢字」と3つの記述法がある日本語独特の問題点に対する解放になりえるテクニックです。
特に全文検索において、「平仮名」「カタカナ」「漢字」の表現の差は厄介で、先程の「花」という形態素も、場合に応じて「ハナ」とも「はな」とも表記される可能性があります。こういった日本語独特の特性が、日本語の自然言語処理の難易度を、多言語と比較しても非常に大きくしています。上記のようなケースでは、読みの取得のテクニックを駆使すると、「平仮名」「カタカナ」「漢字」の間の表記の違いを吸収でき、全文検索のヒット率の向上に繋げられます。
また、日本語特有の問題として、「情勢」「状勢」等というような、(主に漢字二文字の)同音異義語の存在があります。また、同音異義語はスペルミスの主たる原因でもあるため、この場合、ユーザが「情勢」についてのドキュメントを得たくて、「状勢」と検索キーワードを入力した場合、これらの読みを取得しておけば、対象のドキュメントをヒットさせる事ができるようになります。
類義語(同義語)拡張
類義語 (るいぎご) とは、同一言語において、語形は異なるが意味は互いによく似ており、場合によっては代替が可能となる二つ以上の語。類語ともいう[1]。同義語に等しい[2]。
※日本語Wikipediaより引用
上記が類義語(同義語)のWikipediaの説明ですが、簡単に言うと以下のように、ある単語を別の言い方で置き換えられる単語の事を指します。
- 「父」「父親」「パパ」
- 「母」「母親」「ママ」
こういった類義語は日本語では特に種類が多く、全文検索のヒット率を上げるためには、類義語(同義語)拡張はなくてはならない必須テクニックと言えます。また、全文検索を例にあげて説明しますが、以下の二文をご覧ください。
- 人工知能
- AI
どちらもニュアンス的には全く同じ検索キーワードになりますが、仮に、全ての検索対象ドキュメントに「人工知能」という言葉は入っていても、「AI」という言葉が含まれていなかれば、全くヒットしない結果になってしまいます。
そこで、類義語(同義語)拡張という手法を用いて、「人工知能」という言葉が検索されたら、以下のように「AI」という言葉も検索対象にする等の工夫をします。これを行うと、どちらのキーワードも検索対象になるため、ドキュメントのヒット率を上げる事ができます。
- 人工知能 → 人工知能 + AI
通常、類義語(同義語)拡張は、それようの辞書を用意し、合致するキーワードが入力された時、その類義語にあたるもの全てを検索対象に拡張するように動作させます。
固有表現抽出
固有表現抽出とはこれまた聞き慣れない言葉かと思います。以下が、例によって日本語Wikipediaからの引用した説明文になります。
固有表現抽出(こゆうひょうげんちゅうしゅつ、英: named entity recognition、named entity identification、named entity chunking、named entity extraction)とは、計算機を用いた自然言語処理技術の一つであり、情報抽出の一分野である。文中から固有表現 (Named Entity) を抽出し、それを固有名詞(人名、組織名、地名など)や日付、時間表現、数量、金額、パーセンテージなどのあらかじめ定義された固有表現分類へと分類する。
※日本語Wikipediaより引用
何やら、また複雑な説明でわかりにくいですが、入力された文章から固有表現なるものを抽出して、それを予め定義された分類に分類する事という事はわかるかと思います。これだけではよくわからないかと思いますので、わかりやすい実例を示して行く事にします。それでは以下の文章を見て下さい。
- MDIU社の佐藤さんと柏の葉キャンパスに行く
この文章から固有表現抽出を実行してみると、以下のようになります。
- MDIU:組織名(会社名)
- 佐藤:人名
- 柏の葉キャンパス:地名
上記のように、固有表現抽出では「組織名」「人名」「地名」等に該当する形態素(単語)を抽出して、それぞれを適切に分類します。なぜ、このような事が必要かというと、上記の例を全文検索に照らし合わして考えると、それぞれ、以下のようなメリットがあります。
- 「MDIU」は会社名だという事がわかるので、MDIU社に関するドキュメントを返そう
- 「佐藤」は人名なので、佐藤さんに関係するドキュメントを返そう
- 「柏の葉キャンパス」は地名なので、柏の葉キャンパス地域に関連するドキュメントを返そう
このように、全文検索が固有表現まで把握ができると、全文検索で、より精度が高く、関連性の高い結果を返却する事ができます。また、固有表現抽出の特徴として、上記の「柏の葉キャンパス」に注目して頂きたいですが、普通に形態素解析を行うと、「柏|の|葉|キャンパス」と地名の一部がそれぞれ分割されてしまうかと思いますが、固有表現抽出ではまとめて一つの地名として抽出をできるため、より関連性の高いドキュメントを返却できます。
自然言語処理の各種テクニックの限界
今まで、ステミング、読みの取得、類義語(同義語)拡張、固有表現抽出等、主に全文検索の精度を高めるために用いられる、代表的な自然言語処理のテクニックについて解説をしてきましたが、これらのアプローチにも限界があります。
具体的にどういった事かというと、むやみにステミングや、読みの取得、類義語拡張等を多用してしまうと、本来意図しなかったドキュメントまで検索対象になる事があり、この場合、検索のヒット数は増加しても、検索の精度自体は低下してしまうという自体に陥ってしまう可能性があります。
一般的に検索のヒット数が増加すると、検索の精度が減少する傾向にあり、逆もまた真なりです。このような検索のヒット率と精度のトレードオフの関係は、再現率(recall)と適合率(precision)という関係であらわされるのですが、こちらは次回別記事で詳細を紹介したいと思います。
まとめ
自然言語処理の基本的なテクニックとして、ステミング、読みの取得、類義語(同義語)拡張、固有表現抽出等の解説を行い、また、検索のヒット率と精度のトレードオフの関係について説明をしました。
次回は、検索のヒット率と精度のトレードオフの関係について、より掘り下げて解説を行いたいと思います。