稍微詳細地介紹下日語自然語言處理會用到的工具 [[Mecab]] 的安裝方法
Mecab 安裝指北#
前言#
如果只是少量分析的話,網上有現成的工具比如 Web ちゃまめ,在線即可解析。
網上關於 Meacb 的安裝教程不少,但仔細一看,往往寫得過於隨意。只有日文分詞器 Mecab 文檔 我愛自然語言處理這篇翻譯官方文檔的文章有細細研讀的價值。
此外,Mecab 日語分詞工具的簡單使用 - FreeMdict Forum 裡的相關討論也值得一讀。
如果還有其他不錯的教程,也歡迎補充。
在進入正題前,簡單提一下影響「形態素解析」的 2 個關鍵要素:基於不同算法開發的形態素解析器,和形態素解析辭典。
解析器能看到不少,比如 awesome-japanese-nlp-resources就能找到一大堆用各種編程語言開發、針對各種使用場景優化的解析器。
但形態素解析辭典就比較單一了,目前一般以 ChaSen、JUMAN、Unidic 辭書 三家為主,其中 ChaSen 最新版 2.4.5 更新時間 2012 年 6 月 25 日,JUMAN 最新版 1.02 更新時間 2017 年 1 月 12 日,只有 Unidic 辭書還能在最近 5 年內保持一年一更的頻率。
目前來說,運用最廣的開源形態素解析器就是 Meacb 了,下面就講解下如何在 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
編碼,其他地方一直下一步即可。
注:可以更改程序路徑,但更改後可能要手動添加到環境變量。其實 Meacb 的本體程序佔用空間不大,個人覺得沒有必要改路徑。(主要是如果出了問題,可能得老老實實重裝一遍 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("天気が良いから、散歩しましょう。"))
可能會遇到的問題#
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” could not be found.-CSDN 博客
python pip on Windows - command ‘cl.exe’ failed - Stack Overflow
‘Microsoft Visual C++ 14.0 is required’ in Windows 10 - Microsoft Community
自定義詞庫#
通過安裝包安裝的 Meacb 自帶的詞庫是 ipadic,這個詞庫的最後一次更新是在 2003 年 5 月。
通過 mecab-python3 安裝的 unidic-lite,按照其 README 文檔的說法,是 2013 年的版本 2.1.2:
At the moment it uses Unidic 2.1.2, from 2013, which is the most recent release of UniDic that's small enough to be distributed via 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
)。
然後測試如下代碼即可。
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 : Neologism dictionary for 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 も未知語処理もハードコーディングされており 自由に定義することはできない。
上面評價的關注點和形態素解析器的發展趨勢基本一致:
- 形態素解析器都在拋棄基於語法規則的思路,完全轉向基於統計學的純數學算法;
- 放棄自定義形態素解析辭典,使用 UniDic 這樣由權威機構構建維護的資源
- 開始嘗試同時支持多種語言的解析
下面列幾個我個人稍微研究過的形態素解析器:
GiNZA - Japanese NLP Library:
開發語言:Python
許可證:MIT license
最後更新時間:2023-09-25
備註:由日本公司 recruit (日:リクルート)下屬 AI 研究機構 Megagon Labs 於 2019 年開源的形態素解析工具。
Kuromoji
開發語言:Java
許可證:Apache-2.0 license
最後更新時間:5 年前
備註:從 MOJi Android 端 APK 解壓後的結果來看,應該就是用的這個解析工具。另外,[[Elasticsearch]] 默認用的也是這個。