卿少納言

卿少納言

JavaScript & Japanese, Python & Polyglot, TypeScript & Translate.
zhihu
github
email
x

Mecab インストールガイド

少し詳しく日本語自然言語処理で使用されるツール [[Mecab]] のインストール方法を紹介します。

Mecab インストールガイド#

前書き#

少量の分析だけであれば、オンラインで利用できるツール、例えば Web ちゃまめ で解析できます。

Mecab のインストールに関するチュートリアルは多くありますが、よく見ると、しばしばあまりにもざっくりと書かれています。唯一、日本語分詞器 Mecab ドキュメント 我愛自然言語処理という公式ドキュメントの翻訳記事は、じっくり読む価値があります。

また、Mecab 日本語分詞ツールの簡単な使用 - FreeMdict Forum の関連ディスカッションも読む価値があります。

他にも良いチュートリアルがあれば、ぜひ補足してください。

本題に入る前に、「形態素解析」に影響を与える 2 つの重要な要素について簡単に触れておきます。それは、異なるアルゴリズムに基づいて開発された形態素解析器と、形態素解析辞典です。

解析器はたくさんありますが、例えば awesome-japanese-nlp-resources では、さまざまなプログラミング言語で開発され、さまざまな使用シーンに最適化された解析器が見つかります。

しかし、形態素解析辞典は比較的単一で、現在一般的には ChaSenJUMANUnidic 辞書 の 3 つが主流です。その中で、ChaSen の最新バージョン 2.4.5 は 2012 年 6 月 25 日に更新され、JUMAN の最新バージョン 1.02 は 2017 年 1 月 12 日に更新され、Unidic 辞書だけが最近 5 年間で年に 1 回の更新頻度を維持しています。

現在、最も広く使用されているオープンソースの形態素解析器は Mecab であり、以下に Windows でのインストール方法を説明します。「形態素解析 = 形態素解析器 + 形態素解析辞典」を覚えておけば、他の形態素解析器のインストールもそれほど難しくはありません。

まず、バックアップのインストールファイルを提供します:
https://www.123pan.com/s/iGz0Vv-svEVh.html

インストールパッケージを使用したインストール#

まず、最も安全な方法を紹介します。デフォルトの解析形式が必要な人に適しています。

まず、公式サイト MeCab: Yet Another Part-of-Speech and Morphological Analyzer から公式が提供するインストールパッケージをダウンロードします:https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7WElGUGt6ejlpVXc(バックアップインストールパッケージの対応パス:形態素解析 > 形態素解析器 > mecab)。

(オンラインではさまざまなサードパーティのライブラリが見られ、その中には Mecab のインストールパッケージが付属しているものもあるため、インストールは不要ですが、バージョンが最新の 0.996 ではない可能性があるため、本記事のように自分で一からインストールすることをお勧めします。)

インストール時には utf-8 エンコーディングにチェックを入れ、他の場所はそのまま次へ進めば大丈夫です。

|500

注:プログラムのパスを変更することもできますが、変更後は手動で環境変数に追加する必要があるかもしれません。実際、Mecab の本体プログラムはそれほど大きなスペースを占めないため、パスを変更する必要はないと思います。(問題が発生した場合、再インストールしなければならないかもしれません 2333)

ここまで来れば、実際にはインストールが完了したことになります。次はコマンドラインから呼び出すだけです。具体的なコマンドラインは 日本語分詞器 Mecab ドキュメント 我愛自然言語処理 を参考にしてください。

mecab-python3 を使用したインストール#

上記の方法は呼び出しがあまり柔軟ではなく、大量のカスタマイズされたデータを処理する必要がある場合には対応できません。また、公式も macOS のインストールパッケージを提供していないため、次に Python を使用した方法を紹介します。

まず、サードパーティライブラリ mecab-python3 をインストールします:

pip install mecab-python3

次に、以下のコマンドを使用して unidic-lite 辞書をインストールし、切り替えます。

pip install unidic-lite
pip install --no-binary :all: mecab-python3

その後、以下のコードを実行してテストを行います。エラーが出なければ、インストールは完了です。

import MeCab
tagger = MeCab.Tagger("-Owakati")
print(tagger.parse("天気が良いから、散歩しましょう。").split())

tagger = MeCab.Tagger()
print(tagger.parse("天気が良いから、散歩しましょう。"))

|500

直面する可能性のある問題#

Mecab は C++ で開発されたツールで、オンラインで多くのツールを見つけることができます。しかし、環境設定の段階で予期しない問題に直面することがよくあります。ここではいくつかのフィードバックを記録します:

以下は amob からのフィードバックです。

まず、pip install で C++ ベースの Python ライブラリをいくつかインストールする必要があります。そのためには、Visual Studio に付属のコマンドライン「Native (or Cross) Tools Command Prompt」を実行する必要があります。システムのデフォルトの cmd ではありません。
また、以前に見たどの厄介な mecab チュートリアルか忘れましたが、mecab はコマンドラインのデフォルトエンコーディングが文字を表示できないため、レジストリに autorun エントリを追加してデフォルトを UTF-8 に設定しました。これも Visual Studio 環境の正常な動作に影響を与えます。。。
それから、'Microsoft Visual C++ 14.0 is required' というエラーが出て、pip install --upgrade setuptools と一言実行するだけで解決しました。
参考ウェブページ:
visual studio:x64 Native Tools Command Prompt for VS 2019 初期化失敗_script “vsdevcmd\ext\active” が見つかりませんでした。-CSDN ブログ
python pip on Windows - command ‘cl.exe’ が失敗しました - Stack Overflow
‘Microsoft Visual C++ 14.0 is required’ in Windows 10 - Microsoft Community

カスタム辞書#

インストールパッケージでインストールされた Mecab に付属の辞書は ipadic で、この辞書の最終更新は 2003 年 5 月です。

mecab-python3 を使用してインストールした unidic-lite は、README ドキュメントによると、2013 年のバージョン 2.1.2 です:

現在、2013 年の最新リリースである Unidic 2.1.2 を使用しています。これは PyPI 経由で配布するのに十分小さいです。

解析精度に対する要求がある場合は、日本国立国語研究所が維持する Unidic 辞書 のインストールをお勧めします。

特別な要件がなければ、「現代書き言葉 UniDic」の最新版をダウンロードすればよいです https://clrd.ninjal.ac.jp/unidic_archive/2302/unidic-cwj-202302.zip(注:2023 年 3 月 24 日更新、2024 年 2 月 23 日に最新版として確認)(バックアップパス:形態素解析 > 形態素解析辞典 > UniDic)

ファイルを解凍する際は、フォルダ名に注意し、できれば unidic-cwj-3.1.1 にしてください(もしこのように命名されていない場合は、後続のコードの dic_path を修正してください)。

|500

その後、以下のコードをテストすればよいです。

import os
import MeCab

# 以下のパスは実際のインストールパスと一致させてください。スクリーンショットと一致させるために、フォルダ名を変更しました。
dic_path = "D:\00temp\unidic-cwj-3.1.1"
tagger = MeCab.Tagger(
    '-r nul -d {} -Ochasen'.format(dic_path).replace('\\', '/'))

text = "天気が良いから、散歩しましょう。"
print(type(tagger.parse(text)))
print(tagger.parse(text).split("\n"))
print(tagger.parse(text))

mecab-ipadic-NEologd#

mecab-ipadic-NEologd : Mecab 用の新語辞典
プロジェクトアドレス: https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md
ライセンス:Apache License, Version 2.0

プロジェクト名の「Neologism」は「新語」を意味しますので、この形態素解析辞典は新語に対して良好な解析効果を持っています。ただし、ソースコードを自分でコンパイルする必要があります。私はまだ試したことがないので、誰かがチュートリアルを出してくれるのを待っています。

参考文献#

Mecab 日本語分詞ツールの簡単な使用 - FreeMdict Forum :非常に詳細な説明とサンプルコードを提供しています。

他の形態素解析器#

前述の awesome-japanese-nlp-resources では非常に多くの形態素解析器を見つけることができます。具体的な使用シーンに応じて、また MeCab の開発経緯 における他の形態素解析器の評価も見てみると良いでしょう:

Juman 以前の商用的に配布されていた形態素解析器は、辞書や品詞体系、連接規則はほぼ固定されており、ユーザ自身が自由に定義できなかった。Juman はこれらの定義すべてを外部に出し、自由な定義が可能になった。
辞書は比較的入手しやすいが、連接コストや単語生起コストの定義は人手によって行わざるを得なかった。解析ミスを発見するたびに副作用がない範囲で連接コストを修正する必要があり、開発コストが大きい。
また、Juman は日本語の形態素解析として開発されていたので、未知語処理が日本語に特化されており、未知語処理の定義を自分で与えることはできない。また、品詞は 2 階層までに固定されており、品詞体系には一種の制限がある。

ChaSen の貢献の 1 つは、統計処理 (HMM) によって連接コストや単語生起コストを推定するようになった点にある。この処理のおかげで、解析ミスを蓄積するだけで自動的にコスト値を推定できるようになった。さらに、品詞階層も無制限になり、品詞体系を含めて(本当の意味で)自由に定義できるようになった。
しかし、複雑な品詞体系にすればするほど、データスパースネスの問題が発生する。HMM を使う場合、HMM の内部状態(Hidden Class)を 1 つに固定する必要があるため、各品詞から内部状態への「変換」が必要となる。単純には各品詞を 1 つの内部状態に割り当てればよいが、活用まで含めて品詞をすべて展開すると、その数は 500 にも及び、低頻度の品詞について信頼度の高い推定量を得ることができない。逆に、頻度の高い「助詞」等の品詞は語彙も含めて内部状態にしないと高い精度が得られない。複雑な品詞体系にすればするほど、内部状態の定義が困難になる。つまり、現状の(複雑な)品詞体系を扱うには、HMM では力不足であり、それを補助するための人手コストが大きくなっている。
また、ChaSen にはコスト値推定モジュールが付与されていない。NAIST の内部では利用できるらしいが、上記の理由から設定すべきパラメータが多く、使いこなすのが困難である。
さらに、ChaSen も未知語処理もハードコーディングされており自由に定義することはできない。

上記の評価の焦点は、形態素解析器の発展のトレンドと基本的に一致しています:

  1. 形態素解析器は、文法ルールに基づくアプローチを放棄し、完全に統計学に基づく純粋な数学アルゴリズムに移行しています。
  2. 自作の形態素解析辞典を放棄し、UniDic のような権威ある機関によって構築・維持されるリソースを使用しています。
  3. 同時に複数の言語の解析をサポートすることを試み始めています。

以下は、私が少し研究した形態素解析器のいくつかです:

GiNZA - Japanese NLP Library
開発言語:Python
ライセンス:MIT ライセンス
最終更新日:2023-09-25

備考:日本の企業リクルート(日本語:リクルート)傘下の AI 研究機関 Megagon Labs によって 2019 年にオープンソース化された形態素解析ツールです。

Kuromoji
開発言語:Java
ライセンス:Apache-2.0 ライセンス
最終更新日:5 年前

備考:MOJi Android 端 APK 解凍後の結果から見ると、これが使用されている解析ツールのようです。また、[[Elasticsearch]] がデフォルトで使用しているのもこれです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。