自然言語処理

【初心者向け】自然言語処理の構文解析とは?例、ツールも解説!

みなさんは、自然言語処理についてご存知でしょうか。自然言語処理とは、コンピュータに言語を読み込ませるために行われる技術です。

本記事では、自然言語処理の中でも特に構文解析について、自然言語処理の入門者向けに、わかりやすく解説します。


本ブログを運営しているTech Teacherは、
プログラミング家庭教師サービスを運営しています。
完全マンツーマン・フルオーダーメイド
あなたが必要な指導を提供します。

自然言語処理とは?

自然言語処理とは、ンピュータに英語や日本語などの自然言語を読み込ませる技術です。

コンピュータは文章の意味をそのままの状態では、受け取れません。

自然言語処理は以下のような過程があります。

  1. 形態素解析
  2. 構文解析
  3. 意味解析
  4. 文脈解析

形態素解析は、文章を形態素という単位で分割し、それぞれの形態素に品詞を当てはめていく過程です。
形態素解析について詳しく知りたい方は、以下の記事がおすすめです。

形態素解析とは? 仕組みと形態素解析ツール9選も合わせて紹介!この記事では自然言語処理の一手順である形態素解析について解説します。定義や仕組みはもちろん、実際のプログラムも合わせて解説するので広く理解したい方におすすめです。また、形態素解析の無料ツール9つをまとめているので早速形態素解析を行うことができます。それぞれ異なる機能や特徴があるため、用途に合わせて使い分けましょう。...

構文解析では、文章の構造を解析します。

その後、意味解析で、その文章の意味を解析します。

最後に、文脈解析では、文の背景や文脈を考慮して文章を捉えます。

このような自然言語処理の過程を経ることで、コンピュータは自然言語の意味を捉えます。

本記事では、特に構文解析について説明します。

構文解析とは?

構文解析とは、文の構造を解析する手法です。場合によって、係り受け解析とも呼ばれます。

構文解析の前には、形態素解析を行い、文章を形態素に分解します。この形態素をうまく組み合わせると、文節になります。この文節間の構造を分析するのが、構文解析です。

構文解析で扱う文章の構造は、主に3種類あります。

  • 主語と述語
  • 目的語と述語
  • 修飾語と被修飾語

述語は、動作や様子を表すもので、主語はその動詞や様子の主体になる名詞です。

目的語は述語の対象となる名詞です。

修飾語は副詞や形容詞などが該当し、副詞は動詞や形容詞、形容動詞などを修飾し、形容詞は名詞を修飾します。

この構文解析をすることで、次に続く意味解析や文脈解析ができます。

構文解析の例

では、実際に構文解析してみましょう。

明日は日本史のテストがあります。

この文章を構文解析するために、まず形態素解析します。形態素解析すると、以下のようになります。

明日(名詞)/は(助詞)/日本(名詞)/史(名詞)/の(助詞)/テスト(名詞)/が(助詞)/あり(動詞)/ます(助動詞)/。(記号)/

この文章を構文解析すると以下のようになります。ここでは、以下で説明する構文解析ツールKNPを利用しました。

明日は──┐ <体言>
日本──┐ │ <体言>
史の──┐ │ <体言>
テストが──┤ <体言>
あります。<用言:動>

  • 「明日は」→「あります。」(修飾語と被修飾語の関係)
  • 「日本」→「史の」(修飾語と被修飾語の関係)
  • 「史の」→「テストが」(修飾語と被修飾語の関係)
  • 「テストが」→「あります。」(主語と述語の関係)

このように、構文解析によって、文章の構造を分析できました。

上の例では、構文解析の結果は一つに定まっています。

しかし、構文解析だけでは、文章の意味が一つに定まらない場合もあります

以下の例を見てみましょう。

私は弟と一緒に走っている兄を見つけた。

まず、構文解析の前に、形態素解析しましょう。

形態素解析をすると、以下のようになります。

私(代名詞)/は(助詞)/弟(名詞)/と(助詞)/一緒(名詞)/に(助詞)/走っ(動詞)/て(助詞)/いる(動詞)/兄(名詞)/を(助詞)/見つけ(動詞)/た(助動詞)/。(記号)/

この文章を構文解析してみます。今回も上の例と同様、構文解析ツールKNPを使用しました。

私は──┐ <体言>
弟と──┐ │ <体言>
一緒に──┐ │ <用言:形>
走っている──┐ │ <用言:動>
兄を──┤ <体言>
見つけた。<用言:動>

  • 「私は」→「見つけた。」(主語と述語の関係)
  • 「弟と」→「一緒に」(修飾語と被修飾語の関係)
  • 「一緒に」→「走っている」(修飾語と被修飾語の関係)
  • 「走っている」→「兄を」(修飾語と被修飾語の関係)
  • 「兄を」→「見つけた。」(目的語と述語の関係)

    KNPでは、上のような結果になりました。

    ただ、この文章にはもう一つの解釈があります。

    上の結果では、「私は、弟と一緒に走っている兄を見つけた。」という意味になり、弟は兄と一緒に走っています。

    一方、この例文の場合、以下の解釈もできます。

    「私は弟と一緒に、走っている兄を見つけた。」

    この場合、弟は私と一緒にいて、走っているのは兄一人です。

    構文解析では、この2つの解釈がどちらが正しいかまではわかりせん。両者がどちらが正しいかは、文全体の文脈で変わってくるからです。 そのため、どちらか正しいかを判断するには、構文解析後に、意味解析や文脈解析する必要があります。

    構文解析ツール

    以下では、構文解析ツールを3種類紹介します。

    KNP

    KNPは京都大学の言語学研究室が開発した構文解析ソフトです。

    JUMANによって形態素解析された文章をもとに、文節や基本句間の係り受け関係や格関係、照応関係を出力します。

    ここで、JUMANとは、同研究室が開発した形態素解析ツールです。JUMANは、ネット上の大量の文章をもとに学習していて、高精度な形態素解析ができます。

    構文解析は、上記の例のように、意味が一つに定まらない場合があります。KNPでは、ネット上の大量の文章を分析させることで、意味が一つに定まらない場合でも、より日本語的に自然な方を回答するように設定されています。

    このKNPは、Pythonでも実装できるように、ライブラリpyknpも準備されています。

    KNP公式サイト:https://nlp.ist.i.kyoto-u.ac.jp/?KNP

    Yahoo! JAPN 日本語係り受け解析 Web API

    日本語の文章を係り受け解析(構文解析)できるツールです。

    なお、Yahoo! JAPANでは他にもテキスト解析Web APIを利用して、その他の解析ができます。

    • 日本語形態素解析 日本語を形態素解析します。
    • かな漢字変換 ローマ字やひらがなの文で漢字に直せる部分を漢字にします。
    • ルビ振り 文章にふりがなをつけます。
    • 校正支援 校正作業を補助します。
    • キーフレーズ抽出 特徴的な表現を抽出します。
    • 自然言語理解 日本語の文を理解し、情報を抽出します。

    Yahoo! JAPN 日本語係り受け解析公式サイト:https://developer.yahoo.co.jp/webapi/jlp/da/v2/parse.html

    CaboCha/南瓜

    CaboCha/南瓜はサポートベクターマシーン(SVM)にもとづいた高性能な日本語係り受け解析器です。

    SVMとは、比較的古典的な機械学習手法で、異なるクラスの点同士の距離が最も大きくなるような境界線を求める手法です。

    CaboChaでは、ユーザーが準備したデータをもとに学習させることもできます。

    CaboCha公式サイト:https://taku910.github.io/cabocha/

    データサイエンスを学習するならTech Teacherで!

    『Tech Teacher』3つの魅力

    魅力1. オーダーメイドのカリキュラ

    『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。

      魅力2. 担当教師によるマンツーマン指導

      Tech Teacherでは完全マンツーマン指導で目標達成までサポートします。
      東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
      そのため、理解できない箇所は何度も分かるまで説明を受けることができます。

      魅力3. 3,960円/30分で必要な分だけ受講

      Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。

      まとめ

      ・魅力1. 担当教師によるマンツーマン指導

      ・魅力2. オーダーメイドのカリキュラム

      ・魅力3. 3,960円/30分で必要な分だけ受講

      質問のみのお問い合わせも受け付けております。

      まとめ

      構文解析について説明してきました。

      構文解析は、自然言語処理で行う過程の一つです。

      自然言語処理は、コンピュータが自然言語を分析するための手法です。自然言語処理技術は私たちの身近に使われていて、例えば検索エンジンに利用されています。

      構文解析は、主語と述語、目的語と述語、修飾語と被修飾語の関係などを分析し、その後の意味解析、文脈解析につなげます。

      構文解析は、結果が一つに定まる場合も多いですが、中には一つに定まらない場合があります。その際、文章の意味はのちの意味解析や文脈解析によって意味が一つに定まります。
      構文解析ツールには、KNPやYahoo!係り受け解析、CaboChaなどがあります。

      今回は構文解析について説明しましたが、自然言語処理は他にもさまざまな話題がある分野です。他のTech Teacherの記事も読んで、より自然言語処理技術の理解を深めてください。