自然言語処理

【コードあり】MeCabの形態素解析を実演!理論・実装の基本を解説!

「MeCab」は、形態素解析エンジンとして広く利用されています。Pythonのツールや形態素解析のエンジンを探し始めたばかりの方のなかには、下記のような疑問や興味がある方も多いのではないでしょうか?

  • MeCabって何?
  • MeCabではどんなことができるの?

    今回は、MeCabによる形態素解析の流れやできること、使える辞書などの基本的な理論をわかりやすく解説します。また、形態素解析の実装手順の解説を通じて、MeCabを使いこなすための実装スキルの基礎も理解できます

    MeCabの基本を習得したい方や形態素解析に興味がある方は、ぜひ最後までご覧ください!


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

    MeCabとは?

    MeCabとは、日本語の形態素解析が可能な解析エンジンのことです。文章を日本語の文法ルールに基づいて単語に分割したり、各単語の品詞情報を出力したりなど、あらゆる形態素解析を自動で行えます。また、MeCabはオープンソースでPythonやRなど、さまざまなプログラミング言語で使えるのも特徴です。

    日本語は英語のように単語間に空白がないため、文章を単語や品詞ごとに区切るのが難しい言葉といわれています。

    • 日本語:これはペンです。
    • 英語:This is a pen.

      そのため、自動的に日本語文章から単語を抽出できるMeCabは、多くのシーンで活用されているのです。

      なお、形態素解析について詳しく知りたい方は、下記をチェックしてみてくださいね!

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

      MeCabによる形態素解析の流れ

      MeCabによる形態素解析の処理の大まかな流れは、下記のとおりです。

      1. 文章を単語への分かち書き
      2. 各単語の品詞を出力
      3. 活用されている単語を判定処理

        例えば「MeCabを使って形態素解析をします」は、下記のように処理が進みます。

         引用:MeCabによる形態素解析入門:都知事選のテキストデータで実践!/codExa

        まずMeCabでは、登録されている「辞書」に基づいて文章を単語へ分かち書きを行います。

        辞書とは、単語の品詞情報をまとめたもの

        引用:オリジナル辞書/コーパスからのパラメータ推定/taku910.github.io

        次に、分かち書きした各単語に対して、名詞や動詞など品詞を決めます。そして、活用されている単語を判定して、活用語尾の行・活用形の種類・接続助詞・原形を出力して終了です。例えば「使っ」に対しては、「五段活用・ワ行・連用形・テ接続・使う」が出力されます。

        MeCabでは辞書から単語と品詞を特定する際の解析アルゴリズムに「bi-gramマルコフモデル」を採用しており、未知語に対するスムーズな推定が可能です。

        bi-gramマルコフモデルとは、単語の品詞や意味を無視して2文字ずつに分割するモデルのこと

        引用:【技術解説】bi-gramマルコフモデル/MIERUKA

        さらに、識別モデルには「CRF」を使用しているため、辞書への掲載数が少ない単語でも素早く推論して処理することができます。

        CRFとは、単語に対する品詞を条件付き確率により求めるモデル

        引用:日本語形態素解析の裏側を覗く!MeCab はどのように形態素解析しているか/cookpad

        MeCabでは、bi-gramマルコフモデルとCRFを採用することで、従来の形態素解析エンジンよりも高速で高い精度を実現できています。

        MeCabでできること

        MeCabがあらゆる自然言語処理シーンで使われている理由の一つに、サポートしている機能の多さが挙げられます。そのため、MeCabでは下記のようにさまざまなことができます。

        • 未知単語推定
        • 分かち書き
        • N-Best解の出力
        • 読みと発音の取得

          これから、それぞれどのようなことができるのかを出力画像と一緒に解説します。MeCabの機能を使いこなすためにも、一つずつチェックしておきましょう。

          未知語処理

          未知単語処理とは、MeCabを使用する際に指定した辞書において解析対象の言葉が未登録の場合に、品詞を推定してくれる処理のことです。下記は、MeCabが標準辞書のIPAdicを使って、「ペンパイナッポーアッポーペン」を未知語として処理している例です。

          引用:新語・固有表現に強い「mecab-ipadic-NEologd」の効果を調べてみた/LINE Engineering

          「彼女・踊っ」などの既知語に対しては読み仮名も出力して、未知語に対しては品詞名だけ推定する処理が行われていることがわかります。

          またMeCabでは、未知語専用の辞書や判定基準を作ることも可能です。例えば、下記のように未知語判定をする単語の最低文字数(長さ)や、既知語と未知語が混ざっているときの動作条件(動作タイミング)などを独自に設定できます。

          引用:オリジナル辞書/コーパスからのパラメータ推定/taku910.github.io

          未知語処理は、新しい言葉が多く使われるSNSでの文章を解析する際に役立ちます。

          分かち書き

          分かち書きとは、文章の単語間に空白文字を挿入する処理のことです。具体的には、日本語の文章「これはペンです」を英語の文章「This is pen」のように品詞で分けることを指します。

          例えば「かつおたたき」は、下記のように「かつ お たたき」と分かち書きされます。

          引用:MeCab の形態素解析誤りを修正する生起コストの求め方/あらびき日記

          MeCabの分かち書きは、単語の出現率を指す「単語生起コスト」と、品詞間のつながりやすさを指す「連接コスト」の合計コストが最小になる解を出力します。考えられる分かち書き候補のうち、辞書上においてもっともよく使われる単語同士が、もっとも自然な文脈を構成するものを出します。

          そのため、「かつおたたき」の場合には「かつお たたき」などの候補も挙げられますが、単語生起コストと連結コストがもっとも小さい「かつ お たたき」が分かち書きの結果になるのです。

          なお生起コストと連結コストは、「-F」オプションと「単語生起コスト (%pw)・連接コスト (%pC)・単語生起コスト+連接コスト(%pc) 」を指定することで、下記のように調べられます。

          引用:日本テレビ東京で学ぶMeCabのコスト計算/mwSoft

          各コスト値は分かち書きの内訳を見る際や、オリジナル辞書を作る際に活用してみてくださいね!

          N-Best解の出力

          N-Best解とは、1つの文章に対して分かち書きの候補を複数出力する処理のことです。下記は「すもももももももものうち」をN-Best解のうち、3つまでの出力に指定した場合の出力した例です。

          引用:MeCabのN-Best解を出力する/分析ノート

          下記の3通りが出力されていますね。

          • すもも も もも も もも の うち
          • すもも も もも もも も の うち
          • すもも もも も もも も の うち

          MeCabでは最大512通りまで、候補となる解の出力が可能です。ただし、どのようなケースでも512通りの解を出力するのではなく、512と指定する場合でも探索できる最大数しか出力されません。

          N-Best解は、すももの例にあるように、単語の切り方によって複数の候補が考えられる文章の解析で活用できます。

          読みと発音の取得

          MeCabでは、文章の読み方や発音の仕方を出力する処理も可能です。例えば「私は横浜に住んでいます」を読み出力モードの「Oyomi」で指定すると、下記のように文章の読み方のみが出力されます。

          引用:Windows環境のPython3でMeCabを使ってみようGIS奮闘記

          また、全出力モードの「Odump」では、下記のように読み方と発音の両方を取得できます。

          引用:Windows環境のPython3でMeCabを使ってみようGIS奮闘記

          音声解析や合成に使う際には、発音だけを取得するようにプログラムを変更するなど、モードを変えるだけでニーズに合わせて使い分けられます。

          MeCabと連結できる主な辞書

          MeCabでは、ほかの辞書との連結やオリジナル単語を収録した自分専用の辞書を作成できます。MeCabと連結できる主な辞書は下記のとおりです。

          辞書名 特徴
          IPAdic ・MeCabで使える標準辞書

          ・日本語の基本的な品詞が収録されている

          NAIST jdic ・IPA品詞体系に基づいている

          ・表記ゆれや複合語の情報を持っている

          Juman ・語形や発音形の階層構造を持っていて、語形が変わっても同じ見出しを与えられる

          ・表記揺れや口語表現もある程度解析できるため、単語解析の精度が高い

          ・長音化(うれしー)や小文字表記(かわぃぃ)の認識も可能

          UniDic 国語研短単位に基づく単位設計や読み・発音に加えて、アクセント型の情報も持っている
          mecab-ipadic-NEologd ・はてなキーワードやハッシュタグなど、多数のWeb上にある言語資源から新語を追加し続けている

          ・固有表現やフリガナの組を約319万組収録

          辞書ごとに解析できる内容が異なるため、下記のように標準の「IPAdic」では解析できなかったものが「mecab-ipadic-NEologd」を使えば解析できる場合もあります。

          引用:MeCabを入れてサクッと形態素解析をしてみる/Zeen

          上図の「IPAdic」の場合には「呪術廻戦」には対応できていませんが、下図の「mecab-ipadic-NEologd」では1つの固有名詞として出力できています。

          標準の辞書に別の辞書を追加すれば、新しい単語に対しても正しく推定ができるようになるのです!そのためMeCabの解析力を上げるうえでは、タスクに合わせて適切な辞書を選ぶことが重要です。

          PythonによるMeCabの基本的な使い方

          これまでのMeCabの概要や辞書の内容を踏まえて、ここではPythonでMeCabを使う方法を解説します。今回のテーマは、PythonでMeCabと辞書のインストール方法、MeCabによる形態素解析の実装方法を理解することです。

          MeCab実装の手順は下記のとおりです。

          • MeCabのインストール
          • 辞書のインストール
          • MeCabで形態素解析を実装

            今回紹介する内容はもっとも基本的な実装手順の解説なので、MeCabで形態素解析をしたい方はチェックしておきましょう

            なお、実行環境は「Google Colaboratory」です。

            MeCabのインストール

            まずMeCabをインストールする必要があります。MeCabインストールの実装コードは、下記のとおりです。

            # IPAdic辞書がサポートされているMeCabをインストール
            !sudo apt install mecab
            !sudo apt install libmecab-dev
            !sudo apt install mecab-ipadic-utf8
            
            # pipでインストール
            !pip install mecab-python3
            

            Google Colaboratoryでgithub上のファイルをインストールする際には、「!」を先頭につける必要がある点に注意しましょう。

            最後に、「Successfully installed mecab-python3-1.0.8」と表示されたらインストール完了です。

            辞書のインストール

            MeCabでは標準で「IPA辞書」がインストールされているため、標準辞書で問題ない場合にはインストール不要です。今回は辞書を追加で使用したい方向けに、「NEologd辞書」を追加する場合を紹介します。

            下記がNEologd辞書を追加する場合の実装コードです。

            # githubからインストールする
            !git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git > /dev/null
            !echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n > /dev/null 2>&1
            # エラー対策
            !ln -s /etc/mecabrc /usr/local/etc/mecabrc
            

            上記が問題なく実行されたら、下記のコードでNEologd辞書が保存されている場所を確認してみましょう。

            !echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
            

            下記のように保存場所が返ってきたらOKです!

            MeCabで形態素解析を実装

            Mecabと辞書のインストールが完了すれば、次はMeCabで形態素解析の実装を行いましょう!実装コードは下記のとおりです。

            # MeCabのインポート
            import MeCab
            
            # 辞書が格納されているpathを格納
            path = "-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd"
            
            # 解析する文章を格納
            str = "AI学習の悩みや疑問は、Tech Teacherにお任せ!"
            
            # MeCabのTaggerメソッドを呼び出す
            # 辞書指定
            tagger = MeCab.Tagger("path")
            
            # MeCabによる形態素解析の結果を表示
            print(tagger.parse(str))
            

            辞書を追加する場合には「”-d /…/mecab-ipadic-neologd”」のように、Taggerクラスの引数で設定する必要があります。-dは「–dicdir」の略で、使用する辞書のURLを指定する際に使います。

            上記の実装コードを実行すると、下記のように形態素解析の結果が出力されます。

            AIが固有名詞として扱われている点など改良の余地はありそうですが…「学習・悩み」など一般的に使用される単語はしっかりと正しい品詞を出力できていますね。

            以上のように、PythonではMeCabを簡単に使えます。そのため形態素解析を自動化したい方は、Pythonを習得することをおすすめします!

            データサイエンスを学習するなら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分で必要な分だけ受講

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

              まとめ

              MeCabとは、日本語用の形態素解析エンジンのことです。分かち書き・読みの取得・未知語推定・複数の分かち書き候補の出力など、さまざまなことに対応しています。

              また、オープンソースのためRやJavaなどさまざまなプログラミング言語で使用できますが、特にPythonではMeCabの実装が簡単です。そのため、MeCabを使いこなすうえでは、まずPythonのスキルを身につけるとよいでしょう。

              未経験からMeCabやPythonによる形態素解析のスキルを習得したいなら、「Tech Teacher」がおすすめです!「Tech Teacher」では、豊富なAIの経験を持った講師から直接指導してもらえるため、PythonやMeCabの使い方を迅速に習得できます!興味がある方は、お気軽に「資料請求・無料体験」にお申込みください。