Claudeで文章を生成させてみる


最近久しぶりに Claude に対して課金を行い, 様々なことを頼んでいる. Claude といえば, その文章の自然さが非常に評判が高い AI モデルである.

正直, 私としては Gemini のようなモデルの文体に慣れてしまっており, その文体に違和感もないし, 好ましさすら覚えている. 一方で, せっかく課金したので Claude の文章生成能力を試してみたいと思い, 言語学を学ぶための小説というのを書いてもらった.

すると確かに, 自然な文章の生成能力という観点で非常に高い能力があることを実感できた. 今回はそのプロンプトと小説をまとめて載せておこう.

言語学の生成文法について、自然に学べるような興味深いIT小説を書いてください。
# 構文木の夜明け ── あるコンパイラ技術者の物語

---

## 第一章 壊れたパーサー

深夜二時のオフィスに、森川遥(はるか)のキーボードを叩く音だけが響いていた。

「また落ちた……」

モニターには無慈悲な赤い文字が並ぶ。`Syntax Error: unexpected token at line 4,208`。遥が開発している自然言語処理エンジン「KOTOBA」は、日本語の文を解析して意味構造を抽出するシステムだ。リリースまであと二週間。だが、パーサー(構文解析器)が複雑な文に出会うたびに、原因不明のエラーで停止する。

遥はコーヒーカップを傾けた。空だった。

「その設計思想が、そもそも間違っているんだよ」

声に振り向くと、隣のデスクに見知らぬ男が座っていた。白髪交じりの短い髪、丸い眼鏡、古びたツイードのジャケット。IDカードには「言語顧問 喬木(たかぎ)」とだけ書いてあった。

「……誰ですか?」

「今日からこのプロジェクトに入った。言語学が専門だ。君のコード、少し見せてもらったよ」

喬木はモニターを覗き込み、遥のパーサーのソースコードをスクロールした。

「なるほど。君は文を単語の並び——つまり線形な列として処理しようとしている。単語Aの次にBが来たら、その次にはCかDが来る確率が高い、という統計的なルールを積み上げている。いわゆるn-gramモデルに近い発想だね」

「ええ。大量のコーパスから共起パターンを学習させています」

「だから壊れるんだ」

喬木は遥のメモ帳を取り上げ、一本の文を書いた。

> **「昨日 私が 公園で 見た 犬が 今朝 隣の 家の 庭で 吠えていた」**

「この文、君のシステムはどう解析する?」

遥は眉をひそめた。「『昨日』から順に単語を読んで、それぞれの関係を……」

「それが問題だ。この文で『見た』の主語は何だ?」

「……『私が』です」

「では『吠えていた』の主語は?」

「『犬が』」

「でも文の線形な順序では、『犬が』は『見た』のすぐ後ろにある。線形に処理したら、『犬が』を『見た』の目的語と取るか、『吠えていた』の主語と取るか、曖昧になる。それだけじゃない。『昨日……見た犬が』という句全体が、実はひとつの大きな塊——名詞句になっていて、その塊全体が『吠えていた』の主語になっている」

遥は息を呑んだ。確かに、KOTOBAが頻繁に誤解析する文のパターンは、まさにこういう構造だった。

「文は線形じゃないんだ」と喬木は言った。「**文は木なんだよ**」

---

## 第二章 チョムスキーの樹

翌日、喬木は会議室のホワイトボードいっぱいに図を描いた。

「1957年。ノーム・チョムスキーという言語学者が『統語構造論(Syntactic Structures)』を出版した。それまで言語学の主流は、実際に観察された発話を分類・記述するアプローチ——構造主義言語学だった。チョムスキーはまったく違うことを言い出した」

喬木はボードの中央に大きく書いた。

> **「言語は有限のルールから無限の文を生成するシステムである」**

「生成(generate)?」と遥が聞いた。

「そう。人間は一度も聞いたことのない文を、毎日いくらでも作り出せる。今この瞬間、君がこれまで一度も口にしたことのない文を発話できる。これは単なる模倣や暗記では説明できない。有限個のルール——文法規則——が、再帰的に適用されることで、無限の文を生み出す。これが**生成文法(Generative Grammar)**の基本的な考え方だ」

遥はプログラマーとして、その発想に即座に親近感を覚えた。有限のルールから無限の出力を生み出す——それはまさに、再帰関数やプログラミング言語の文法定義と同じ構造ではないか。

「プログラミング言語のBNF記法みたいなものですか?」

喬木の目が光った。「いい線だ。実際、チョムスキーの形式文法理論はコンピュータサイエンスに絶大な影響を与えた。プログラミング言語の構文規則を記述するBNF(バッカス・ナウア記法)は、チョムスキーの**文脈自由文法(Context-Free Grammar, CFG)**とほぼ同じものだ。チョムスキーは言語学者だが、彼が定義した形式言語の階層——**チョムスキー階層**——はコンピュータサイエンスの基礎理論そのものになった」

喬木はボードに四段の階層を描いた。

`
タイプ0: 句構造文法(制約なし)→ チューリングマシン
タイプ1: 文脈依存文法 → 線形有界オートマトン
タイプ2: 文脈自由文法 → プッシュダウンオートマトン ← プログラミング言語
タイプ3: 正規文法 → 有限オートマトン ← 正規表現
`

「正規表現!」遥は声を上げた。「毎日使ってます」

「だろうね。正規表現はチョムスキー階層のタイプ3に対応する。そしてプログラミング言語のパーサーが使う文脈自由文法はタイプ2。自然言語は少なくともタイプ2、場合によってはタイプ1の表現力を必要とする。つまり、正規表現や単純なパターンマッチでは自然言語は扱えない」

「だから私のn-gramベースのアプローチでは限界がある……」

「そういうことだ。ではどうするか。**句構造規則(Phrase Structure Rules)**を使う」

喬木はボードに書き始めた。

`
S  → NP  VP        (文は名詞句と動詞句からなる)
NP → Det  N         (名詞句は限定詞と名詞からなる)
VP → V  NP          (動詞句は動詞と名詞句からなる)
NP → NP  S'         (名詞句は名詞句に関係節がつく場合がある)
`

「これは**書き換え規則(Rewrite Rules)**だ。左辺の記号を右辺の記号列に展開する。この規則を再帰的に適用すると——」

喬木は「犬が骨を食べた」という文の**構文木(Parse Tree)**を描いた。

`
         S
        / \
      NP    VP
      |    /  \
      犬が  V    NP
          |    |
         食べた 骨を
`

「木構造!」遥はようやく腑に落ちた。「だからさっきの複雑な文も——」

「そう。『昨日私が公園で見た犬が、今朝隣の家の庭で吠えていた』は、大きなNP(名詞句)の中に関係節としてS(文)がまるごと埋め込まれた、入れ子構造になっている。線形なテキストの背後に、この木構造——**深層構造(Deep Structure)**が隠れている」

遥はモニターに向き直った。KOTOBAの設計を根本から見直す必要がある。文字列ではなく、木を扱うシステムに。

---

## 第三章 移動の痕跡

三日目の夜、遥は句構造規則に基づくパーサーの試作品を動かしていた。日本語の基本的な文はうまく解析できるようになった。だが、新たな問題が現れた。

「喬木さん、この文が解析できません」

> **「何を 太郎は 食べたの?」**

「規則上、目的語の『何を』は動詞『食べた』の近くにあるべきですが、文頭に来ています」

喬木は満足げにうなずいた。「それこそが生成文法の醍醐味だ。チョムスキーは、文の**表層構造(Surface Structure)**と**深層構造(Deep Structure)**を区別した。『何を太郎は食べたの?』の深層構造は『太郎は何を食べたの?』に近い。『何を』が本来の位置から文頭へ**移動(Movement)**した、と考える」

「移動?」

「英語でも同じことが起きる。『John ate **what**?』が疑問文になると『**What** did John eat __?』になる。この`__`の部分——元の位置に**痕跡(trace)**が残ると考える。生成文法ではこの操作を**wh移動(wh-movement)**と呼ぶ。移動先と痕跡は見えない糸でつながっていて、意味的には元の位置で解釈される」

遥はキーボードに手を置いた。「つまり、パーサーは移動前の深層構造を復元する処理が必要になる……」

「その通り。そしてここが重要なポイントだ。移動にはルールがある。何でも自由に移動できるわけじゃない」

喬木は例を書いた。

> ✕「*何を 太郎が [花子が __ 食べたと] 言ったの?」(複合名詞句の中からの抽出は不可)

「この文は不自然だろう? チョムスキーはこうした制約を**島の制約(Island Constraints)**と呼んだ。特定の構造——たとえば関係節や複合名詞句——は『島』のようなもので、その中から要素を移動させることはできない。これは英語でも日本語でもスワヒリ語でも成り立つ。だからチョムスキーは、こうした制約は特定の言語の規則ではなく、人間の言語能力そのものに組み込まれた**普遍文法(Universal Grammar, UG)**の一部だと主張した」

遥は目を見開いた。「すべての人間の言語に共通する、生得的な文法?」

「そう。チョムスキーの最も大胆な仮説だ。子どもは驚くほど短い期間で、不完全な入力——言い間違いや省略だらけの日常会話——から複雑な文法を獲得する。これは言語入力だけでは説明できない。**刺激の貧困(Poverty of the Stimulus)**と呼ばれる問題だ。チョムスキーの答えは、人間の脳には言語獲得を可能にする生得的な装置——**言語獲得装置(Language Acquisition Device, LAD)**——が備わっている、というものだ」

遥はふとChatGPTのような大規模言語モデル(LLM)のことを考えた。あれは膨大なテキストデータから統計的パターンを学習するアプローチだ。チョムスキーの主張とは正反対にも見える。

「今のAIは、大量のデータさえあれば文法規則を明示的に組み込まなくても言語を扱えるようになりましたよね。チョムスキーの理論は時代遅れなんでしょうか?」

喬木はしばらく黙った。

「……いい質問だ。それについては、明日話そう」

---

## 第四章 ミニマリストの設計図

翌朝。喬木はホワイトボードを真っ白にして、ごく小さな図をひとつだけ描いた。

`
Merge(α, β) → {α, β}
`

「これだけ?」と遥は拍子抜けした。

「1990年代、チョムスキーは自身の理論を大幅に簡素化した。**ミニマリスト・プログラム(Minimalist Program)**と呼ばれるものだ。それまでの生成文法は、移動の規則やフィルターや条件が複雑に絡み合っていた。ミニマリスト・プログラムでは、文を構築する核心的な操作はたったひとつ——**併合(Merge)**だ」

「二つの要素を組み合わせて、新しい集合を作る?」

「そう。`犬`と`が`を併合して`犬が`を作る。`犬が`と`走る`を併合して`犬が走る`を作る。この操作を再帰的に適用するだけで、あらゆる文の構造が生成できる——というのがミニマリスト・プログラムの主張だ」

遥はコードを思い浮かべた。

`python
def merge(alpha, beta):
    return (alpha, beta)  # 最もシンプルな再帰的データ構造——二分木

# 「大きな犬が走る」
tree = merge(
    merge("大きな", "犬が"),   # NP: 名詞句
    "走る"                     # VP: 動詞句
)
# => (("大きな", "犬が"), "走る")
`

「これは……二分木そのものですね。関数型プログラミングのS式とかLispのコンスセルとほとんど同じだ」

「その通りだ。併合は最も単純な再帰的操作で、計算論的にはcons操作やペアの構成に対応する。チョムスキーが到達した結論は、人間の言語能力の核心はこの最小限の計算操作に還元できる、ということだ」

遥は椅子の背にもたれた。句構造規則も、移動も、島の制約も、すべてこの単純な操作から派生すると?

「もちろん異論はある」と喬木は言った。「これで本当に十分なのか、という批判は今も続いている。だが設計思想としてのエレガンスは、君たちエンジニアにも響くものがあるんじゃないか? **最小限の原始操作から、最大限の表現力を引き出す**。UNIXの設計哲学にも通じるものがある」

遥はうなずいた。"Do one thing and do it well."——ひとつのことをうまくやれ。

---

## 第五章 二つの知性

リリース前夜。遥は喬木と並んでモニターを眺めていた。新しいKOTOBAは、木構造ベースの構文解析に加え、移動の復元アルゴリズムと島の制約チェッカーを搭載している。テストスイートのパス率は92%から99.1%に跳ね上がった。

「喬木さん、最初の夜に聞いた質問の答えを、まだもらっていません」

「ああ。チョムスキーの理論は時代遅れか、という問いだったね」

喬木はコーヒーをすすった。

「大規模言語モデルは確かに驚異的だ。テラバイト級のデータから文の統計的な共起パターンを学習し、流暢な文を生成する。だが考えてみてくれ。LLMは**なぜ**特定の文が文法的で、特定の文が非文法的なのかを**説明**しない。パターンを再現するが、背後にあるルールを抽出するわけではない。一方、生成文法が追求しているのは**説明**だ。なぜ人間はこの文を作れて、あの文は作れないのか。なぜすべての言語に共通する制約があるのか。なぜ子どもはわずかな入力から言語を獲得できるのか」

遥は黙って聞いていた。

「エンジニアリングとサイエンスの違いだよ。LLMは素晴らしいエンジニアリングだ。だが生成文法は、人間の認知の根源に迫ろうとするサイエンスだ。どちらが優れているという話ではない。どちらも必要だ——そして両方を理解しているエンジニアは、より良いシステムを作れる」

遥はKOTOBAのログを見つめた。喬木の助言がなければ、自分は文字列の海で溺れ続けていただろう。統計と構造。データと理論。その両方があって初めて、言語という途方もなく複雑なシステムに立ち向かえる。

「喬木さん」

「うん?」

「併合って、人と人にも使えますかね」

喬木は少し笑った。

「Merge(遥, 喬木) → {遥, 喬木}。悪くない構造だ」

午前三時。二人のモニターに、`Build Succeeded`の緑色の文字が灯った。

---

## 著者あとがき:本作に登場する言語学の概念

本作はフィクションですが、登場する言語学の概念はすべて実在するものです。

| 概念 | 簡単な説明 |
|------|-----------|
| **生成文法** | 有限のルールから無限の文を生み出す文法理論(チョムスキー, 1957〜) |
| **句構造規則** | S → NP VP のような書き換え規則で文の構造を定義する |
| **構文木** | 文の階層的構造を木で表現したもの |
| **深層構造と表層構造** | 意味的な構造(深層)と実際の語順(表層)の区別 |
| **移動(wh移動)** | 疑問詞などが本来の位置から別の位置に移動する操作 |
| **島の制約** | 移動が不可能な構造上の「島」に関する普遍的制約 |
| **チョムスキー階層** | 形式言語を表現力で四段階に分類した階層構造 |
| **普遍文法(UG)** | すべての人間の言語に共通する生得的な文法原理 |
| **刺激の貧困** | 子どもへの言語入力が不完全にもかかわらず文法獲得が成功する問題 |
| **ミニマリスト・プログラム** | 併合(Merge)を核心操作とする生成文法の最新の枠組み |

---

*この物語が、言語とコードの奥深いつながりへの入口となれば幸いです。*

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です