形態素解析

テキストを最小の意味単位 (形態素) に分割し、品詞や読みなどの情報を付与する処理。

形態素解析は、自然言語処理 (NLP) の基礎技術で、テキストを最小の意味単位である形態素に分割し、各形態素に品詞・読み・原形・活用形などの情報を付与する処理です。日本語のように単語間にスペースがない言語では、テキスト処理の最初のステップとして不可欠な技術です。

形態素解析の仕組みは、辞書と統計モデルの組み合わせに基づいています。解析エンジンは入力テキストに対して考えられる分割パターンをラティス (格子状のグラフ) として展開し、各単語の生起コストと単語同士の連接コストの合計が最小になる経路を選びます。この最小コスト経路の探索に使われるのがビタビアルゴリズムです。ビタビ自体はコストを決める仕組みではなく、あくまで探索の手順である点に注意してください。コストの値は人手で決めるのではなくコーパスから学習され、MeCab は公式ドキュメントで学習モデルに CRF (条件付き確率場)、解探索アルゴリズムに Viterbi を用いると明記しています。

実際の出力は、分割された表層形に品詞や読みなどの情報が並ぶ形になります。たとえば「本を読んでいる」なら「本 (名詞)/を (助詞)/読ん (動詞)/で (助詞)/いる (動詞)」の 5 形態素です。活用した「読んでいる」が 3 つに割れる点が、見た目の単語と形態素がずれる典型例です。

代表的な形態素解析エンジンには、MeCab (C++ 実装、高速)、kuromoji (Java 実装、Elasticsearch で採用)、Sudachi (Java 実装、複数の分割粒度に対応)、Janome (Python 実装、インストールが容易) などがあります。それぞれ使用する辞書 (IPAdic、UniDic、NEologd など) によって分割結果が異なり、新語や固有名詞の認識精度に差が出ます。

差が最も大きく出るのは複合語の粒度です。Sudachi は公式ドキュメントで 3 段階の分割モードを示しており、コア辞書での例では「選挙管理委員会」が A モードで「選挙/管理/委員/会」、B モードで「選挙/管理/委員会」、C モードで「選挙管理委員会」と分かれます。A は短単位相当、C は固有表現相当、B はその中間です。つまり同じ文でも設定次第で単語数が 1 になったり 4 になったりします。用途による選び分けの目安として、Sudachi の公式ドキュメントは検索では A と C を併用することで再現率と適合率の両方を上げられるとしています。表記のばらつきを吸収したいなら細かい粒度、固有名詞をひとまとまりで扱いたいなら粗い粒度が向く、と考えると整理しやすいでしょう。

形態素解析の活用場面は多岐にわたります。検索エンジンのインデックス作成では、文書を形態素に分割してから転置インデックスを構築します。文字数カウントツールでの単語数算出、感情分析の前処理、キーワード抽出、文書要約、機械翻訳の前処理など、テキストを扱うほぼすべてのアプリケーションで基盤技術として使われています。

よくある課題として、未知語 (辞書に登録されていない単語) の処理があります。新しい固有名詞、造語、スラングなどは辞書に含まれないため、誤った分割が行われることがあります。この問題に対処するため、NEologd のような新語辞書を追加したり、ユーザー辞書を作成して特定ドメインの用語を登録したりする方法が一般的です。

英語ではスペースで単語を区切れるため分割そのものの難しさは小さいですが、必要性がゼロになるわけではありません。running を run に、better を good に戻すようなステミングやレンマ化 (原形化) は英語でも必要で、日本語で形態素解析が担っている役割の一部を別の処理として行っています。一方、日本語・中国語・韓国語 (CJK) では分割自体が最初の壁になるため、形態素解析が不可欠な技術になります。中国語では jieba や THULAC、韓国語では KoNLPy などの解析ツールが使われています。文字数カウントの観点では、形態素解析を用いることで「文字数」だけでなく「単語数」を正確に算出できます。日本語の文章で「この文は何単語か」を判定するには形態素解析が必要であり、文字数カウントツールの高度な機能として活用されています。ただし単語数は辞書と分割粒度に依存する相対的な値であり、文字数のように一意に決まる数ではありません。原稿の分量管理に使うなら同じ設定で数え続けることが前提で、異なるツールが出した単語数をそのまま並べて比較しても意味を持ちません。

この記事を共有