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)
    • C&C parserのStephen Clark氏によるCCGのparsingに関する論文。
    • 後半部分は当時最新のCCG parser作りに関する話だが、前半は、CCGの理論やCCGのparsingに関する解説として非常にわかりやすく学びが多い。

理論言語学関係

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

機械の文処理関係

人間の文処理関係

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

生成力関係

標準形関係

  • CCGでは、同じ意味を複数の異なる統語構造で表現することができます(spurious ambiguity; 擬似的曖昧性)。このおかげで、逐次的な合成による構造構築が可能なのですが、統語構造と意味の間に一対一対応が取れないことから、parserを作る上では問題になると考えられていました。
  • 標準形の定義により、同じ意味を表す複数の異なる統語構造を1つに絞ることができます。
  • Eisner (1996)
  • Hoyt and Baldridge (2008)
  • Hockenmaier and Bisk (2010)

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)。
  • Google Colab上で動かせるようにしてくれているので、環境構築の必要がなく非常に便利。

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.