続・組合わせ範疇文法の漸進的構文解析

組合せ範疇文法の漸進的構文解析
https://m-a-o.hatenablog.com/entry/2021/05/05/085810
の補足。


type raisingとGeach ruleを拡張して
A|B => (X/(X\A))|B
A|B => (X\(X/A))|B
(A/B)|C => ( (A/T)/(B/T) )|C
(A\B)|C => ( (A\T)\(B\T) )|C
のような規則を考えることにする。ここで、記号"|"は、"/"か"\"のどちらか(どちらでもいい)。一般には
( (...(A|B1)|..)|B_n) => ( (...( (X/(X\A)) |B1)|...)|B_n)
のような形も許すべきだと思う。これらを、generalized type raising/generalized Geach ruleと(勝手に)名付けておく。これらの規則は、free pregroupにmapしても成立することは、容易に確認できる。semanticsも問題ないだろうから省略


以下は、人工的に作った例だけど、incrementalに構文解析することを考えなければ、

D/(C/(C\A))    A/B      B 
              --------------
                    A
              ---------------(type raising)
               (C/(C\A))
-----------------------------
            D

は、何も問題がない。しかし、これをincrementalにparseするには、上記のような規則を許すしかないように思える。generalized type raisingを使うと、以下のようになる。

D/(C/(C\A))           A/B                                 B
                  --------------(g-type raising)
                   (C/(C\A))/B   
--------------------------------
            D/B
---------------------------------------------------------------
                            D

generalized Geach ruleも必要である例を示す。前回、argument swapを導入したが、単純なargument swapは、以下のようにtype raisingによって実現できる。

  B                             (A\B)/C
---------(type raising)
X/(X\B)
---------------------------------------- (X:=A)
               A/C

しかし、以下のような形にすると、generalized Geach ruleが必要になる。

   B\D                                  (A\B)/C
----------- (type raising)         -----------------(g-Geach)
X/(X\(B\D))                          ((A\T)\(B\T))/C
-----------------------------------------------------(X:=A\D , T:=D)
                      (A\D)/C

この導出は、free pregrouprでも成立するものである。実際、冒頭に、Dを補って、以下が成立することに注意。

D     B\D          (A\B)/C
----------
    B
----------
 X/(X\B)
--------------------------(X:=A)
           A/C

主語と目的語を取る動詞の統語範疇は、(S\NP)/NPだったか、(S/NP)\NPだったかと一瞬でも悩む必要はない。どっちでも正しく構文解析できる。



argument swapで、
(A/B)/C => (A/C)/B
という形のものは、free pregroupでは成立しない規則であるが、同様にfree pregrouprで成立しない(が、CCGでは通常仮定される)crossing compositionがあれば実現できる。

(A/B)/C                B                             C
                 -------------(type raising)
                    A\(A/B)
------------------------------(xB<)
          A/C
---------------------------------------------------------
                        A


以下の例は、type raisingにgeneralized type raisingを重ねるなど、結構難しい。

       B                                        A\B                                            C\A                (C\B)\(C\B) 
------------------(type raising)  -----------------------------------(type raising)      -----------------(Geach)
    C/(C\B)                               (C\B)/((C\B)\(A\B))                                (C\B)\(A\B)
------------------(Geach)          ----------------------------------(g-type raising)
  (C/T)/((C\B)/T)                     (X/(X\(C\B)))/((C\B)\(A\B))
---------------------------------------------------------------------(T:=(C\B)\(C\B) , X:=C\B)
                  (C/((C\B)\(C\B)))/((C\B)\(A\B))
-------------------------------------------------------------------------------------------------------------
                              C/((C\B)\(C\B))
-------------------------------------------------------------------------------------------------------------------------------
                                                                     C

前回、incrementalにparseするのが難しい例として挙げられていた英文は、generalized type raisingとgeneralized Geach ruleを使って、以下のようにincrementalに導出木を作れる。

the   woman            that                          every                                    man                 saw
------------     ---------------           ---------------------------                     --------            ----------
    NP            (NP\NP)/(S/NP)                      NP/N                                    N                 (S\NP)/NP
------------
NP/(NP\NP)      
----------------------------------         ----------------------------(g-type raising)
       NP/(S/NP)                                 (S/(S\NP))/N
                                           ----------------------------(g-Geach)
                                               ((S/X)/((S\NP)/X))/N
----------------------------------(Geach)  ----------------------------(X:=NP)
      (NP/T)/((S/NP)/T)                        ((S/NP)/((S\NP)/NP))/N
-----------------------------------------------------------------------(T:=((S\NP)/NP))
                 (NP/((S\NP)/NP))/N
-----------------------------------------------------------------------------------------------------          --------------
                                  NP/((S\NP)/NP)                                                                  (S\NP)/NP
------------------------------------------------------------------------------------------------------------------------------
                                                            NP


Geach ruleには、次のようなcrossing型のものも考えられる。
A/B => (A\T)/(B\T)
A\B => (A/T)\(B/T)
これらのcrossing Geach rule(と例によって勝手に命名)を許すと、次のようにcrossing compositionが成立する。

  A/B                         B\C
--------------(crossing Geach)
  (A\T)/(B\T)
------------------------------------(T:=C)
              A\C
     B/C                   A\B
                     ----------------(crossing Geach)
                        (A/T)\(B/T)
--------------------------------------(T:=C)
                  A/C

crossing compositionは、通常のCCGで仮定される規則だけど、crossing Geach ruleの有無によっても制御できる。


application/composition/type raisingのみが許されるCCGの任意の導出木を、generalized type raisingとgeneralized Geach ruleを使って、(semanticsを変えることなく)incrementalな導出木に変形できることが示せると思う。基本的には、何か3つの統語範疇の並びがあって、後ろの2つが先に評価される部分を、前の2つが先に評価されるように変形していけばいい。上に挙げた例で複雑なものは、このプロセスを手で追って作った(これは、完全に機械的な作業で、この変形を行うアルゴリズムになってるはず)

更に、crosing compositionw持つ場合も、全く同様の方法で、対応するgeneralized crossing Geach ruleの追加によって、任意の導出木をincrementalな導出木に変形できる。但し、generalized crossing Geach ruleは、pregroup grammarからは逸脱した規則なので、generalized crossing Geach ruleの追加によって、文法の表現力が拡大しないことは何か別の手段がないと保証できない。


CCGには、他にも、色々な規則が仮定される場合があり、incrementalにparseするのを邪魔する可能性がある。例えば、substitutionと呼ばれる規則
f : (A/B)/C g : B/C => λc. f(c , g(c)) : A/C
は、変数cが非線形に出現するので、free pregroupでは成立しない。このような規則を追加したCCGをincrementalにparseできるのか、あるいは、incrementalにparseするのに、どのような規則を追加すればいいのか、私には予想が付かない。substitutionが、自然言語構文解析で、必要になる例があるのかは分からないので、とりあえず、気にしないことにする。


実装は次回。