서울대학교 데이터사이언스대학원 이재윤 교수님의 ‘인공신경망을 통한 자연어처리’ 강의를 정리한 글입니다.
지금까지 단어 표현, 언어 모델, attention, QA, 지식 베이스를 다뤘다. 이 글은 그보다 더 오래된, 그러나 여전히 중요한 주제 — 문장의 구조(syntax)를 분석하는 구문 분석(syntactic parsing) 을 다룬다. 인류는 AI가 나오기 2천 년 전부터 문법을 연구해왔다.
왜 구문이 필요한가
통계나 의미만으로는 문장을 완전히 이해할 수 없다. 고전적 예시를 보자.
“I saw a girl with a telescope.”
이 문장은 두 가지로 해석된다.
- 내가 망원경으로 소녀를 봤다 (with a telescope가 동사 saw를 수식)
- 내가 망원경을 든 소녀를 봤다 (with a telescope가 명사 girl을 수식)
같은 단어 나열인데 구조(어디에 붙느냐) 가 의미를 바꾼다. 이런 모호함을 풀려면 문장의 구조를 명시적으로 분석해야 한다. 구문 분석에는 두 가지 큰 갈래가 있다.
- Constituency parsing(구구조 분석): 단어를 구(phrase) 단위로 묶어 올라가는 phrase structure grammar.
- Dependency parsing(의존 분석): 단어와 단어 사이의 관계(누가 누구를 수식/지배하나)를 본다.
1. Constituency Parsing
언어는 합성적(compositional)이고 재귀적(recursive) 이다. 단어가 모여 구(phrase)가 되고, 구가 모여 더 큰 구가 된다.
- 단어에 품사(part-of-speech, POS) 부여:
the(Det),cat(N),cuddly(Adj)… - 단어가 구를 이룸: “the cuddly cat” =
NP → Det Adj N(명사구), “by the door” =PP → P NP(전치사구) - 구가 재귀적으로 더 큰 구를 이룸: “the cuddly cat by the door” =
NP → NP PP
재귀성은 언어의 본질이다. “[the person standing next to [the man from [the company that purchased [the firm …]]]]”처럼 명사구 안에 명사구가 끝없이 들어갈 수 있다.
파스 트리의 구성 요소
- 내부 노드(구):
S(문장),NP(명사구),VP(동사구),PP(전치사구). - 단어 바로 위 노드(preterminal): 품사 태그.
PN(대명사),D(관사),V(동사),N(명사),P(전치사).
Context-Free Grammar (CFG)
이 구조를 형식화한 것이 문맥 자유 문법(CFG) 이다. 로 정의된다.
- : 비단말(non-terminal) 기호 집합 (
S,NP,VP…) - : 단말(terminal) 기호 집합 (실제 단어)
- :
X → Y₁Y₂...Yₙ형태의 규칙 집합 (예:S → NP VP,NP → D N) - : 시작 기호
규칙(grammar)과 단어-품사 매핑(lexicon, 예: N → girl)을 가지고, 단어열을 트리로 조립한다.
PCFG: 확률을 입히기
한 문장이 여러 트리로 분석될 수 있다(앞의 telescope 예시). 어떤 트리가 옳은지 고르려면 확률이 필요하다. 확률적 CFG(PCFG) 는 각 규칙 에 확률 을 부여한다. 같은 좌변 를 갖는 규칙들의 확률 합은 1이다.
확률은 treebank(트리가 달린 코퍼스)에서 세어서(maximum likelihood) 추정한다. 예를 들어 VP → Vt NP를 99번, 비단말 VP를 1000번 봤다면 그 규칙 확률은 0.099다.
트리 전체의 확률은 그 트리에 쓰인 모든 규칙 확률의 곱이다.
여러 후보 트리 중 이 확률이 가장 높은 트리를 고르면 된다.
추론: 조합 폭발과 동적 계획법
가능한 모든 트리를 일일이 비교할 수는 없다. 트리 개수는 Catalan 수로 폭증한다. 언어 모델에서 그랬듯 동적 계획법(dynamic programming) 을 쓴다. 대표 알고리즘이 CKY(CYK) 로, 문법을 이진 규칙(X → Y₁Y₂, Chomsky Normal Form)으로 바꿔 부분 문제를 합쳐 올라간다.
대표 데이터셋은 Penn Treebank(WSJ 기사 5만 문장에 트리 annotate)다. 보통 4만 학습 / 1700 dev / 2400 test로 나눈다.
평가와 신경망의 등장
constituency parsing은 constituent(구) 단위로 precision/recall/F1을 잰다.
- Recall = (맞춘 구 수) / (정답 트리의 구 수)
- Precision = (맞춘 구 수) / (예측 트리의 구 수)
- Labeled P/R은 비단말 라벨(NP인지 VP인지)까지 맞아야 인정.
성능 역사가 흥미롭다. 표준 PCFG는 약 72~74 F1, lexicalized 변형이 88 F1이었는데, 신경망이 판도를 바꿨다. 특히 Grammar as a Foreign Language(Vinyals et al., 2015)는 트리를 괄호 문자열 (S (NP (PN My)...))로 선형화(linearize) 해, seq2seq로 “My dog ate a sausage → 괄호 트리”를 번역하듯 생성했다. 지금은 XLNet/BERT 기반 모델이 96 F1을 넘는다.
2. Dependency Parsing
의존 분석은 구가 아니라 단어 간 관계를 본다. 각 단어가 어떤 단어를 수식하거나 그 단어의 논항(argument)인지를 화살표로 잇는다. 화살표는 head(지배소) → dependent(의존소) 방향이고, 관계에는 타입이 붙는다.
nsubj(주어),dobj(직접목적어),nmod(명사 수식),det(관사),case(전치사) 등 (Universal Dependencies 표준).- 예: “I prefer the morning flight”에서
prefer →(nsubj) I,prefer →(dobj) flight,flight →(det) the.
의존 구조도 PP attachment 모호성을 드러낸다. “Scientists count whales from space”에서 “from space”가 count에 붙으면 우주에서 센다(맞음), whales에 붙으면 우주에서 온 고래(틀림)다.
의존 트리의 조건
의존 구조는 보통 다음을 만족하는 트리다.
- root는 하나뿐이다.
- root를 제외한 모든 단어는 head가 정확히 하나다.
- 사이클이 없다 (A→B, B→C, C→A 금지).
- 추가로 projectivity(투사성): 단어를 순서대로 늘어놓고 호(arc)를 위에 그렸을 때 교차하는 호가 없다. 영어는 99.9%가 projective지만, 어순이 자유로운 체코어는 76.9%에 불과하다. (이 강의는 projective parsing에 집중.)
의존 구조는 어순이 자유로운 언어에 더 적합하고, predicate-argument 구조(누가 무엇을 했나)를 바로 드러내 응용에 유용하다.
Transition-based Parsing (Arc-standard)
가장 직관적인 방법은 transition 기반(shift-reduce) parsing이다. 상태(configuration)는 스택 , 버퍼 , 호 집합 로 이뤄진다 .
- 초기: , ,
- 종료: 스택에 ROOT만 남고 버퍼가 비면 끝.
매 단계 세 가지 행동 중 하나를 고른다.
- SHIFT: 버퍼의 맨 앞 단어를 스택으로 옮긴다.
- LEFT-ARC(r): 스택 top 두 단어 사이에 (위→아래) 호를 긋고 아래 단어를 제거.
- RIGHT-ARC(r): 반대 방향 호를 긋고 제거.
길이 문장은 항상 번의 transition(SHIFT 번 + ARC 번)으로 끝난다. 핵심은 매 상태에서 어떤 행동을 할지 분류기로 결정하는 것이다. 즉 parsing이 -way 분류 문제(은 의존 라벨)가 된다.
Chen & Manning (2014) 은 이 분류기를 신경망으로 만들었다. 스택·버퍼 맨 위 단어들의 embedding을 lookup·concat해 입력 로 쓰고, 한 층의 신경망으로 다음 행동을 예측한다.
이전의 수작업 feature(p-word, c-pos 등 희소한 조합)를 dense embedding으로 대체해 성능과 속도를 모두 끌어올렸다.
Graph-based Parsing
또 다른 갈래는 graph 기반이다. 모든 단어 쌍에 점수를 매겨 최대 가중 spanning tree를 찾는다(트리 조건을 만족하도록). 사이클 제거는 Chu-Liu-Edmonds, projective 제약은 Eisner의 DP(의존 버전 CKY)로 처리한다. Dozat & Manning (2017) 의 신경망 graph parser가 대표적으로, UAS 95.74를 기록했다.
평가: UAS / LAS
- UAS(Unlabeled Attachment Score): head를 맞춘 단어 비율.
- LAS(Labeled Attachment Score): head 와 라벨을 모두 맞춘 비율.
구문 분석은 어디에 쓰나
분석한 구조를 신경망에 주입해 성능을 높인다. Tree-LSTM(Tai et al., 2015)은 constituency 트리를 따라 LSTM을 타고, LISA(Strubell et al., 2018)는 dependency를 attention에 주입한다. 최근에는 parse tree로 이미지 생성의 구성성(compositionality) 을 돕는다 — “a red car and a white sheep”에서 색을 올바른 사물에 묶어주는 식이다.
LLM이 완벽히 parsing할 수 있느냐고? 아직은 아니다. 다만 LLM의 지식을 작은 모델로 distillation하는 접근이 유망하다(Zhao et al., ACL 2024).
정리
- 구문 분석은 문장 구조를 분석해 “I saw a girl with a telescope” 같은 구조적 모호성을 푼다. constituency(구 단위)와 dependency(단어 관계) 두 갈래가 있다.
- Constituency는 CFG로 구를 재귀적으로 조립하고, PCFG로 규칙에 확률을 입혀(treebank에서 count) 가장 그럴듯한 트리를 고른다. 추론은 CKY 동적 계획법.
- Dependency는 head→dependent 화살표로 단어 관계를 잇는다(트리·acyclic·projective 조건). Transition-based(shift-reduce, 분류 문제)와 graph-based(최대 spanning tree) 두 알고리즘이 있고, 평가는 UAS/LAS.
- 두 분석 모두 신경망(seq2seq linearization, Chen-Manning, Dozat-Manning)으로 90% 중반 정확도에 도달했고, Tree-LSTM·LISA·이미지 생성 등에 활용된다.