構文解析 - 芝浦工業大学

今日の内容
自然言語処理
• 構文解析(2) 係り受け解析
– 係り受け解析の概要
Natural Language Processing
第7回
– 係り受け構造
– 係り受け解析アルゴリズム
2016/11/9
– 係り受け解析ツールの紹介
芝浦工業大学 工学部 情報工学科
杉本 徹
復習: 自然言語の解析処理の流れ
入力文
「太郎は本を読んだ。」
太郎 は 本 を 読ん だ
第4,5回 ① 形態素解析
第6,7回
② 構文解析
第8,9回
③ 意味解析
名 助 名 助 動 助動
太郎 は 本 を 読ん だ
agent
taro
第10回
④ 文脈解析
read
復習: 構文解析 ( Parsing)
• 与えられた文に含まれる,単語のまとまり(句)や
単語間の修飾関係などの構文構造を求める
• 2種類の解析方法
1. 句構造解析 ・・・ 文の句構造を求める
2. 係り受け解析 ・・・ 文の係り受け構造を求める
• 構文解析を行うことにより,
object
book
複数の文に
またがる処理
構文解析の応用例
• 映画のレビュー文からの評価表現抽出,情報検索
– 文の主語と述語がわかる
– 修飾語と被修飾語の関係がわかる
– 省略された要素の有無がわかる
文の理解
に不可欠
復習: 構文構造 (Syntactic Structure)
• 句構造/構成素構造 (Phrase/Constituent Structure)
– 隣り合う複数の構文要素が形成するまとまり(句)に着目
例:
ヒュー・ジャックマンのミュージカルで鍛えた歌唱
力は見事でしたし,ラッセル・クロウは声が渋く
て、演技も完璧でした。アン・ハサウェイは名曲
「夢破れて」を歌う歌声が素晴らしかったです。
問: 演技が完璧だったのは誰?
文章を単に形態素解析して単語の集合(bag of words)
を作る手法では,正しい答えが得られない
– 構文規則の例
構文木
文 → 後置詞句 動詞句
後置詞句 → 名詞句 助詞
• 係り受け構造/依存構造 (Dependency Structure)
– 文中の要素間の相互依存関係(係り受け関係)に着目
⇒ 構文解析(係り受け解析)が必要
1
依存構造 (Dependency Structure)
係り受け構造
• 句構造が言語表現を「全体-部分」の関係を基に
構造化するのに対して,
依存構造は言語表現の部分間の依存関係を基に
構造を考える
• 参考: 英文の場合
I read a book yesterday .
• 日本語の場合は,文節を単位として依存関係
(係り受け関係)を考えるのが一般的
– 文節の係り受け関係の向きは,必ず「左 → 右」
復習: 文節
• 文を読むとき,区切っても不自然にならないような
最小の単位
– 自立語(原則として1個)+付属語(0個, 1個 または複数個)
– 自立語(内容語) ・・・ 具体的意味内容をもつ語
• 名詞,副詞,連体詞,接続詞,感動詞
• 動詞,形容詞,形容動詞
係り受け構造
• 文節の係り受け(依存)関係
– 文中の各文節は,自分より右側にある1つの文節に
係って(修飾して)いる
– 係って(修飾して)いる文節を係り側,係られて(修飾
されて)いる文節を受け側と呼ぶ
僕は 昨日 図書館で 借りた 分厚い 本を 読んだ.
– 付属語(機能語) ・・・ 文法的機能を表す語
• 助詞
• 助動詞
係り受け構造(続き)
係り受け構造(続き)
• 別の解釈
• 不可能な解釈
僕は 昨日 図書館で 借りた 分厚い 本を 読んだ.
僕は 昨日 図書館で 借りた 分厚い 本を 読んだ.
僕は 昨日 図書館で 借りた 分厚い 本を 読んだ.
• 非交差性の条件
– 文節の係り受け関係どうしが交差してはならない
2
句構造木(構文木)と係り受け木
係り受け木
• 係り受け構造は,右端の文節を根とする木である
と考えることもできる
僕は
僕は
本を
借りた
後置詞句
本を
図書館で
昨日
読んだ
名詞句 助詞 動詞句
太郎が 分厚い本 を 読んだ
図書館で
太郎が
文
分厚い
後置詞句
昨日
係り受け木
動詞句
後置詞句
借りた
分厚い
文
句構造木
読んだ
読んだ
• 句構造木と異なり,係り受け木は,文の語順が変わった
ときでも木の形が変わらない.そのため,語順の自由度
が高い日本語の構文構造表現に適している.
動詞句
本を
分厚い
名詞句 助詞 後置詞句 動詞句
分厚い本 を 太郎が 読んだ
係り受け解析の流れ
(形態素解析 ⇒) 単語列
係り受け解析アルゴリズム
駅
で
彼女
を
名詞
助詞
名詞
助詞
駅
で
見
た
動詞 助動詞
1.文節区切りの決定
文節列
名詞 助詞
彼女
を
名詞
助詞
見
た
動詞 助動詞
2.係り受け関係の決定
係り受け構造
1.文節区切りの決定
• 文の単語列において,自立語の直前で区切る.
ただし下記の場合は区切らない
– 名詞の直前が名詞である場合(複合名詞とみなす)※1
– 動詞の直前が動詞である場合(複合動詞とみなす)
– 動詞「する」の直前がサ変接続名詞(例:勉強+する)
駅
で
名詞 助詞
彼女
を
名詞
助詞
見
た
動詞 助動詞
2.係り受け関係の決定
• 係り受け構造の表現形式
• コスト最小法(共起コスト+距離コスト)
• 探索アルゴリズム
• 統計的手法に基づく係り受け解析
※1 ただし,副詞的名詞+名詞(例:今日+私),
または接尾辞+サ変接続名詞の場合は区切る
3
コスト最小法
係り受け構造の表現形式
• 各係り受け関係にコストを課す.
• 制約条件を満たす係り受け構造のうち合計コストが
最小のものを求めるのが目標
• 文節列 b1, b2, …, bm に対する係り受け構造
(Dep(1), Dep(2), …, Dep(m-1))
文 S = b1 b2 … bm (bi: 文節)
係り受け構造 (Dep(1), Dep(2), …, Dep(m-1))
ここで Dep(i) は,文節 bi の係り先文節の番号
b1
b2
・・・ bDep(2) ・・ bDep(1) ・・・
m-1
bm
cost(Dep(1), Dep(2), …, Dep(m-1)) = Σ cost(bi, bDep(i))
i=1
• 係り受け関係 b→b’ のコスト cost(b, b’) は,
次の2種類のコストの和
• 制約条件
– i < Dep(i) ≦ m (自分より右側の文節に係る)
– どんな i, j の組に対しても,
i < j < Dep(i) < Dep(j) となることはない(非交差性)
1) 共起コスト: b, b’ それぞれの文法的(または意味的)特徴
が合っていないときに大きい値とする
2) 距離コスト: b と b’ が位置的に離れているほど大きい値
共起コストの設定例
距離コストの設定例
• 係り受け関係 b→b’ の共起コスト
b’ の主辞
用言
bの
(動詞,形容詞,
係りタイプ
形容動詞)
• 係り受け関係 b→b’ の距離コスト
体言
その他
(名詞)
(副詞,連体詞,
接続詞,感動詞)
連用接続
0
10
10
連体接続
10
0
10
b と b’ の間にある
0個 1個 2個 3個
文節の数
• ここで,文節の主辞とはその文節中の自立語の中で最も
重要な(後に現れる)語であり,文節の係りタイプは次の
判断ルールを上から順に適用して求められる
1.
2.
3.
4.
5.
0
1
2
3
4
5
b の直後に読点が
ある場合のコスト
5
4
3
2
1
0
• これらのコストは,下記の直感に対応している
文節の末尾が助詞「の」 ⇒ 連体接続
文節の末尾が(その他の)助詞 ⇒ 連用接続
文節の末尾が活用語の連用形 ⇒ 連用接続
文節の主辞が名詞,副詞,接続詞,感動詞 ⇒ 連用接続
文節の主辞が動詞,形容詞,形容動詞,連体詞 ⇒ 連体接続
– 文節は,遠くにある文節より近くにある文節に係りやすい
– 読点の直前の文節は直後の文節に係りにくい
例2
例1
昨日 図書館で 借りた 本を 読んだ
駅で 彼女を 見た
4個 5個
b の直後に読点が
ない場合のコスト
昨日 図書館で 借りた 本を 読んだ
駅で 彼女を 見た
文節
係り先
共起
コスト
距離
コスト
1
昨日
読んだ
0
3
0
図書館で
借りた
0
0
0
0
借りた
本を
0
0
読んだ
0
0
本を
読んだ
0
0
―
―
―
読んだ
―
―
―
文節
係り先
距離
コスト
文節
係り先
共起
コスト
距離
コスト
距離
コスト
係り先
共起
コスト
共起
コスト
文節
昨日
借りた
0
駅で
彼女を
10
0
駅で
見た
0
1
図書館で
借りた
0
借りた
本を
本を
読んだ
彼女を
見た
0
0
彼女を
見た
0
0
見た
―
―
―
見た
―
―
―
合計コスト = 10
>
合計コスト = 1
合計コスト = 1
<
合計コスト = 3
• 「昨日、図書館で借りた本を読んだ」 だとどうなるか?
4
復習(第3回 文章作成の技術)
長い修飾語は前に,短い修飾語は後に
コスト最小の係り受け構造を求める
アルゴリズム
• どの文が分かりやすいか考えてみよう
1. 太郎が駅前の店で花子が読んだ本を見つけた.
• CYK(Cocke-Younger-Kasami)法を使う
2. 太郎が花子が読んだ本を駅前の店で見つけた.
• 入力データ 文節列 b1, b2, …, bm
3. 駅前の店で太郎が花子が読んだ本を見つけた.
• データ構造 m行m列の三角行列 (Ti,j)
4. 駅前の店で花子が読んだ本を太郎が見つけた.
5. 花子が読んだ本を太郎が駅前の店で見つけた.
– 部分文節列 bi, …, bj に対応する最良の係り受け構造
とその構造のコストを Ti,j に格納
6. 花子が読んだ本を駅前の店で太郎が見つけた.
係り受けコストの和が小さい語順にすると,読みやすい
アルゴリズムの説明
係り受け解析の例
• 解析手順
1.主対角線上の要素を求める
Ti,i (1≦i≦m)に空の構造(コスト 0)を格納する
2.2番目以降の対角線上の要素を求める
for k = 1 to m - 1
for i = 1 to m - k
bi+1 ・・・・・・
bi+j ・・・・・・
図書館で
借りた
本を
読んだ
( ):0
2.図書館で
bi が bi+j に係るとしたときの bi, …, bi+k の合計コスト
cost(bi, bi+j) + cost(Ti+1,i+j) + cost(T i+j,i+k) を 1≦j≦k の
範囲の j に対してそれぞれ求め,コスト最小となる j
に対する係り受け構造とそのコストを Ti,i+k に格納する
bi
昨日
1.昨日
( ):0
3.借りた
( ):0
4.本を
( ):0
5.読んだ
( ):0
bi+k
凡例: 最良の構造:コスト
cost(bi, bi+j)
Ti+1,i+j
Ti+j,i+k
続き(1)
1.昨日
2.図書館で
3.借りた
4.本を
5.読んだ
昨日
図書館で
( ):0
(2):10
( ):0
借りた
続き(2)
本を
読んだ
1.昨日
2.図書館で
(3):0
( ):0
3.借りた
(4):0
( ):0
(5):0
4.本を
( ):0
5.読んだ
昨日
図書館で
借りた
( ):0
(2):10
(23):10
(33):1
本を
読んだ
( ):0
(3):0
(34):0
(44):11
( ):0
(4):0
(45):0
(55):11
( ):0
(5):0
( ):0
5
続き(3)
昨日
1.昨日
2.図書館で
( ):0
図書館で
(2):10
( ):0
3.借りた
続き(4)
借りた
本を
(33):1
(234):10
(334):1
(434):12
読んだ
昨日
1.昨日
(3):0
(34):0
(345):0
(445):11
(545):2
( ):0
(4):0
(45):0
( ):0
(5):0
4.本を
( ):0
5.読んだ
4.本を
5.読んだ
図書館で
( ):0
2.図書館で
借りた
(2):10
(33):1
( ):0
(3):0
( ):0
3.借りた
本を
読んだ
(2345):10
(3345):1
(334):1 (4345):12
(5345):3
(34):0 (345):0
(4):0
(45):0
( ):0
(5):0
( ):0
計算量は O(n3)
統計的手法に基づく係り受け解析
• 係り受け構造 (Dep(1), Dep(2), …, Dep(m-1)) の
出現確率
m-1
P(Dep(1), …, Dep(m-1)) = Π P(Bi→BDep(i))
係り受け解析ツールの紹介
i=1
– それぞれの係り受けの確率をコーパスから推定する
– 推定の際,文節がもつ様々な文法的・意味的特徴を
機械学習の素性(そせい)として用いる
• 形態素解析と同様に,確率の -log をコストと見なす
ことによりコスト最小法と対応づけることができる
CaboCha の解析精度
係り受け解析ツールの例
• CaboCha (工藤拓,2002~)
– 条件付き確率場(CRF) を用いた文節区切り
– Support Vector Machine (SVM) を用いた係り受け判定
– 局所的な係り受け判定の繰り返しによる効率的な解析(O(n))
• KNP(京都大,1993~)
– Web から自動構築した大規模格フレームを用いた,統合的確
率モデルにより解析を行う
– CaboCha より解析速度が遅いが,述語項構造解析など高度な
解析の結果を出力できる
• Yahoo! 日本語係り受け解析API
– Web 上で係り受け解析を実行できる Web サービス
• SVM による学習
– 学習用サンプルデータ: 京大コーパス(毎日新聞記事+
人手によるタグ) 8日分(約8,000文)
– 学習時間:約10時間
• 解析実験
–
–
–
–
解析テスト用データ: 京大コーパスの別の部分
解析時間: 0.5秒/文
係り受け正解率: 89.29%
文正解率: 47.53%
参考文献:「チャンキングの段階適用による日本語係り受け解析」
工藤拓&松本裕治,情報処理学会論文誌 43(6),2002
6
学情UNIXサーバでのインストール手順
CaboCha のインストール方法
詳しくは,CaboCha のホームページ参照
• Windows
– CaboCha のホームページから自己解凍インストーラ(~.exe)を
ダウンロードしてインストール
– 学情の環境では不可
• ここでも自分のホームディレクトリ下の usr という名前のディレクトリ
にインストールすると想定して説明する
手順1 CRF++-0.58.tar.gz を適当なディレクトリへダウンロードし,以下の コ
マンドを順に実行する
(注: CRF++のダウンロードサイトは検索エンジンにて「CRF++」で検索すると
見つかります)
• UNIX
– CRF++ と CaboCha のソースコードをダウンロードし,ホームペ
ージの説明を参考に,それぞれコンパイル,インストール
– インストール時の設定により,学情のUNIXサーバにもインスト
ール可能(次ページ以降で説明)
tar zxvf CRF++-0.58.tar.gz
cd CRF++-0.58
./configure --prefix=$HOME/usr --with-charset=utf8
make
make install
続き
手順2 次に,CaboChaをインストールする. cabocha-0.69.tar.bz2 をダウ
ンロードし,以下のコマンドを順に実行する
tar jxvf cabocha-0.69.tar.bz2
cd cabocha-0.69
./configure --prefix=$HOME/usr (次の行に続く)
--with-charset=utf8 (次の行に続く)
--with-mecab-config=$HOME/usr/bin/mecab-config
LDFLAGS="-L$HOME/usr/lib" (次の行に続く)
CPPFLAGS="-I$HOME/usr/include"
make
make check
make install
手順3 インストールが終わったら,CaboCha を起動する
~/usr/bin/cabocha
(または単に cabocha)
今日のまとめ
• 構文解析(2) 係り受け解析
– 係り受け解析の概要
– 係り受け構造
CaboCha の使い方
• CaboCha を起動し,解析したい文を標準入力から入力する
入力文
文節番号
% cabocha –f1
駅で彼女を見た。
* 0 2D 0/1 -1.946565
駅
で
名詞,一般,*,*,*,*,駅,エキ,エキ
助詞,格助詞,一般,*,*,*,で,デ,デ
* 1 2D 0/1 -1.946565
文節
彼女
を
名詞,代名詞,一般,*,*,*,彼女,カノジョ,カノジョ
助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
* 2 -1D 0/1 0.000000
係り先の
文節番号
見
た
。
動詞,自立,*,*,一段,連用形,見る,ミ,ミ
助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
記号,句点,*,*,*,*,。,。,。
EOS
• または,解析したい文章を1文ずつ行に区切ってテキストファイ
ルに保存し,そのファイル名を引数としてCaboChaを実行する
宿題 (提出不要,解答は次回)
1.「黒い目の大きな猫」という句の係り受け構造を
考えて図示しなさい.文法的に正しい解釈が複数
考えられる場合は,そのすべてを図示すること.
– 係り受け解析アルゴリズム
– 係り受け解析ツールの紹介
2.図示した係り受け構造のそれぞれが,この句の
どのような意味の解釈に対応するか説明しなさい.
7
お知らせ: 杉本研のプレゼミ
1) 本日 11月 9日(水) 5限: 研究分野・研究室紹介
2)
11月16日(水) 5限: 研究分野・テーマ紹介
場所: 405教室
☆ 自然言語処理の研究に興味のある人は
ぜひご参加ください! 大学院進学希望者歓迎!
8