#注意
著者は自然言語処理(NLP)初心者です。
記載内容に間違いがある場合は、コメントを頂けると助かります。
#MeCabの後には、何で遊ぼう?
CaboCha(南瓜)
#CaboCha(南瓜)とは?
CaboCha/南瓜: Yet Another Japanese Dependency Structure Analyzer
CaboCha は, SVM(Support Vector Machines) に基づく日本語係り受け解析器です。
引用元:cabocha - Yet Another Japanese Dependency Structure Analyzer - Google Project Hosting
#係り受け解析とは?
文節間の「修飾する(係る)」「修飾される(受ける)」の関係を調べる事です。
ex.綺麗な海
・「綺麗な」→「海」 #「綺麗な」が「海」を修飾する。
#何が嬉しいの?
自然言語の文の意味をよりシステムへ理解させられる。
ex.部屋が蒸し風呂のように暑い。
・形態素解析のみ
- 部屋
- 蒸し
- 風呂
- 暑い
-> 部屋が暑いか特定できない。
・係り受け解析まで
- 部屋が→蒸し→風呂のように→暑い
-> 部屋が暑いか特定できる。
#SVM(Support Vector Machines)とは?
機械学習アルゴリズムの一つ。高精度のデータ分類ができると言われている。
##特徴
・マージン最大化……データをカテゴリ分けする直線(分離超平面)と各データとの距離が最大になる所で線を引く。
・高次元化による線形分離……データが直線で分けられない場合も、基準(X軸・Y軸)を変えれば線が引ける。
正しくはググって下さい。
#試してみる。
cabocha
一郎は二郎が描いた絵を三郎に贈った。
おじいさんは山へ芝刈りに、おばあさんは川へ洗濯に行きました。
#もっと試してみる。
C/C++/java/python/ruby/perlのインターフェースが提供されている。
ipython
import CaboCha
c = CaboCha.Parser()
sentence = "一郎は二郎が描いた絵を三郎に贈った。"
tree = c.parse(sentence)
print(tree.toString(CaboCha.FORMAT_XML))
#サポートする出力形式は?
##tree(CABOCHA_FORMAT_TREE)
cabocha
一郎は二郎が描いた絵を三郎に贈った。
一郎は---------D
二郎が-D |
描いた-D |
絵を---D
三郎に-D
贈った。
EOS
##lattice(CABOCHA_FORMAT_LATTICE)
cabocha -f1
一郎は二郎を描いた絵を三郎に贈った。
* 0 5D 0/1 -0.620584
一郎 名詞,人名,*,*,一郎,いちろう,*
は 助詞,副助詞,*,*,は,は,*
* 1 2D 0/1 1.710282
二郎 名詞,人名,*,*,二郎,じろう,*
を 助詞,格助詞,*,*,を,を,*
* 2 3D 0/0 1.594028
描いた 動詞,*,子音動詞カ行,タ形,描く,えがいた,代表表記:描く
* 3 5D 0/1 -0.620584
絵 名詞,普通名詞,*,*,絵,え,漢字読み:音 代表表記:絵
を 助詞,格助詞,*,*,を,を,*
* 4 5D 0/1 -0.620584
三郎 名詞,人名,*,*,三郎,さぶろう,*
に 助詞,格助詞,*,*,に,に,*
* 5 -1D 0/0 0.000000
贈った 動詞,*,子音動詞ラ行,タ形,贈る,おくった,代表表記:贈る
。 特殊,句点,*,*,。,。,*
EOS
###1行目
0. *
0. 文節番号
0. 係り先の文節番号(係り先なし:-1)
0. 主辞の形態素番号/機能語の形態素番号
0. 係り関係のスコア(大きい方が係りやすい)
###2行目
0. 表層形
(Tab区切り)
0. 品詞
0. 品詞細分類1
0. 品詞細分類2
0. 品詞細分類3
0. 活用形
0. 活用型
0. 原形
0. 読み
0. 発音
##xml(CABOCHA_FORMAT_XML)
cabocha -f3
一郎は二郎を描いた絵を三郎に贈った。
<sentence>
<chunk id="0" link="5" rel="D" score="-0.620584" head="0" func="1">
<tok id="0" feature="名詞,人名,*,*,一郎,いちろう,*">一郎</tok>
<tok id="1" feature="助詞,副助詞,*,*,は,は,*">は</tok>
</chunk>
<chunk id="1" link="2" rel="D" score="1.710282" head="2" func="3">
<tok id="2" feature="名詞,人名,*,*,二郎,じろう,*">二郎</tok>
<tok id="3" feature="助詞,格助詞,*,*,を,を,*">を</tok>
</chunk>
<chunk id="2" link="3" rel="D" score="1.594028" head="4" func="4">
<tok id="4" feature="動詞,*,子音動詞カ行,タ形,描く,えがいた,代表表記:描く">描いた</tok>
</chunk>
<chunk id="3" link="5" rel="D" score="-0.620584" head="5" func="6">
<tok id="5" feature="名詞,普通名詞,*,*,絵,え,漢字読み:音 代表表記:絵">絵</tok>
<tok id="6" feature="助詞,格助詞,*,*,を,を,*">を</tok>
</chunk>
<chunk id="4" link="5" rel="D" score="-0.620584" head="7" func="8">
<tok id="7" feature="名詞,人名,*,*,三郎,さぶろう,*">三郎</tok>
<tok id="8" feature="助詞,格助詞,*,*,に,に,*">に</tok>
</chunk>
<chunk id="5" link="-1" rel="D" score="0.000000" head="9" func="9">
<tok id="9" feature="動詞,*,子音動詞ラ行,タ形,贈る,おくった,代表表記:贈る">贈った</tok>
<tok id="10" feature="特殊,句点,*,*,。,。,*">。</tok>
</chunk>
</sentence>
- chunk = 文節
- chunk/id = 文節番号
- chunk/link = 係り先の文節番号
- chunk/rel = (不明)
- chunk/score = 係り関係のスコア(大きい方が係りやすい)
- chunk/head = 主辞の形態素番号
- chunk/func = 機能語の形態素番号
- tok = 形態素
- tok/id = 形態素番号
- tok/feature = 品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
- tok/値 = 表層形
##CoNLL(CABOCHA_FORMAT_CONLL)
cabocha -f4
一郎は二郎が描いた絵を三郎に贈った。
1 一郎 一郎 名詞 名詞-人名 feature=名詞,人名,*,*,一郎,いちろう,*|begin_chunk=1|head=1 2 _ _ _
2 は は 助詞 助詞-副助詞 feature=助詞,副助詞,*,*,は,は,*|func=1 10 D _ _
3 二郎 二郎 名詞 名詞-人名 feature=名詞,人名,*,*,二郎,じろう,*|begin_chunk=1|head=1 4 _ _ _
4 が が 助詞 助詞-格助詞 feature=助詞,格助詞,*,*,が,が,*|func=1 5 D _ _
5 描いた 描く 動詞 動詞 feature=動詞,*,子音動詞カ行,タ形,描く,えがいた,代表表記:描く|begin_chunk=1|head=1|func=1 6 D _ _
6 絵 絵 名詞 名詞-普通名詞 feature=名詞,普通名詞,*,*,絵,え,漢字読み:音 代表表記:絵|begin_chunk=1|head=1 7 _ _ _
7 を を 助詞 助詞-格助詞 feature=助詞,格助詞,*,*,を,を,*|func=1 10 D
#インストールのコツ(Ubuntu14.04 + Python3)
・依存ソフトは予めインストールする。
・Mecab/CabochaはUTF-8使用設定でインストールする。
・ソースを修正する。
※CRF++/CaboChaのMakeときにエラーが発生する事がある。
その際は、忘れがちな記憶へ Ubuntuへyamcha & Cabochaをインストールを参考にさせて貰っている。
##MeCabをインストールする。
公式サイトからMeCabをダウンロードする。
http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html#install
MeCabをMakeする。※「--with-charset=utf8」を忘れない。
tar zxfv mecab-X.X.tar.gz
cd mecab-X.X
./configure --with-charset=utf8
make
make check
su
make install
MeCab辞書をMakeする。※「./configure」の引数を忘れない。
% tar zxfv mecab-juman-2.7.0-XXXX.tar.gz
% mecab-juman-2.7.0-XXXX
% ./configure --with-charset=utf8
% make
% su
# make install
MeCabのインストールを確認する。
% mecab
% すもももももももものうち #形態素解析結果が表示。Ctrl+Cで中断。
##CaboChaをインストールする。
CRF++(Yet Another CRF toolkit)をインストールする。
http://crfpp.googlecode.com/svn/trunk/doc/index.html
CRF++をMakeする。
./configure
make
su
make install
共有ライブラリの追加設定をする。
sudo vi /etc/ld.so.conf
# include /usr/local/bin #追記する
sudo ldconfig
公式サイトからCaboChaをダウンロードする。
https://code.google.com/p/cabocha/
CaboChaをMakeする。※「./configure」の引数を忘れない。
% ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8 --with-posset=juman
make
make check
su
make install
sudo ldconfig
CaboChaのインストール先フォルダを探す。
ドライブ内を"CaboCha.py"で検索し、そのファイルがあるフォルダへ移動する。
※注意
・makeでインストールした場合はインストール元フォルダも検索でヒットする。
find / -name CaboCha.py
CabochaのPythonバインディングのソースを修正する。
sudo vi setup.py
#[修正前]
#return string.split (cmd1(str)) #def cmd2(str)
#[修正後]
#return cmd1(str).split()
CabochaのPythonバインディングを実行する。
sudo python3 setup.py install
CabochaのPythonバインディングを動作確認する。
python3 test.py
#それでも入らない場合は?
Yahoo!の日本語係り受け解析APIを利用する。
※形態素解析APIもあります。
テキスト解析:日本語係り受け解析 - Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html
#まとめ
CaboChaは係り受け解析ツールです。
C/C++/java/python/ruby/perlからも使えます。
Ubuntuでインストールする時は、UTF-8指定等の設定が必要です。
CaboChaが使えない時は、Yahoo!の日本語係り受け解析APIを使いましょう。