NACLO 為主的語奧計算語言題目培訓手冊

NACLO考題分析(2007–2026)× 計算語言學互動入門

目錄
  1. NACLO 考題類型與分布
  2. 語言學知識點與計算思維面向
  3. 計算語言學入門:五個互動單元
    1. 有限狀態自動機(FSA)與轉寫機(FST)
    2. 上下文無關文法(CFG)與剖析樹
    3. 編輯距離(Edit Distance)
    4. 詞嵌入與向量空間語意學
    5. 資訊理論:熵與 Huffman 編碼
  4. 五單元速覽與教學建議
  5. 模擬試題:程式語言作為未知語言(含互動模擬器與詳解)
    1. Koro — Stack 語言
    2. Jex — Quotation 語言
    3. Relka — 邏輯語言

一、考題類型與分布

NACLO 每年設 Open Round(公開賽,約 8–10 題)與 Invitational Round(邀請賽,約 5–8 題,難度更高)。根據 2007–2026 年共約 280+ 道題目,可歸納為九大類型。

類型分布概覽

形態─翻譯(Rosetta)
~38%
文字系統/書寫
~14%
計算/形式語言
~12%
音韻學
~9%
數詞系統
~8%
語意/語用
~7%
NLP / ML 應用
~5%
句法
~5%
歷史/比較語言學
~3%
趨勢觀察:2020 年後 NLP/ML 相關題目明顯增加(如 attention mechanism、GloVe embeddings、LLM 行為分析),反映該競賽與時俱進的特色。同時,涉及瀕危語言與原住民語言的題目比例也逐年提高。

各類型詳述

🗂 形態─翻譯型(Rosetta Stone)最大宗

提供未知語言的句子與對譯,要求歸納形態規則後翻譯新句。涵蓋南島語族、北美原住民語、非洲語言、高加索語言等。

代表題:Witsuwit'en Word Salad (2026) · Meowing in Māori (2026) · Paiwan in Progress (2024) · A Menya Puzzle (2018)
✍️ 文字系統與書寫

古文字解讀、非拉丁文字對應、人造書寫系統。核心是 pattern recognition 與符號─音韻對映推理。

代表題:A Tale of Three Scripts (2026) · A Handheld Tablet (2025) · N'ko, M'kay (2018) · Phoenician Fun (2013)
⚙️ 計算/形式語言 NACLO 特色

FSA/FST、Huffman 編碼、DAWG、CFG/CCG、edit distance、密碼學、邏輯推理。這是 NACLO 區別於 IOL 的標誌性特色。

代表題:Follow the Rules (2024) · DAWG Breeds (2016) · Horn Clauses (2016) · CCG (2014) · Huffman (2013) · aw-TOM-uh-tuh (2008)
🤖 NLP / 機器學習應用

近年新增:attention 可視化、word embeddings 空間分析、LLM 錯誤模式辨識、機器翻譯後編輯等。

代表題:aLLMost, but not quite (2024) · GloVe Compartment (2021) · Pay Attention (2020) · Not Quite Right (2025)

二、語言學知識點與計算思維面向

A. 語言學知識點

知識領域具體考點頻率
形態學黏著 vs 屈折、詞綴切分、重疊、名詞類別、動詞一致性、領屬標記★★★★★
音韻學元音和諧、輔音交替、聲調、重音規則、音節結構、規則排序★★★☆☆
文字學字母、音節文字、語素文字、abugida/abjad 辨識;正寫法設計★★★☆☆
句法學語序類型、關係子句、格標記、一致性、ergativity★★★☆☆
語意學詞義關係、evidentiality、TAM、真值條件、親屬稱謂★★☆☆☆
語言多樣性瀕危語言、polysynthesis、serial verbs、classifiers、pidgin/creole★★★★☆

B. 計算思維面向

計算能力在 NACLO 中的表現頻率
模式辨識從平行語料歸納形態─語意對映規則★★★★★
約束滿足多重條件下找唯一合法對映(CSP)★★★★☆
遞迴與組合性數詞乘加結構、嵌套關係子句★★★☆☆
形式語言與自動機FSA/FST、CFG、Huffman、正規表達式★★★☆☆
搜尋與回溯密碼破解、Levenshtein distance★★☆☆☆
向量空間推理GloVe 幾何、attention 矩陣、LLM 偏差分析★★☆☆☆

C. 跨域整合出題模式

形態分析 × 約束滿足

不完整翻譯對照表,多重形態規則交叉限制,消去法求解。

音韻規則 × 形式語言

音韻交替以 FST 或 rewrite rules 呈現。

語意場 × 向量空間

GloVe/WordNet 中推理詞義關係。

文字解碼 × 搜尋演算法

密碼破解 = combinatorial search + 音韻/形態約束。

三、計算語言學入門:五個互動單元

每單元依循「類比 → 公式 → 互動模擬」三段遞進,為人文社會背景學生設計。

UNIT 1 有限狀態自動機(FSA)與轉寫機(FST)
🎯
類比

想像捷運站閘門——它只記得「目前在什麼狀態」(等待 → 已投幣 → 已通過),根據輸入決定下一步,沒有記憶、沒有計算器。這就是 FSA。若閘門在每次轉換時還輸出動作(印收據、亮燈),那就是 FST——語言學中用它描述音韻規則。

形式定義
$$\text{FSA} = (Q,\;\Sigma,\;\delta,\;q_0,\;F)$$
$Q$ = 有限狀態集,$\Sigma$ = 輸入字母表,$\delta\colon Q \times \Sigma \to Q$ = 轉移函數,$q_0 \in Q$ = 起始狀態,$F \subseteq Q$ = 接受狀態

FST 擴展為 $(Q,\,\Sigma,\,\Gamma,\,\delta,\,\omega,\,q_0,\,F)$,多了輸出字母表 $\Gamma$ 和輸出函數 $\omega\colon Q \times \Sigma \to \Gamma^*$。

互動模擬:土耳其語元音和諧 FST

元音和諧轉寫機

輸入土耳其語詞幹,後綴模板中的大寫 A 會根據詞幹最後元音的前/後特徵自動和諧。前元音 (e, i, ö, ü) → A=e;後元音 (a, ı, o, u) → A=a。

NACLO 實戰題:aw-TOM-uh-tuh(2008)·Harmongolia(2019)·Follow the Rules(2024)
語言學洞見:Kaplan & Kay (1994) 證明幾乎所有音韻規則都可用 FST composition 表達。FST 的「局部性」限制恰好對應音韻規則的線性本質。
UNIT 2 上下文無關文法(CFG)與剖析樹
🎯
類比

CFG 就像食譜——「一份沙拉 = 底菜 + 配料 + 醬汁」,而「底菜」可展開為「生菜 | 菠菜」。$\text{S} \to \text{NP}\;\text{VP}$ 是語言的食譜:句子拆成名詞片語和動詞片語。FSA 無法處理 $a^n b^n$(需記住出現次數),CFG 靠遞迴做到。

形式定義
$$\text{CFG} = (N,\;\Sigma,\;R,\;S) \qquad A \to \alpha,\;\; A \in N,\;\alpha \in (N \cup \Sigma)^*$$
互動模擬:中文迷你剖析器

中文句子剖析樹

輸入由以下詞彙組成的中文句子。名詞:貓、魚、書、學生|動詞:吃、讀、追|限定詞:那、這

NACLO 實戰題:CCG(2014)·Sentences that go on and on(2017)·Intergalactic Grammars(2018)
語言學洞見:Chomsky 層級 $\text{regular} \subset \text{context-free} \subset \text{context-sensitive} \subset \text{r.e.}$ 也是語言能力的度量。自然語言落在 CFG 與 mildly context-sensitive 之間——CCG、TAG 因此比純 CFG 更受青睞。
UNIT 3 編輯距離(Edit Distance)
🎯
類比

「接龍變字」遊戲:cat → cot → cog → dog,3 步。Levenshtein distance 就是最佳解——最少幾次插入、刪除、替換能讓兩字串互變。語言學中,拉丁語 pater → 西班牙語 padre 之間的「編輯」就是歷史音變。

遞推公式(動態規劃)
$$D[i,j] = \min \begin{cases} D[i{-}1,\,j] + 1 & \text{(刪除)} \\[3pt] D[i,\,j{-}1] + 1 & \text{(插入)} \\[3pt] D[i{-}1,\,j{-}1] + \mathbb{1}_{[a_i \neq b_j]} & \text{(替換/保留)} \end{cases}$$
互動模擬:DP 矩陣視覺化

編輯距離計算器

輸入兩個字串,即時顯示 DP 矩陣與最優路徑(紅色標記)。

NACLO 實戰題:Levenshtein's Fine Signs(2014)·Playing the Cognate Game(2013)·Minimum Spelling Trees(2015)
語言學洞見:歷史音變不是任意的——t→d(濁化)的成本應低於 t→m。實務上用加權編輯距離,權重由音韻特徵距離決定。這是 ALINE 同源詞對齊演算法的核心思路。
UNIT 4 詞嵌入與向量空間語意學
🎯
類比

向外星人描述水果——用「甜度」和「酸度」兩個軸,在座標紙上標出位置。蘋果和梨靠很近,檸檬遠在酸的那端。Word embedding 做同樣的事,只是維度從 2 變成 50–300,座標從海量文本的共現統計學出。Firth (1957):You shall know a word by the company it keeps

核心概念
$$J = \sum_{i,j} f\!\left(X_{ij}\right)\left(\mathbf{w}_i^\top \tilde{\mathbf{w}}_j + b_i + \tilde{b}_j - \log X_{ij}\right)^{\!2}$$
GloVe 目標函數:讓詞向量內積 ≈ 共現次數對數
$$\vec{v}(\textit{king}) - \vec{v}(\textit{man}) + \vec{v}(\textit{woman}) \;\approx\; \vec{v}(\textit{queen})$$
$$\cos\theta = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\|\;\|\mathbf{B}\|}$$
餘弦相似度:度量語意接近程度
互動模擬:2D 詞向量空間

詞向量散布圖與餘弦相似度

點擊任意兩個詞,計算它們的餘弦相似度。顏色代表語意群組。

NACLO 實戰題:GloVe Compartment(2021)·Nothing but (Net)works(2017)·WordNet Battleship(2023)
語言學洞見:分佈向量捕捉的是「典型共現語境」而非「真值條件意義」。kingqueen 的向量接近,是因為它們出現在相似句子中。理解 Firth 式語意 vs. Frege 式語意的區分,是從做題跨入語言學思考的關鍵一步。
UNIT 5 資訊理論:熵與 Huffman 編碼
🎯
類比

猜數字遊戲:1–100,用「是/否」問題猜,二分法最多 7 題($2^7 = 128 > 100$)。衡量的就是「平均需要幾個二元問題才能確定答案」。Huffman 編碼是最優實現:高頻符號短碼,低頻長碼。自然語言天然如此——the 三字母,antidisestablishmentarianism 二十八字母。

Shannon 熵
$$H(X) = -\sum_{i}\, p(x_i)\;\log_2 p(x_i) \qquad \text{(bits)}$$
互動模擬:Huffman 編碼器

Huffman 編碼與熵計算

輸入任意文本(英文或中文),自動計算字元頻率、Shannon 熵,並建構 Huffman 編碼表。

NACLO 實戰題:The Heads and Tails of Huffman(2013)·Pseudorandom Numbers(2022)·One, Two, Tree(2012)
語言學洞見:Shannon 估算英語熵約 1.0–1.5 bits/char(最大值 $\log_2 26 \approx 4.7$),約 70% 冗餘。這種冗餘讓我們在嘈雜環境仍能理解語言。LLM 的 perplexity 本質上就是在估算這個熵——跟 Shannon 的猜字遊戲如出一轍。

四、五單元速覽與教學建議

單元核心概念語言學連結NACLO 密度時數
1. FSA/FST狀態、轉移、輸入─輸出轉寫音韻規則、正寫法轉換★★★★3h
2. CFG產生規則、遞迴、剖析樹句法結構、Chomsky 層級★★★3h
3. Edit DistanceDP 矩陣、對齊、加權成本同源詞判定、音變模型★★2h
4. Embeddings向量空間、cosine、類比分佈語意、詞義關係★★★2h
5. 資訊理論熵、Huffman、冗餘Zipf、壓縮、perplexity★★2h
整體建議:五單元合計約 12 小時,可作為 IOL 寒假集訓的「計算語言學週」。每單元:30 分鐘類比與概念 → 40 分鐘互動模擬實作 → 50 分鐘 NACLO 真題演練。若時間有限,Unit 1(FSA)和 Unit 4(Embeddings)的投資報酬率最高。

五、模擬試題:程式語言作為未知語言

以下三題將真實的程式語言概念(stack machine、quotation、logic programming)包裝為「未知語言」,讓學生在零程式背景下體驗 NACLO 計算面向的題型。建議作答時間 90 分鐘。每題附有完整詳解與互動模擬器。

第一題 Koro(Stack 語言)

Koro 是一種未知語言,作用於一個序列(stack)。序列以 […] 表示,右端為頂端。元素可以是整數(如 3)、布林(T / F)、或子序列(如 {1 2})。

已知資料(順序已打亂)

編號輸入指令輸出
[A][4]zaku[4 4]
[B][3 8]pilo[8 3]
[C][2 5]nari[7]
[D][F T]nari[T]
[E][{1} {2 3}]nari[{1 2 3}]
[F][2 5]motu[10]
[G][{2 5} 9]toro[{2 5 9}]
[H][9 {2 5}]toroinvalid
[I][100 200 T]seku[100]
[J][100 200 F]seku[200]
[K][T]zaku nari[T]
[L][3 4]zaku nari[3 8]
[M][3 4]nari zaku[7 7]

(a) 請說明每個指令的功能

zaku、pilo、nari、motu、toro、seku

(b) 請解釋為什麼

[K] 與 [L] 結果不同;[L] 與 [M] 結果不同

(c) 計算

[6] zaku nari
[2 3 4] pilo nari
[{1} {2}] nari zaku

(d) 關鍵題:以下哪些敘述正確?(可複選)

① nari 永遠是加法 ② nari 的行為取決於輸入型別 ③ toro 對任何輸入都有效 ④ seku 只依賴最後一個元素 ⑤ pilo 不會改變元素內容

▶ 第一題詳解

(a) 指令功能

指令功能類比推導依據
zaku複製頂端元素(dup)影印機[A]: 4→4 4
pilo交換頂端兩元素(swap)翻牌[B]: 3 8→8 3
nari合併頂端兩元素(多型:整數=加法、布林=OR、序列=串接)黏合劑[C]+[D]+[E] 三筆交叉比對
motu頂端兩整數相乘(mul)乘法器[F]: 2×5=10
toro將頂端元素追加到下方序列尾端(snoc)排隊加人[G] vs [H]:需序列在下、元素在上
seku依頂端布林從下方兩元素中選擇(T=較深者、F=較淺者)if-then-else[I] vs [J]

(b) K vs L vs M 的差異

[K] vs [L]:zaku 只複製頂端,nari 只作用於最頂端的兩個元素。

[K] [T] zaku → [T T],nari(T,T) = T OR T = T → [T]
[L] [3 4] zaku → [3 4 4],nari(4,4) = 4+4 = 8 → [3 8]
   注意:nari 只消耗頂端兩個,底部的 3 不受影響

[L] vs [M]:指令順序不同,結果完全不同。

[L] [3 4] → zaku → [3 4 4] → nari → [3 8](先複製再合併)
[M] [3 4] → nari → [7] → zaku → [7 7](先合併再複製)

這體現了 stack 語言的核心特性:指令順序即程式邏輯

(c) 計算

[6] zaku nari → [6 6] → [12]

[2 3 4] pilo nari
  pilo 交換頂端兩個:[2 3 4] → [2 4 3]
  nari 合併頂端兩個:4+3 = 7 → [2 7]

[{1} {2}] nari zaku
  nari 串接序列:{1}+{2} = {1 2} → [{1 2}]
  zaku 複製:→ [{1 2} {1 2}]

(d) 正確敘述

① nari 永遠是加法[D] 布林為 OR、[E] 序列為串接
② nari 的行為取決於輸入型別整數→加、布林→OR、序列→concat
③ toro 對任何輸入都有效[H] 順序錯誤即 invalid
④ seku 只依賴最後一個元素選擇邏輯依賴布林,但結果取決於另外兩個元素
⑤ pilo 不會改變元素內容只交換位置,不修改值

答:② ⑤

語言學知識點:nari 的多型行為(polymorphism)對應自然語言中的一詞多義(polysemy)——同一個詞的意義隨上下文(此處為型別)而變。這也呼應了計算語言學中 type-driven semantics 的核心思想。

Koro 互動模擬器

輸入 stack 初始狀態和指令序列,逐步觀察 stack 變化。指令:zaku pilo nari motu toro seku

第二題 Jex(Quotation 語言)

Jex 是一種未知語言,其中 […] 表示一段「可被執行的內容」(quotation)。

資料

#程式結果
[1]4 dup4 4
[2]3 8 swap8 3
[3][2 5 add] run7
[4]3 [dup add] run6
[5][1 2] [dup concat] run[1 2 1 2]
[6][dup] runinvalid
[7][3 dup] run3 3
[8][dup dup add] runinvalid
[9]4 [dup dup add add] run12

(a) 解釋以下指令的功能

dup、swap、add、concat、run

(b) 為什麼 [6] 是 invalid,但 [7] 是 valid?

(c) 以下哪個程式會成功執行?

[add] run[3 add] run[dup add] run5 [dup add] run

(d) 語境題:為什麼同一個 [dup add] 在不同情況下結果不同?

▶ 第二題詳解

(a) 指令功能

指令功能推導依據
dup複製 stack 頂端[1]: 4→4 4
swap交換頂端兩元素[2]: 3 8→8 3
add頂端兩元素相加[3]: 2+5=7
concat串接兩個 quotation[5]: [1 2]+[1 2]=[1 2 1 2]
run取出頂端的 quotation 並執行其內容[3]–[9] 綜合推導

(b) [6] vs [7]

[6] [dup] run:run 取出 [dup] 並執行。此時 stack 是空的。dup 需要至少一個元素才能複製 → invalid(stack underflow)。

[7] [3 dup] run:run 取出 [3 dup] 並執行。先 push 3,stack 變 [3];再 dup → [3 3]。quotation 自帶資料,所以不會 underflow → valid

關鍵洞察:run 執行 quotation 時,quotation 可以存取外部 stack(如 [4]),也可以自帶資料(如 [7])。但若 quotation 內的指令所需的資料既不在外部 stack 也不在 quotation 內部,就會失敗。

(c) 判斷

[add] runstack 空,add 需要兩個元素
[3 add] runquotation 內 push 3,但 add 仍需兩個元素(只有一個)
[dup add] runstack 空,dup 就已失敗
5 [dup add] run外部 stack 有 5 → dup=5 5 → add=10

答:僅 ④

(d) 語境依賴

[dup add] 本身只是一段「程式碼」,不包含資料。它的行為完全取決於 run 執行時的 stack 語境

• 空 stack + [dup add] run → invalid(無料可用)
• 5 [dup add] run → 5 dup = 5 5, add = 10
• 3 [dup add] run → 3 dup = 3 3, add = 6
• [1 2] [dup add] run → [1 2] dup = [1 2] [1 2], add → 型別錯誤?

語言學連結:這和自然語言中代詞的照應(anaphora)極為相似——「他跑了」中的「他」意義取決於前文語境。quotation 裡的 dup 就像一個代詞,它「指涉」的對象要到執行時才確定。這正是語用學中 context-dependence 的計算類比。

Jex 互動模擬器

輸入程式碼(如 5 [dup add] run),觀察逐步執行過程。

第三題 Relka(邏輯語言)

Relka 是一種描述關係的語言。

事實

par(ana, bo)  par(ana, cy)  par(bo, di)  par(cy, el)
fem(ana)  mas(bo)  fem(cy)

規則

mom(X,Y) :- par(X,Y), fem(X)
dad(X,Y) :- par(X,Y), mas(X)
sib(X,Y) :- par(Z,X), par(Z,Y)

anc(X,Y) :- par(X,Y)
anc(X,Y) :- par(X,Z), anc(Z,Y)

查詢範例

?- mom(ana, bo) → yes   ?- dad(ana, bo) → no   ?- anc(ana, di) → yes

(a) 解釋符號

par、:-、?-、anc

(b) 判斷

?- dad(bo, di)?- anc(ana, el)?- sib(bo, bo)

(c) 陷阱題:為什麼 sib(bo, bo) 會成立?

(d) 設計題:如何修正 sib 的定義?

▶ 第三題詳解

(a) 符號解釋

符號意義
par(X,Y)X 是 Y 的親代(parent)
:-規則定義符(「若右邊成立,則左邊成立」),等同於邏輯蘊含 ←
?-查詢符(「以下命題是否成立?」)
anc(X,Y)X 是 Y 的祖先(ancestor),由兩條遞迴規則定義

(b) 判斷

?- dad(bo, di)
  需要:par(bo, di) ✓ 且 mas(bo) ✓
  → yes

?- anc(ana, el)
  嘗試規則 1:par(ana, el)? 事實中沒有 → 失敗
  嘗試規則 2:par(ana, Z), anc(Z, el)?
    Z = cy:par(ana, cy) ✓,anc(cy, el)?
      anc 規則 1:par(cy, el) ✓ → 成功!
  → yes(ana 是 el 的祖母)

?- sib(bo, bo)
  sib(X,Y) :- par(Z,X), par(Z,Y)
  X=bo, Y=bo, Z=ana:par(ana, bo) ✓, par(ana, bo) ✓
  → yes(!)

(c) 為什麼 sib(bo, bo) 成立?

規則 sib(X,Y) :- par(Z,X), par(Z,Y) 只要求 X 和 Y 有共同的親代 Z,但沒有排除 X 和 Y 是同一個人的情況。當 X=Y=bo、Z=ana 時,par(ana, bo) 被使用了兩次,兩個條件都滿足。

這是一個經典的邏輯程式設計陷阱——缺少不等式約束

(d) 修正方案

加入 X ≠ Y 的約束。用自然語言描述:

「X 和 Y 是兄弟姊妹」的條件是:存在某人 Z 同時是 X 的親代和 Y 的親代,且 X 與 Y 不是同一個人

用 Relka 語法:sib(X,Y) :- par(Z,X), par(Z,Y), X \= Y

語言學連結:anc 的遞迴定義是遞迴規則的典範——它對應語言學中的傳遞性閉包(transitive closure),與 Chomsky 層級中 CFG 的遞迴產生規則殊途同歸。而 sib 的 bug 則呼應了語意學中排除自指的問題——就像自然語言中「兄弟」一詞隱含「不是自己」的預設(presupposition),但形式化時若不明示,邏輯系統不會自動補上。

Relka 查詢引擎

輸入 Relka 查詢(如 dad(bo, di)),引擎會顯示推導過程。

出題設計說明:這三題分別對應計算語言學的三個核心典範——stack machine(操作語意學)、quotation / higher-order(lambda 演算的直覺版)、logic programming(Prolog / Horn clauses)。它們以「未知語言」的外衣呈現,讓零程式背景的學生也能從資料歸納規則、預測行為,與 NACLO 計算面向的題型設計哲學完全一致。