CCGに関する情報集

生成文法理論の1つであるCCG(組合せ範疇文法)を、私は文法理論としても、そして文処理のモデリングの道具としても非常に有用なものであると考えていますが、残念ながら(分野によっては)人口に膾炙しているとは言い難い状況ですので、CCGの広まりを願い、ここに文献リストや参照したら良いであろう情報を記します。

文献案内

さらっと雰囲気を掴みたい場合

  • Jurafsky and Martin (to appear)
    • NLPの教科書として有名なDan Jurafsky氏とJames Martin氏による Speech and Language Processing のDraftのAppendixの1つ。
    • 最低限の組合せ規則と、CCGによるチャートパーザが簡潔に説明されている。
    • 言語学の方でも、前半だけ読むと、CCGにどういう文法操作があるのか・どういう構造を作るのか何となく掴みやすいのではないか。
  • Steedman (2022)
    • Mark Steedman氏による、網羅的なCCGの解説論文。本をギュッと圧縮したイメージ。
    • CCG分析で特徴的な構文や関連トピックについて最低限の紙幅で説明されてる。
    • 私ははじめ、これと、ここで引用されている文献を行き来して勉強した。
  • Clark (2021, arXiv)
    • C&C parserのStephen Clark氏によるCCGのparsingに関する論文。
    • 後半部分は当時最新のCCG parser作りに関する話だが、前半は、CCGの理論やCCGのparsingの概説・歴史解説として読める。

理論言語学関係

  • 統語・意味の理論としてのCCGを理解したい場合に参照すべき文献たちです。
  • その他、CCGには音韻の理論としての顔もありますが、そのあたりは詳しくないので含めていません(Steedman (2000) にはそのあたりも載っています)。
  • Steedman (1996)
    • CCG本の最初。
    • LI Monographs。100ページ強。
    • CCGで、英語を網羅的に記述できることを示すべく書かれたもの。
  • Steedman (2000)
    • Steedman (1996) の強化版。
    • 若干の理論的改訂あり。
    • Google Scholarでは出版年が誤って2001となっており、ちらほら Steedman (2001) として論文中に登場してしまう。
  • Baldridge (2002)
    • Jason Baldridge氏による博論。
    • slash typingを導入し、言語理論としてのCCGを大きく進化させた。
    • Steedman (2000) までと違い、等位接続を文法規則 ではなくconjunctのカテゴリ X\X/X で導出。
    • 博論なので、解説としても有用。
  • 戸次 (2010)
    • 日本語CCG本。
    • 日本語文法の論文としても面白い。
      • 特に活用体系や、量化子周りの話。
    • 書評 (矢田部, 2011) も面白い。
  • Steedman and Baldridge (2011)
    • 非常に簡潔にまとまったCCGの解説論文。
    • そのため、Steedman (1996)や(2000)と並んでしばしば引用されている。
    • (CCGを引用したいくらいなら、本を読むのは大変なので、こちらを読んで引用した方が良さそう。)
    • Non-Transformational Syntaxという本の1チャプター。
      • この本はほかの章も良い。Sag and Wasowの章が好き。
  • Steedman (2023)
    • ほとんどミニマリストに向けて書いてあるLIの論文。
      • ミニマリストの理論を踏まえ、「CCGならもっと簡潔に書けますよ」と主張したもの。著者の穏健な姿勢が窺える。
    • ミニマリストがCCGをはじめる際には一番わかりやすいと思われる(自分がミニマリストではないのでわからないが)。
  • Steedman (to appear)
    • Mark Steedman氏によるCCG本のドラフト。

機械の文処理関係

人間の文処理関係

  • Ades and Steedman (1982; Linguist Philos)
    • 一番最初のCCG論文。
    • 当初より逐次的な文処理を意図して作っていることが明確で良い。
    • notationは今とところどころ異なる。
  • Demberg (2012; TAG+)
    • CCGの逐次的な構造構築に関して、統語論・心理言語学の知見から(否定的に)述べられている。
    • CCGではfull incremental parseができない(英語の目的語関係節)。
      • full incremental parseを実現しようとDコンビネータを導入すると過剰生成する、という指摘。
  • Stanojevic et al. (2023; Cognitive Science)
    • CCGによる、英語文処理(fMRIによるBOLD信号)のモデリング。
    • 貢献は大きく分けて2つ。
      1. CCGが、CFG(文脈自由文法)よりもより高い精度でBOLD信号を予測できることを示した。言語理論としてより妥当なCCGが、逐次的な文処理のモデル化においても優れていることを示した。
      2. CCGの構造構築操作由来の予測子と、LLMで算出したsurprisal(文処理における強力な予測子)とは別にBOLD信号の予測に効いた。
  • Kajikawa et al. (2024; CogSci)
    • 日本語と英語の視線計測データで、CCG内の理論的に異なる文法操作が、それぞれ心理的にも異なるものとして使われていることを示唆。
  • Isono (2024; Cognition)
    • 文を逐次的に理解する際に起こる、短期記憶に由来する処理負荷を、CCGの木構造ベースで説明したもの。
    • 貢献・面白い点は、短期記憶由来の処理負荷は、今まで簡単な文脈自由文法(記述力は妥当ではない)や依存文法(単語間関係の記述は優れているが、逐次的に構造がどう構築されるかは不明瞭)でしかなかったが、それをCCG (記述力が妥当かつ、構造構築過程も明確) に発展させたこと。
      • 個人的に、CCGの良さは、単に「competence grammarのままでprocessingのことをちゃんと語れそうな理論」、ということだけではなく、「いろいろなことができすぎない理論」だと思っています。具体的に、ここでは、構成素同士の合成にちゃんと制限があって、必ずしも何でも組合せられるわけではないが(つまり、単語が順に入ってきたとき、毎度毎度その単語をすでに作っている構成素に統合できるとは限らない)、この論文では、その組合せられないポイントを証拠に人間の文処理が説明できることが経験的に示されています。

生成力関係

標準形関係

  • CCGでは、同じ意味を複数の異なる統語構造で表現することができます(spurious ambiguity; 擬似的曖昧性)。このおかげで、逐次的な合成による構造構築が可能なのですが、構造的曖昧性がなくとも構文木が一意に定まらないということなので、parserを作る上では問題になると考えられていました。
  • 標準形の定義により、(構造的曖昧性がないとき)統語構造を1つに絞ることができます。
  • Eisner (1996; ACL)
    • 証明に関する情報
    • 可能な限り関数合成(function composition)を行わないという制限により、right-branchingな標準形を定義。
    • もちろん、逆の制限にすれば、left-branchingを標準形とすることもできる。
  • Hoyt and Baldridge (2008; ACL)
    • Dコンビネータの導入と、それを含めた標準形の定義。
  • Hockenmaier and Bisk (2010; COLING)
    • Eisner (1996; ACL)の拡張。
    • generalized compositionとgrammatical type-raisingを考慮した拡張。

CCG parserを触ってみよう!

depccg

  • Pythonによる英日CCG parser。
  • Python@3.6以上、gcc@4.8以上が必要。
  • READMEが丁寧なので、基本そのまま従えば動かせる。
    • 1点だけ、depccg_{en/ja} downloadコマンドはうまくいかないので、モデルの学習済みパラメータはリンク先のGoogle Driveから直接落としてこないといけない。
  • (追記:)最新のmacだとAllenNLPがローカルで動かせないという噂。Dockerで解決するしかない、という話を小耳に挟んだことがある。

lightblue

  • Haskellによる日本語CCG parser。
  • Macユーザーなら、tidyは(おそらく)初めから入っているし、JUMAN++はHomebrew経由で入れられる。
  • 残りはREADMEに従えば動かせる。
  • 戸次 (2010)+アルファがそのまま実装されているので、語彙項目を参照するのに使い勝手が良い。

ccgtools

  • Python, Cythonによる英中CCG parser。
  • 高性能 (元State-of-the-Art)。
  • 作成者であるMilos Stanojevic氏は、Scalaで Rotating-CCG というparserも作っている(論文は Stanojevic and Steedman (2019; NAACL))。
  • Google Colab上で動かせるようにしてくれているので、環境構築の必要がなく非常に便利。
  • (追記:)読み込みができなくなっていた(?)が、エラーメッセージでpre-trained modelのリンクを教えてくれるので、それらをダウンロードすれば、ローカルで動かすことができる。

CCGの導出木をLaTeXでかく

ccg.sty

  • Jason Baldridge氏によるスタイルファイル。
  • その他、CTL, 証明木用のスタイルファイルも公開してくれている。
  • 使い方:
    • ccg.styをTeXファイルと同じディレクトリにおき、以下のようにする:
    \documentclass[10pt,a4paper]{article}
    \usepackage{ccg}
    \begin{document}
    \deriv{3}{
        \text{Taro} & \text{likes} & \text{Hanako} \\
        \uline{1} & \uline{1} & \uline{1} \\
        \mathit{NP} & \mathit{S\bs NP/NP} & \mathit{NP} \\
        & \fapply{2} \\
        & \mc{2}{\mathit{S\bs NP}} \\
        \bapply{3} \\
        \mc{3}{\mathit{S}}
    }
    \end{document}
    
    • 導出木のサイズを変えるのには、\deriv{hoge}{fuga}の前にたとえば\scriptsize\deriv{hoge}{fuga}のようにする。
    • linguexパッケージで文番号をつける:
    \ex.\label{hoge-label}
    \deriv{hoge}{fuga}
    
    • ulemパッケージ(下線とか打ち消し線を挿入する用のパッケージ)を入れると、ccg.sty内の\uline{}が衝突してしまう。
      • コマンドの名前が一致していなければ良いだけなので、ccg.styに\newcommand{\ulines}[1]{\ul{#1}}などと追加して、\deriv内では\ul{}を使うようにすれば良い。

ccg-latex.sty

  • Cem Bozsahin氏によるスタイルファイル。
  • 上述のccg.styよりも充実していそうに思われる(少なくとも、READMEやexampleは充実している。更新も割と頻繁にしているよう?)。
  • 個人的には、ccg.styで困っていないので使っていないが、いつか乗り換えても良いのかなぁと思っている。
Kohei Kajikawa
Kohei Kajikawa
Master’s student at the University of Tokyo (UTokyo).

My research interests include computational linguistics and computational psycholinguistics.