前回は形態素解析と係り受け解析の違いを理解しました。今回はいよいよ実践編!実際に使える形態素解析ライブラリとデータセットを、インストール方法から使い分けのコツまで徹底解説します。
「で、結局どれを使えばいいの?」という疑問に、しっかり答えていきますよ。
日本語形態素解析ライブラリ - 3大勢力
日本語の形態素解析器、実は選択肢がいくつかあります。それぞれに個性があって、使い分けが重要。主要なものを見ていきましょう。
1. MeCab - 日本語形態素解析のデファクトスタンダード
MeCabとは?
MeCabは京都大学情報学研究科−日本電信電話株式会社コミュニケーション科学基礎研究所共同研究ユニットプロジェクトを通じて開発されたオープンソース形態素解析エンジンです。言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。
要するに、日本語形態素解析のド定番ってこと。迷ったらまずMeCabです。
MeCabの特徴
パラメータの推定にConditional Random Fields (CRF)を用いており、ChaSenが採用している隠れマルコフモデルに比べ性能が向上しています。また、平均的にChaSen、Juman、KAKASIより高速に動作します。
技術的なポイント:
1. 高速な辞書引きアルゴリズム
辞書引きアルゴリズム/データ構造に、高速なTRIE構造であるDouble-Arrayを採用しています。
2. 条件付き確率場(CRF)による高精度解析
CRFとは、単語に対する品詞を条件付き確率により求めるモデルです。識別モデルにCRFを使用しているため、辞書への掲載数が少ない単語でも素早く推論して処理することができます。
3. 多言語対応
Python、Ruby、Java、C/C++など、様々な言語から利用可能。
MeCabのインストール方法
macOS/Linux
# MeCab本体のインストール
brew install mecab # macOS
sudo apt-get install mecab mecab-ipadic-utf8 # Ubuntu
# Python用ラッパー
pip install mecab-python3
# 辞書も入れる(推奨)
pip install unidic-lite
Windows
バイナリをインストールする場合は、自己解凍インストーラ(mecab-X.X.exe)を実行してください。辞書も同時にインストールされます。
公式サイト: https://taku910.github.io/mecab/
MeCabの基本的な使い方
import MeCab
# MeCabオブジェクトの生成
mecab = MeCab.Tagger()
# 形態素解析を実行
text = "自然言語処理は面白い"
result = mecab.parse(text)
print(result)
出力例:
自然 名詞,一般,*,*,*,*,自然,シゼン,シゼン
言語 名詞,一般,*,*,*,*,言語,ゲンゴ,ゲンゴ
処理 名詞,サ変接続,*,*,*,*,処理,ショリ,ショリ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
面白い 形容詞,自立,*,*,形容詞・アウオ段,基本形,面白い,オモシロイ,オモシロイ
EOS
出力フォーマットは、左から、表層形\t品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音となっています。
MeCabで使える辞書
形態素解析器の性能は辞書次第です。MeCabでは複数の辞書が選択できます。
1. IPADIC (IPA辞書)
IPA辞書(IPADIC)はMeCab公式サイトが推奨している辞書です。この辞書は形態素解析器ChaSen用辞書として作成されましたが、それをMeCab向けに流用したものです。
特徴:
- 標準的な語彙を網羅
- 安定性が高い
- ただし更新が止まっている
2. NEologd (mecab-ipadic-NEologd)
mecab-ipadic-NEologdはipadicを基に、Web上のリソースから半自動的に新語を収集して作成されている辞書です。1週間に2回更新されるので、比較的最近の言葉も登録されています。
インストール:
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n
使用例:
# NEologd辞書を指定
mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
text = "今週の呪術廻戦やばかった"
print(mecab.parse(text))
IPADICでは「呪術」「廻戦」と分割されてしまいますが、NEologdを使用すると「呪術廻戦」が固有名詞として認識されます。
新しい固有名詞や流行語を扱うなら、NEologdは必須です!
3. UniDic
UniDicとは、国立国語研究所の規定した斉一な言語単位(短単位)と、階層的見出し構造に基づく電子化辞書です。
UniDicの第一の目的は、国語研で構築しているコーパスアノテーションを支援することです。解析用UniDicは短単位をMeCab辞書のエントリとしているため、UniDicを使った形態素解析は「短単位(自動)解析」とも呼ばれます。
特徴:
- 言語学的に厳密な単位基準
- 研究用途に最適
- BCCWJなどの大規模コーパスと連携
MeCabの商用利用について
MeCabはフリーソフトウェアです。GPL(the GNU General Public License)、LGPL(Lesser GNU General Public License)、またはBSDライセンスに従って本ソフトウェアを使用、再配布することができます。
付属モデルの注意点:
付属のモデルファイルは、株式会社毎日新聞社の御厚意により配布されている毎日新聞記事CD-ROM版を基に学習、作成されたものです。配布しているモデルをそのままの形で使うことは、研究目的、個人利用に限られます。ご自身で用意なさったコーパスを基に、独自にモデルを学習、作成した場合は研究目的以外の利用が可能です。
商用で使う場合は、自分でモデルを学習するか、商用利用可能な辞書を使いましょう。
2. Sudachi - 現代的な多機能形態素解析器
Sudachiとは?
Sudachiは2017年につくられた新たな解析器です。既にさまざまなツールがある中、商業利用に耐えうる、より高品質で使い勝手の良い形態素解析器を標榜するものです。開発は、株式会社ワークスアプリケーションズ下の機関であるワークス徳島人工知能NLP研究所を主として行われています。ライセンスはApache-2.0です。
MeCabの後継的な位置づけで、商用利用を前提に設計されているのが大きな特徴。
Sudachiの最大の特徴 - 複数粒度分割
Sudachiには3つの分割モードがあり、複合名詞(単名詞・接頭語・接尾語の連続)の分割方法が異なります:
- Aモード: UniDic短単位相当...接頭語・接尾語を含めすべて分解
- Bモード: A、Cの中間的な単位
- Cモード: 固有表現単位...複合語を一つの単位として扱う
具体例:
「国家公務員」の分割
Aモード: 国家 / 公務 / 員
Bモード: 国家 / 公務員
Cモード: 国家公務員
実用上、用途によって欲しい長さは異なります。検索エンジンでは短い単位で分割して検索漏れを防ぎたいし、固有表現抽出では「東京スカイツリー」を一つの単位として扱いたい。Sudachiはこのニーズに応えます。
Sudachiのその他の特徴
1. 表記揺れへの対応
辞書の表記揺れ対策がされているため、形態素解析前に処理などを行わなくても精度の良い解析結果が得られます。
「焼肉」と「焼き肉」、「パソコン」と「ぱそこん」などを同一の語として正規化できます。
2. UniDicとNEologdのいいとこ取り
Sudachi辞書はUniDicをベースにして見出しや品詞などの形態素解析の基礎となる情報を整え、近年認知されるようになった固有名詞はNEologdから取り込まれています。
Sudachiのインストール方法
# SudachiPy(Python版)のインストール
pip install sudachipy
# 辞書のインストール
# small: 最小限の語彙
# core: 基本的な語彙(デフォルト、約200MB)
# full: 最大の語彙
pip install sudachidict_core # おすすめ
Sudachiの基本的な使い方
from sudachipy import tokenizer
from sudachipy import dictionary
# 辞書とトークナイザーの初期化
tokenizer_obj = dictionary.Dictionary().create()
# テキストの解析(Cモード = 長い単位)
text = "東京スカイツリーへ行った"
mode = tokenizer.Tokenizer.SplitMode.C
tokens = tokenizer_obj.tokenize(text, mode)
# 結果の表示
for token in tokens:
print(f"{token.surface()}\t{token.part_of_speech()}\t{token.normalized_form()}")
出力例:
東京スカイツリー ['名詞', '固有名詞', '一般', '*', '*', '*'] 東京スカイツリー
へ ['助詞', '格助詞', '*', '*', '*', '*'] へ
行っ ['動詞', '一般', '*', '*', '五段-カ行', '連用形-促音便'] 行く
た ['助動詞', '*', '*', '*', '助動詞-タ', '終止形-一般'] た
「スパゲティ」→「スパゲッティ」と正規化されていることに注目してください。これが表記揺れ対応の威力です。
Sudachiの辞書サイズ比較
Sudachiには3種類の辞書があります:
- Small: UniDicの収録語とその正規化表記、分割単位を収録
- Core: 基本的な語彙を収録(デフォルト)[約200MB]
- Full: 最大規模の語彙
迷ったらCoreでOK。アプリケーションの用途に応じて選択しましょう。
3. Janome - Pure Pythonの手軽さ
Janomeとは?
JanomeはPure Python実装の形態素解析器。つまり、C++コンパイラ不要で動作します。
特徴:
- インストールが超簡単
- クロスプラットフォーム対応
- MeCabより遅いが、手軽さは随一
インストール:
pip install janome
使用例:
from janome.tokenizer import Tokenizer
t = Tokenizer()
text = "自然言語処理を学ぶ"
for token in t.tokenize(text):
print(token)
Janomeは「とりあえず試したい」「環境構築で躓きたくない」という場合に最適です。
ライブラリ比較表 - どれを選ぶ?
| 項目 | MeCab | Sudachi | Janome |
|---|---|---|---|
| 速度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 精度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| インストールの簡単さ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 商用利用 | △(要注意) | ⭐(Apache 2.0) | ⭐ |
| 複数粒度分割 | ✗ | ⭐(A/B/C) | ✗ |
| 表記揺れ対応 | ✗ | ⭐ | ✗ |
| 新語対応 | △(NEologd必要) | ⭐ | △ |
| 開発の活発さ | △ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
使い分けガイド
形態素解析器の選び方:
- MeCab: 速度最優先のとき、IPAdicやNEologdを使いたいとき、係り受け解析器CaboChaを使いたいとき
- Sudachi: 検索システムに使いたいとき、表記正規化機能を使いたいとき、UniDicを使いたいとき
- Janome: 手軽に試したいとき、環境構築を簡単にしたいとき
私のおすすめ:
- 学習・研究用: MeCab + NEologd
- 商用プロダクト: Sudachi (core辞書)
- プロトタイピング: Janome
データセット・コーパスの世界
形態素解析器を学習させるには、大量のデータセット(コーパス)が必要です。日本語の代表的なコーパスを紹介します。
BCCWJ (現代日本語書き言葉均衡コーパス)
『現代日本語書き言葉均衡コーパス』(BCCWJ: Balanced Corpus of Contemporary Written Japanese)は、現代日本語の書き言葉の全体像を把握するために構築したコーパスであり、現在、日本語について入手可能な唯一の均衡コーパスです。書籍全般、雑誌全般、新聞、白書、ブログ、ネット掲示板、教科書、法律などのジャンルにまたがって1億430万語のデータを格納しており、各ジャンルについて無作為にサンプルを抽出しています。
BCCWJでは、千葉大学と共同開発したUniDicという解析用辞書を使用しています。すべてのサンプルは形態素解析されており、短単位と長単位の2種類の言語単位で情報が付与されています。
アクセス方法:
- 少納言: 登録不要、文字列検索のみ
- 中納言: 登録必要、高度な検索が可能
- DVD版: 有償頒布
公式サイト: https://clrd.ninjal.ac.jp/bccwj/
その他の主要コーパス
国立国語研究所では他にも以下のコーパスを公開しています:
- CSJ (日本語話し言葉コーパス): 話し言葉のコーパス
- CHJ (日本語歴史コーパス): 奈良時代から現代までの日本語
- I-JAS: 日本語学習者のコーパス
実践Tips - よくあるトラブルと解決法
1. MeCabで「辞書が見つからない」エラー
# 辞書のパスを確認
mecab-config --dicdir
# 正しいパスを指定
mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/ipadic')
2. Sudachiで「文字正規化」に注意
Sudachi内部では「文字の正規化」が行われており、ユーザー辞書の見出しもそれに合わせる必要があります。例えば大文字のLを含む「Legalscape」は、小文字「legalscape」として登録する必要があります。
3. 分割モードの選択ミス
用途に応じて適切なモードを選びましょう:
- 検索エンジン: Aモード(細かく分割)
- 固有表現抽出: Cモード(長い単位)
- 汎用: Bモード
次回予告
次回は「係り受け解析の主なライブラリとデータセット編」!
形態素解析の次のステップとして、文の構造を理解する係り受け解析を実践していきます。
- CaboCha: 日本語係り受け解析のスタンダード
- GiNZA: spaCyベースの最新NLPライブラリ
- KNP: 京大黒橋研の高機能解析器
どれも個性的で面白いツールばかり。実際のコードと共に、使い分けのポイントまで解説しますよ!
お楽しみに!