Help us understand the problem. What is going on with this article?

CaboChaで始める係り受け解析

More than 5 years have passed since last update.

注意

著者は自然言語処理(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_try.sh
cabocha
一郎は二郎が描いた絵を三郎に贈った。
おじいさんは山へ芝刈りに、おばあさんは川へ洗濯に行きました。

もっと試してみる。

C/C++/java/python/ruby/perlのインターフェースが提供されている。

cabochapy_try.sh
ipython

import CaboCha
c = CaboCha.Parser()
sentence = "一郎は二郎が描いた絵を三郎に贈った。"
tree =  c.parse(sentence)
print(tree.toString(CaboCha.FORMAT_XML))

サポートする出力形式は?

tree(CABOCHA_FORMAT_TREE)

caboCha_tree.sh
cabocha
一郎は二郎が描いた絵を三郎に贈った。

  一郎は---------D
    二郎が-D     |
      描いた-D   |
          絵を---D
          三郎に-D
          贈った。
EOS

lattice(CABOCHA_FORMAT_LATTICE)

caboCha_lattice.sh
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行目

  1. *
  2. 文節番号
  3. 係り先の文節番号(係り先なし:-1)
  4. 主辞の形態素番号/機能語の形態素番号
  5. 係り関係のスコア(大きい方が係りやすい)

2行目

  1. 表層形 (Tab区切り)
  2. 品詞
  3. 品詞細分類1
  4. 品詞細分類2
  5. 品詞細分類3
  6. 活用形
  7. 活用型
  8. 原形
  9. 読み
  10. 発音

xml(CABOCHA_FORMAT_XML)

cabocha_xml.sh
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_conll.sh
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」を忘れない。

mecab_make.sh
tar zxfv mecab-X.X.tar.gz
cd mecab-X.X
./configure --with-charset=utf8
make
make check
su
make install

MeCab辞書をMakeする。※「./configure」の引数を忘れない。

mecabdic_make.sh
% 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_test.sh
% mecab
% すもももももももものうち #形態素解析結果が表示。Ctrl+Cで中断。

CaboChaをインストールする。

CRF++(Yet Another CRF toolkit)をインストールする。
http://crfpp.googlecode.com/svn/trunk/doc/index.html

CRF++をMakeする。

crfpp_make.sh
./configure 
make
su
make install

共有ライブラリの追加設定をする。

vi_ld_so_conf.sh
sudo vi /etc/ld.so.conf 
# include /usr/local/bin #追記する
sudo ldconfig

公式サイトからCaboChaをダウンロードする。
https://code.google.com/p/cabocha/

CaboChaをMakeする。※「./configure」の引数を忘れない。

cabocha_make.sh
% ./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_cabochapy.sh
find / -name CaboCha.py

CabochaのPythonバインディングのソースを修正する。

vi_cabochapy.sh
sudo vi setup.py
#[修正前]
#return string.split (cmd1(str)) #def cmd2(str)
#[修正後]
#return cmd1(str).split()

CabochaのPythonバインディングを実行する。

cabochapy_setup.sh
sudo python3 setup.py install

CabochaのPythonバインディングを動作確認する。

cabochapy_test.sh
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を使いましょう。

nezuq
テクノロジー信者。学習中。
https://www.slideshare.net/nezuQ/presentations
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした