attack - AIRnet

演習3 最終発表
情報科学科4年
山崎孝裕
自然言語の意味処理
 LiLFeS上でHPSGを使って簡単な英文を構
文解析し、文の意味関数を構築する。
 構築された意味関数をLiLFeSの述語環境
の下で評価し、与えられた文の真偽を判定
する。または、与えられた文が真となるよう
環境を書き換える。
構文要素の意味関数
 構文解析によって得られた構文要素は、関
数として扱う。
 構文木が構築され新しい構文要素ができる
ことにより、下位の関数が組み合わさって新
しい意味関数が組み立てられる。
関数の型(1)
関数の型はeとtの基本型とそれらを組み合
わせたものからなる。



e: エンティティ
t: 真偽値・・・
<α,β>: 型αの引数をとって型βの値を返すよう
な関数の型
<α,β>は、「β/α」・「α→β」のように書くことも
ある。
関数の型(2)
例




ichiro: e (エンティティ)
representative: <e, t> (集合を表す1引数述語)
talk: <e, t> (主語を取る1引数述語)
attack: <e, <e, t>> (目的語と主語を取る1引数
述語)
関数の適用
 型<α,β>を持つ関数に、型αをもつ関数が適
用されることで、型βをもつ関数が構成され
る。
 今回の実装においては、λ計算のように、仮
引数の部分を実引数で置き換えるという方
法で関数を適用している。
関数の意味
 関数はλ抽象されている。
例えば前述のtalkやattackの場合、
talk = λx. talk(x)
attack = λx.λy.attack(x, y)
のように、述語(イタリック体で表記)に仮引
数を渡しλ抽象している。
文の意味組成(1)
 “Ichiro attacks Junichi.”という文を考えると、
attack: <e, <e, t>>にjunichiが適用され、
attack junichi: <e, t>
= attack(junichi)
= (λx.λy.attack(x, y))(junichi)
= λy.attack(junichi, y)
となる。
文の意味組成(2)
さらにこれにichiroが適用され、
ichiro attack junichi: t
= (λy.attack(junichi, y))(ichiro)
= attack(junichi, ichiro)
という意味になる。
文の意味組成(3)
 どの構文要素と構文要素の関数が適用さ
れるかは、構文解析の際の下位範疇化で
の組み合わせとなる。
 どちらがどちらに適用されるか、すなわちど
ちらが関数として振る舞い、どちらが引数と
して振舞うかは、両関数の型を見て決定す
る。
量化子(1)
 量化子の入った表現“Every representative talks.”
を考えてみる。
得たい論理表現は、
∀x.(representative(x) → talk(x))
である。
これは、前とおなじように
talk(every representative)
としたのではうまく表現できない。
量化子(2)
 量化子を型<<e, t>,<e, t>, t>を持つ関数と考
える。すなわち、2つの1引数述語を取るよう
な述語と考える。すなわち、everyは、
every
= λP.λQ.every(P, Q)
= λP.λQ.∀x(P(x) → Q(y))
のように表される。
量化子(3)
 改めて“Every representative talks.”の意味
を考えてみると、どちらが関数として適用さ
れるかが入れ替わり、
every representative talk
= (every(representative))(talk)
= ∀x.(representative(x) → talk(x))
のように文の意味を考えることができる。
目的語につく量化子
 前で扱った量化子は主語について量化をす
るものだった。目的語に量化子がついた場
合には、問題が生じる。


型が合わなくなる。
主語と両方に量化子がついた場合、解釈が複
数考えられうる。
型の不整合(1)
 目的語に量化子のついた、“Ichiro attacks
every representative.”という文を考える。
自然な解釈としては、
∀x(representative(x) → attack(x, ichiro))
となるはずである。
型の不整合(2)
 関数の構成を試みてみる。構文解析によっ
て、attackとevery representativeが組み合わ
さるはずであるが、両者の型を見ると、


attack: <e, <e, t>>
every representative: <<e, t>, t>
のようになっており、これらを適用させること
はできない。
型の不整合(3)
 それぞれの関数を見なおしてみると、


attack = λx.λy.attack(x, y)
every representative
= λP.∀x(representative(x) → P(x))
である。両者を見比べると、それぞれxで書
いた部分が、文の目的語になるべきである。
attackをPに代入するのを妨げているのはλy
の存在である。
型の不整合(4)
 そこで、適用に加えて、もう一つ関数を組み
上げる方法を考える。すなわち、


λx.λy.P(x, y): α→β→ t
λR.Q(R): (α→ t) → γ
という形の2つの関数があった場合、
λy.Q((λx.P(x, y))): β→ γ
にするというものである。
型の不整合(5)
 これを用いると、


attack = λx.λy.attack(x, y)
every representative
= λP.∀x(representative(x) → P(x))
を組み合わせることができ、
型の不整合(6)
attack every representative
= λy.∀x(representative(x)→(λx.attack(x, y))(x))
= λy.∀x(representative(x) → attack(x, y))
ichiro attack every representative
= (λy.∀x(representative(x)→attack(x, y)))(ichiro) =
∀x(representative(x) → attack(x, ichiro))
のように意味関数を構成することができる。
二つの量化子(1)
 主語と目的語の双方に量化子がつくと、文
の意味が複数にとれることがある。
 たとえば、“Every man likes some women.”
のような文があった場合、


∀y(man(y) → ∃x(woman(x) ∧ like(x, y)))
∃x (woman(x) ∧ ∀y(man(y) → like(x, y)))
の二つの解釈が考えられる。
二つの量化子(2)
 前者の解釈は先に扱った目的語に量化子がつく
場合の解釈そのままである。
 後者に関して、この関数を構成してみる。
まず、3つの表現は、
every man = λP.∀y(man(y) → P(y))
like = λx.λy.like(x, y)
some women = λQ.∃x(woman(x) ∧ Q(x))
となっている。
二つの量化子(3)
 every manを適用すれば先の文の意味関数
になるようにsome womenを構成すると、
λR.(∃x (woman(x) ∧ R(λy. like(x, y))))
のようになる。
この二つを見比べると次のような可能性が
見えてくる。
二つの量化子(4)
 Q(x)を、二つの関数の合成と考え、
Q(x) = R(P(x))
とし、
some women
= λQ.∃x(woman(x) ∧ Q(x))
= λP.λR.(∃x(woman(x) ∧ R(P(x))))
とすることで、このPにlikeを代入することで、先の
表現を手に入れることができる。
二つの量化子(5)
 これを第三の関数組み上げ規則とすること
で、目的語に量化子がついたような表現で
あっても、扱うことができるようになる。
参考文献
 “Semantics in Generative Grammar” (1997)
Irene Heim, Angelika Kratzer
Blackwell Pub
 『意味論 1 -形式意味論-』 (1998)
杉本孝司
くろしお出版