形態素解析というか辞書の比較
はじめに
以前の「Juman++をWSL1のUbuntuにインストール」で書いた内容ではJumanを単にWSL1上のUbuntuにインストールしただけです。
ベースはWSL2だろうがネイディブUbuntuでも構わないで利用できるかと思いますので更新の必要性は特に感じていません。ただ、Juman++はmecabよりも高精度と記載された2017年の記事「MeCabより高精度?RNNLMの形態素解析器JUMAN++」を見つけてしまいました。
形態素解析エンジンよりも辞書での精度が結果を左右すると認識していましたので、調査したいと思います。w
結論
先の結論を買いてしまうと、エンジンよりも辞書だったという話で決着します。また実験したソース全てをgithubのGoogle Colabソースで一挙公開しますので参考にして頂ければ幸いです。
検証方法
JUMAN++とその標準辞書、mecabの標準辞書、mecab-ipadic-NEologd、unidicの4つとなります。
また、どんな文章を投入するかにより、結果が大きく左右されます。これは私が解析したいと思っている系統のソースに寄せています。それは、一般的な文章よりも、架空の固有名詞が含まれた文章を如何に解析できるのか?と考えているためです。
投入した文章は以下の通り
"修学旅行の宿泊日は10月9日から三日間です。"
"機動戦士ガンダム 閃光のハサウェイの映画は情報量が多くて面白いよね"
"聖女の魔力は万能ですに出てくる小鳥遊 聖はかわいいですね。"
着目点は以下の通り
1番目:月日の2桁数字が分割されるのか否か。また「修学旅行」といった名詞が分割しかできないのか?
2番目:機動戦士ガンダムを固有名詞として保有しているのか?最近の映画の名は?ハサウェイは人名と認識している?
3番目:小鳥遊を姓として理解できている?架空の登場人物の名の読み方はヒジリでは無くセイだが理解は無理だろうなぁ。かわいいはひらがなで書いたが、可愛いと同一視できている?
といったもの。
2、3は無理だろうとは思ったが、何事も検証しなければ分かりません。
インストール方法
インストール方法についてもGoogleColabソースに記載していますが転記しておきます。
また、mecab系辞書は実行時に辞書ディレクトリを指定することで対応しています。標準辞書については-dパラメタを指定しないことで実現しています。
JUMAN++
# JUMAN++ 2.0.0 rc3のインストール
!wget https://github.com/ku-nlp/jumanpp/releases/download/v2.0.0-rc3/jumanpp-2.0.0-rc3.tar.xz
!xz -dv jumanpp-2.0.0-rc3.tar.xz > /dev/null
!tar xvf jumanpp-2.0.0-rc3.tar > /dev/null
%cd jumanpp-2.0.0-rc3/
!mkdir bid
%cd bid
!cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local
!make install -j2
mecab-ipadic-NEologd
※apt でインストールしている python-mecab はpython2まで。python3からは python3-mecab に変更になっています。(2023.07.17 update)
# 形態素分析ライブラリーMeCab と 辞書(mecab-ipadic-NEologd)のインストール
# !apt-get -q -y install sudo file mecab libmecab-dev mecab-ipadic-utf8 git curl python-mecab > /dev/null
!apt install file mecab libmecab-dev mecab-ipadic-utf8 git curl python3-mecab > /dev/null
!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
!pip install mecab-python3 > /dev/null
# シンボリックリンクによるエラー回避
!ln -s /etc/mecabrc /usr/local/etc/mecabrc
unidic
!wget https://osdn.net/dl/unidic/unidic-mecab-2.1.2_src.zip
!unzip unidic-mecab-2.1.2_src.zip
%cd unidic-mecab-2.1.2_src
!./configure
!make
!make check
!make install
解析結果
1番目「修学旅行…」
JUMAN++
修学 しゅうがく 修学 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:修学/しゅうがく ドメイン:教育・学習 カテゴリ:抽象物"
旅行 りょこう 旅行 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:旅行/りょこう ドメイン:レクリエーション カテゴリ:抽象物"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
宿泊 しゅくはく 宿泊 名詞 6 サ変名詞 2 * 0 * 0 "代表表記:宿泊/しゅくはく ドメイン:レクリエーション カテゴリ:抽象物"
日 ひ 日 名詞 6 時相名詞 10 * 0 * 0 "代表表記:日/ひ カテゴリ:時間 漢字読み:訓 弱時相名詞"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
10 10 10 名詞 6 数詞 7 * 0 * 0 "カテゴリ:数量 未知語:数字"
月 がつ 月 接尾辞 14 名詞性名詞助数辞 3 * 0 * 0 "代表表記:月/がつ カテゴリ:時間 準内容語"
9 きゅう 9 名詞 6 数詞 7 * 0 * 0 "カテゴリ:数量"
日 にち 日 接尾辞 14 名詞性名詞助数辞 3 * 0 * 0 "代表表記:日/にち カテゴリ:時間 準内容語"
から から から 助詞 9 格助詞 1 * 0 * 0 NIL
三 さん 三 名詞 6 数詞 7 * 0 * 0 "カテゴリ:数量"
日間 にちかん 日間 接尾辞 14 名詞性名詞助数辞 3 * 0 * 0 "代表表記:日間/にちかん カテゴリ:時間 準内容語"
です です だ 判定詞 4 * 0 判定詞 25 デス列基本形 27 NIL
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS
mecab標準辞書
修学 シューガク シュウガク 修学 名詞-普通名詞-サ変可能
旅行 リョコー リョコウ 旅行 名詞-普通名詞-サ変可能
の ノ ノ の 助詞-格助詞
宿泊 シュクハク シュクハク 宿泊 名詞-普通名詞-サ変可能
日 ヒ ヒ 日 名詞-普通名詞-副詞可能
は ワ ハ は 助詞-係助詞
1 イチ イチ 一 名詞-数詞
0 ゼロ ゼロ ゼロ-zero 名詞-数詞
月 ガツ ガツ 月 名詞-普通名詞-助数詞可能
9 キュー キュウ 九 名詞-数詞
日 ニチ ニチ 日 名詞-普通名詞-助数詞可能
から カラ カラ から 助詞-格助詞
三 ミッ ミ 三 名詞-数詞
日間 カカン カカン 日間 名詞-普通名詞-助数詞可能
です デス デス です 助動詞 助動詞-デス 終止形-一般
。 。 補助記号-句点
EOS
NEologd
修学旅行 名詞,一般,*,*,*,*,修学旅行,シュウガクリョコウ,シューガクリョコー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
宿泊 名詞,サ変接続,*,*,*,*,宿泊,シュクハク,シュクハク
日 名詞,接尾,一般,*,*,*,日,ビ,ビ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
10月9日 名詞,固有名詞,一般,*,*,*,10月9日,ジュウガツココノカ,ジューガツココノカ
から 助詞,格助詞,一般,*,*,*,から,カラ,カラ
三 名詞,数,*,*,*,*,三,サン,サン
日間 名詞,接尾,助数詞,*,*,*,日間,ニチカン,ニチカン
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
EOS
unidic
修学 シューガク シュウガク 修学 名詞-普通名詞-サ変可能
旅行 リョコー リョコウ 旅行 名詞-普通名詞-サ変可能
の ノ ノ の 助詞-格助詞
宿泊 シュクハク シュクハク 宿泊 名詞-普通名詞-サ変可能
日 ヒ ヒ 日 名詞-普通名詞-副詞可能
は ワ ハ は 助詞-係助詞
1 イチ イチ 一 名詞-数詞
0 ゼロ ゼロ ゼロ-zero 名詞-数詞
月 ガツ ガツ 月 名詞-普通名詞-助数詞可能
9 キュー キュウ 九 名詞-数詞
日 ニチ ニチ 日 名詞-普通名詞-助数詞可能
から カラ カラ から 助詞-格助詞
三 ミッ ミ 三 名詞-数詞
日間 カカン カカン 日間 名詞-普通名詞-助数詞可能
です デス デス です 助動詞 助動詞-デス 終止形-一般
。 。 補助記号-句点
EOS
年月日で二桁数字を分割されると、合成しなければ意味解析においては厳しいので、標準辞書とunidicは遠慮したい。NEologdは修学旅行を固有名詞として認識しているので素晴らしいですね。
2番目:「ガンダム…」
JUMAN++
機動 きどう 機動 名詞 6 普通名詞 1 * 0 * 0 "代表表記:機動/きどう カテゴリ:抽象物"
戦士 せんし 戦士 名詞 6 普通名詞 1 * 0 * 0 "代表表記:戦士/せんし カテゴリ:人"
ガンダム がんだむ ガンダム 名詞 6 固有名詞 3 * 0 * 0 "代表表記:ガンダム/がんだむ"
特殊 1 空白 6 * 0 * 0 "代表表記:S/* 元半角"
閃光 せんこう 閃光 名詞 6 普通名詞 1 * 0 * 0 "自動獲得:Wikipedia Wikipedia多義"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
ハサウェイ ハサウェイ ハサウェイ 名詞 6 人名 5 * 0 * 0 "自動獲得:Wikipedia Wikipedia人名 Wikipedia多義"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
映画 えいが 映画 名詞 6 普通名詞 1 * 0 * 0 "代表表記:映画/えいが ドメイン:文化・芸術 カテゴリ:抽象物"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
情報 じょうほう 情報 名詞 6 普通名詞 1 * 0 * 0 "代表表記:情報/じょうほう カテゴリ:抽象物"
量 りょう 量 名詞 6 普通名詞 1 * 0 * 0 "代表表記:量/りょう カテゴリ:数量 漢字読み:音"
が が が 助詞 9 格助詞 1 * 0 * 0 NIL
多くて おおくて 多い 形容詞 3 * 0 イ形容詞アウオ段 18 タ系連用テ形 12 "代表表記:多い/おおい 反義:形容詞:少ない/すくない"
面白い おもしろい 面白い 形容詞 3 * 0 イ形容詞アウオ段 18 基本形 2 "代表表記:面白い/おもしろい 反義:形容詞:つまらない/つまらない"
よ よ よ 助詞 9 終助詞 4 * 0 * 0 NIL
ね ね ね 助詞 9 終助詞 4 * 0 * 0 NIL
EOS
mecab標準辞書
機動 名詞,一般,*,*,*,*,機動,キドウ,キドー
戦士 名詞,一般,*,*,*,*,戦士,センシ,センシ
ガン 名詞,一般,*,*,*,*,ガン,ガン,ガン
ダム 名詞,一般,*,*,*,*,ダム,ダム,ダム
閃光 名詞,一般,*,*,*,*,閃光,センコウ,センコー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
ハサウェイ 名詞,一般,*,*,*,*,*
の 助詞,連体化,*,*,*,*,の,ノ,ノ
映画 名詞,一般,*,*,*,*,映画,エイガ,エイガ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
情報 名詞,一般,*,*,*,*,情報,ジョウホウ,ジョーホー
量 名詞,接尾,一般,*,*,*,量,リョウ,リョウ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
多く 形容詞,自立,*,*,形容詞・アウオ段,連用テ接続,多い,オオク,オーク
て 助詞,接続助詞,*,*,*,*,て,テ,テ
面白い 形容詞,自立,*,*,形容詞・アウオ段,基本形,面白い,オモシロイ,オモシロイ
よ 助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
EOS
NEologd
機動戦士ガンダム 閃光のハサウェイ 名詞,固有名詞,一般,*,*,*,機動戦士ガンダム閃光のハサウェイ,キドウセンシガンダムセンコウノハサウェイ,キドーセンシガンダムセンコーノハサウェイ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
映画 名詞,一般,*,*,*,*,映画,エイガ,エイガ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
情報量 名詞,固有名詞,一般,*,*,*,情報量,ジョウホウリョウ,ジョーホーリョー
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
多く 形容詞,自立,*,*,形容詞・アウオ段,連用テ接続,多い,オオク,オーク
て 助詞,接続助詞,*,*,*,*,て,テ,テ
面白い 形容詞,自立,*,*,形容詞・アウオ段,基本形,面白い,オモシロイ,オモシロイ
よ 助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
EOS
unidic
機動 名詞,一般,*,*,*,*,機動,キドウ,キドー
戦士 名詞,一般,*,*,*,*,戦士,センシ,センシ
ガン 名詞,一般,*,*,*,*,ガン,ガン,ガン
ダム 名詞,一般,*,*,*,*,ダム,ダム,ダム
閃光 名詞,一般,*,*,*,*,閃光,センコウ,センコー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
ハサウェイ 名詞,一般,*,*,*,*,*
の 助詞,連体化,*,*,*,*,の,ノ,ノ
映画 名詞,一般,*,*,*,*,映画,エイガ,エイガ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
情報 名詞,一般,*,*,*,*,情報,ジョウホウ,ジョーホー
量 名詞,接尾,一般,*,*,*,量,リョウ,リョウ
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
多く 形容詞,自立,*,*,形容詞・アウオ段,連用テ接続,多い,オオク,オーク
て 助詞,接続助詞,*,*,*,*,て,テ,テ
面白い 形容詞,自立,*,*,形容詞・アウオ段,基本形,面白い,オモシロイ,オモシロイ
よ 助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
EOS
ガンダムを「ガン」「ダム」と認識するのでは無くひと続きで認識しているのはJUMAN++とNEologd。ただ、NEologdは映画タイトルをそのまま理解している点が素晴らしい。ハサウェイを人名として認識していますので次点はJUMAN++でしょうか。
3番目:「小鳥遊…」
JUMAN++
聖女 せいじょ 聖女 名詞 6 人名 5 * 0 * 0 "自動獲得:Wikipedia Wikipedia人名 Wikipedia多義"
の の の 助詞 9 接続助詞 3 * 0 * 0 NIL
魔力 まりょく 魔力 名詞 6 普通名詞 1 * 0 * 0 "代表表記:魔力/まりょく カテゴリ:抽象物"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
万能 ばんのう 万能 名詞 6 普通名詞 1 * 0 * 0 "代表表記:万能/ばんのう カテゴリ:抽象物"
です です だ 判定詞 4 * 0 判定詞 25 デス列基本形 27 NIL
に に に 助詞 9 格助詞 1 * 0 * 0 NIL
出て でて 出る 動詞 2 * 0 母音動詞 1 タ系連用テ形 14 "代表表記:出る/でる 反義:動詞:入る/はいる 自他動詞:他:出す/だす 補文ト"
くる くる くる 接尾辞 14 動詞性接尾辞 7 カ変動詞 14 基本形 2 "代表表記:くる/くる"
小鳥遊 たかなし 小鳥遊 名詞 6 人名 5 * 0 * 0 "自動獲得:Wikipedia Wikipedia人名 Wikipedia多義"
特殊 1 空白 6 * 0 * 0 "代表表記:S/* 元半角"
聖 ひじり 聖 名詞 6 普通名詞 1 * 0 * 0 "代表表記:聖/ひじり ドメイン:文化・芸術 カテゴリ:人"
は は は 助詞 9 副助詞 2 * 0 * 0 NIL
かわいい かわいい かわいい 形容詞 3 * 0 イ形容詞イ段 19 基本形 2 "代表表記:可愛い/かわいい"
です です です 助動詞 5 * 0 無活用型 26 基本形 2 NIL
ね ね ね 助詞 9 終助詞 4 * 0 * 0 NIL
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS
mecab標準辞書
聖女 名詞,一般,*,*,*,*,聖女,セイジョ,セイジョ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
魔力 名詞,一般,*,*,*,*,魔力,マリョク,マリョク
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
万能 名詞,一般,*,*,*,*,万能,バンノウ,バンノー
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
出 動詞,自立,*,*,一段,連用形,出る,デ,デ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
くる 動詞,非自立,*,*,カ変・クル,基本形,くる,クル,クル
小鳥 名詞,一般,*,*,*,*,小鳥,コトリ,コトリ
遊 名詞,一般,*,*,*,*,*
聖 名詞,一般,*,*,*,*,聖,ヒジリ,ヒジリ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
かわいい 形容詞,自立,*,*,形容詞・イ段,基本形,かわいい,カワイイ,カワイイ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
。 記号,句点,*,*,*,*,。,。,。
EOS
NEologd
聖女の魔力は万能です 名詞,固有名詞,一般,*,*,*,聖女の魔力は万能です,セイジョノマリョクハバンノウデス,セイジョノマリョクワバンノーデス
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
出 動詞,自立,*,*,一段,連用形,出る,デ,デ
て 助詞,接続助詞,*,*,*,*,て,テ,テ
くる 動詞,非自立,*,*,カ変・クル,基本形,くる,クル,クル
小鳥遊 名詞,固有名詞,人名,姓,*,*,小鳥遊,タカナシ,タカナシ
聖 名詞,固有名詞,人名,名,*,*,聖,キヨシ,キヨシ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
かわいい 形容詞,自立,*,*,形容詞・イ段,基本形,かわいい,カワイイ,カワイイ
です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね 助詞,終助詞,*,*,*,*,ね,ネ,ネ
。 記号,句点,*,*,*,*,。,。,。
EOS
unidic
聖女 セージョ セイジョ 聖女 名詞-普通名詞-一般
の ノ ノ の 助詞-格助詞
魔力 マリョク マリョク 魔力 名詞-普通名詞-一般
は ワ ハ は 助詞-係助詞
万能 バンノー バンノウ 万能 名詞-普通名詞-一般
です デス デス です 助動詞 助動詞-デス 終止形-一般
に ニ ニ に 助詞-格助詞
出 デ デル 出る 動詞-一般 下一段-ダ行 連用形-一般
て テ テ て 助詞-接続助詞
くる クル クル 来る 動詞-非自立可能 カ行変格 連体形-一般
小鳥遊 タカナシ タカナシ タカナシ 名詞-固有名詞-人名-姓
聖 キヨシ キヨシ キヨシ 名詞-固有名詞-人名-名
は ワ ハ は 助詞-係助詞
かわいい カワイー カワイイ 可愛い 形容詞-一般 形容詞 終止形-一般
です デス デス です 助動詞 助動詞-デス 終止形-一般
ね ネ ネ ね 助詞-終助詞
。 。 補助記号-句点
EOS
ここでもNEologdは原作小説およびアニメのタイトルを認識しています。小鳥遊を「小鳥」「遊」と認識する標準辞書はちょっと厳しい。それ以外は全て姓として認識しています。
かわいいはJUMAN++のみ可愛いと代表表記が同一であると認識しています。意味解析系では、ひらがな記載と漢字記載で意味の重みを変える場合は同一とみなすのは問題がありますが、そうでない場合には他の方法が良いと思われます。
ひらがな表記と漢字混じり表記では、会話だとひらがな表記の方がより柔らかい印象があると思われ、どちらも意味的には同じではあるものの、ニュアンス変化を求める場合に意識して変えることがあります。
(小説だったりすると、会話部分での表記で変更したりしますよね。)
総評?
NEologdは毎週固有名詞を更新しているようで素晴らしいのです。しかしながら、それを活用するには定期的に辞書をアップデートする必要があります。また、過去の意味解析後に固有名詞でしたとなった場合、どうするのか?等、良いことばかりではありません。
とはいえ、固有名詞がマイナーな領域部分まで含めてある点は素晴らしいですね。また、mecabはユーザ辞書が用意されているので、足りないと思った場合でも、自分たちで用意することは技術的には可能でしょう。
トップに記載しています結論のように、形態素解析エンジンとしての性能差は過去にはあったのでしょう。技術的な差よりも現在の日常会話では固有名詞をどの程度保有するかで決まるような気がします。現在の私に必要だったのは、日常会話系での優秀な辞書といった視点で評価しています。
当然ながら、古文や法律等の解析ではまた状況が異なるので、何かを選択すれば永久に解決といったことは無いと思われます。
付録
各提供元の本家っぽいサイトリンク一覧(順不同)
JUMAN++ 黒橋・褚・村脇研究室サイト
NEologd githubサイト 日本語readme
UniDic国立国語研究所サイト