
자연어 처리 (NLP) 입문 ― 통사론·의미론·화용론부터 확장 전이 네트워크, 프레임과 의미 네트워크의 통합까지
요약
자연어 처리(NLP)의 핵심인 언어 이해(NLU)를 위해 통사론, 의미론, 화용론의 3가지 층위를 정리합니다. 정규 표현식부터 확장 전이 네트워크까지 구문 분석의 형식 이론을 비교하고, Swift를 이용해 재귀 하강 파서를 프레임 시스템 및 의미 네트워크에 통합하는 구현 방법을 다룹니다.
핵심 포인트
- 언어 처리(Processing)와 언어 이해(Understanding)의 차이점 규명
- 통사론, 의미론, 화용론을 통한 언어 이해의 3단계 층위 설명
- 정규 표현식, 문맥 자유 문법, 확장 전이 네트워크 등 구문 분석 이론 비교
- 어휘적, 구문적, 상호 참조적 모호성 문제와 해결 필요성 제시
- Swift를 활용한 재귀 하강 파서와 지식 표현 구조의 통합 구현
통사론·의미론·화용론이라는 언어 이해의 3가지 층위를 정리하고, 정규 표현식·문맥 자유 문법·확장 전이 네트워크 (ATN)에 의한 구문 분석의 형식 이론을 비교한 후, 의미 문법을 통한 데이터베이스 자연어 인터페이스의 개념과 재귀 하강 파서 (Recursive Descent Parser)를 지난번의 프레임 시스템 및 의미 네트워크에 통합하는 구현을 Swift로 확인합니다.
- 서론
- 언어 처리와 언어 이해라는 문제
- 통사론·의미론·화용론 ― 의미를 포착하는 3가지 층위
- 구문 분석의 형식 이론: 정규 표현식·문맥 자유 문법·확장 전이 네트워크
- 의미 문법과 자연어 인터페이스
- 재귀 하강 파서를 프레임 시스템에 통합하기
- 의미 네트워크로의 자연어 인터페이스
- 요약
- 주석
- 참고 자료
지난 기사에서는 의미 네트워크·프레임·의미 프리미티브와 같은 지식 표현 기법을 확인했습니다. 하지만 이러한 구조에 지식을 넣거나, 지식으로부터 자연스러운 문장을 만들기 위해서는 인간이 사용하는 자연어와 컴퓨터 내부의 구조를 연결하는 가교 역할이 필요합니다. 이를 다루는 것이 자연어 처리 (Natural Language Processing, NLP), 특히 자연어 이해 (Natural Language Understanding, NLU)입니다.
이 기사에서는 기호주의 AI 시대에 정리된 언어 이해의 기본 개념 (통사론·의미론·화용론)과 구문 분석을 위한 형식 이론 (정규 표현식·문맥 자유 문법·확장 전이 네트워크)을 확인합니다. 그 후, 의미 문법을 통한 데이터베이스에 대한 자연어 인터페이스라는 응용 사례를 살펴보고, 마지막으로 재귀 하강 파서를 지난번의 프레임 시스템 및 의미 네트워크에 통합하는 구현을 Swift로 확인합니다.
「언어 처리」와 「언어 이해」는 동일하지 않습니다. 문자열로서의 입력을 규칙에 따라 조작하는 것뿐이라면 「처리」이지만, 그것이 가리키는 내용을 내부 표현으로 구축하여 추론이나 응답에 사용할 수 있어야 비로소 「이해」라고 부를 수 있습니다.
이 차이를 상징하는 것이 Joseph Weizenbaum의 ELIZA (1966년)와 Terry Winograd의 SHRDLU (1968~1972년)입니다 (주1·주2).
- ELIZA는 키워드에 반응하여 정형문을 구성하는 패턴 매칭의 집합체로, 내부에 의미 표현을 가지고 있지 않습니다. 그럼에도 인간처럼 보였던 것은 응답 템플릿이 교묘했기 때문입니다.
- SHRDLU는 「쌓기 놀이 세계 (blocks world)」라는 한정된 영역에 대해 구문 분석·의미 해석·세계 모델 (현재 어떤 블록이 어디에 있는지)을 통합하고 있었습니다. "당신이 가지고 있는 것보다 높은 블록을 찾아 상자에 넣어"와 같은 지시를 실행할 수 있었으며, "어떤 블록을 가리키는지 모르겠습니다"와 같이 이해할 수 없는 경우에는 이를 표명할 수 있었습니다.
두 가지를 가르는 것은 입력을 내부의 구조화된 표현 (지난 기사에서 말한 프레임이나 의미 네트워크)으로 변환하고, 그것을 바탕으로 추론할 수 있는지 여부입니다. 이 구조화 프로세스에서 반드시 직면하게 되는 것이 모호성 (Ambiguity) 입니다.
- 어휘적 모호성: 「bank」는 「은행」도 될 수 있고 「둑」도 될 수 있음
- 구문적 모호성: "I saw the man with the telescope"는 「망원경을 가진 남자를 보았다」로도, 「망원경으로 남자를 보았다」로도 해석될 수 있음 (전치사구가 어디에 걸리는지가 일정하게 결정되지 않음)
- 상호 참조적 모호성: 「그것」, 「그」가 무엇을 가리키는지 (SHRDLU는 이를 직전 대화의 기억으로 해결했습니다)
이후의 절에서는 이 모호성을 줄이면서 문장을 구조화하기 위한 개념과 형식 이론을 순서대로 살펴보겠습니다.
언어 이해는 전통적으로 3가지 층위로 나누어 생각됩니다.
- 통사론 (Syntax) (다루는 대상: 어순·품사·문장 구조 규칙. 의미와는 독립적으로 "문법적으로 올바른가"를 판정함): Noam Chomsky의 "Colorless green ideas sleep furiously" (무색의 초록색 관념이 맹렬하게 잠을 잔다)는 문법적으로는 완전히 올바르지만, 의미적으로는 앞뒤가 맞지 않는 예로 실패함 (주3)
- 의미론 (Semantics) (다루는 대상: 단어나 문장이 글자 그대로 무엇을 나타내는가, 리터럴한 의미의 합성): "그는 은행의 둑에 앉았다"는 문법적으로 올바르고 단어의 의미도 존재하지만, "bank"의 어의 선택을 그르치면 의미가 무너짐
- 화용론 (Pragmatics) (다루는 대상: 발화가 이루어진 문맥·상황·화자의 의도): "소금 좀 집어 주시겠어요?"는 글자 그대로는 상대방의 능력을 묻는 의문문이지만, 실제로는 "집어 주었으면 좋겠다"라는 의뢰 (간접 화행)로서 기능함
통사론 (Syntax)은 '형태'를, 의미론 (Semantics)은 '문자 그대로의 의미'를, 화용론 (Pragmatics)은 '실제로 무엇을 하기 위한 발화인가'를 다룬다고 정리하면 이해하기 쉽습니다. SHRDLU가 '쌓기 놀이 블록의 세계'라는 제한된 영역에서 잘 작동했던 이유는, 이 세 가지 층위 모두를 작고 닫힌 영역 안에서 처리할 수 있었기 때문입니다. 반대로 말하면, 범용적인 자연어 이해가 어려운 이유는 화용론적인 문맥(세계 지식·대화 이력·화자의 의도)을 무한에 가까운 범위에서 다루어야 하기 때문입니다.
문장의 구조(통사론)를 어디까지 기계적으로 해석할 수 있는지는, **언어의 파싱 (Parsing, 구문 분석)**을 형식 언어 이론 (Formal Language Theory)의 틀로 파악하면 전망이 밝아집니다. Chomsky는 문법을 생성 능력에 따라 4단계의 계층(Chomsky 계층)으로 정리했습니다 (주4).
Type 3: 정규 문법 (Regular Grammar) / 정규 언어 (Regular Language) / 대응하는 오토마톤은 유한 상태 오토마톤 (Finite State Automaton) -
Type 2: 문맥 자유 문법 (Context-Free Grammar) / 문맥 자유 언어 (Context-Free Language) / 대응하는 오토마톤은 푸시다운 오토마톤 (Pushdown Automaton) -
Type 1: 문맥 의존 문법 (Context-Sensitive Grammar) / 문맥 의존 언어 (Context-Sensitive Language) / 대응하는 오토마톤은 선형 유계 오토마톤 (Linear Bounded Automaton) -
Type 0: 일반 문법 / 구구조 문법 (Unrestricted / Phrase Structure Grammar) / 일반 언어 (귀납적 가산 언어) / 대응하는 오토마톤은 튜링 머신 (Turing Machine)
아래 단계일수록 표현력이 높으며, 상위 언어를 모두 포함합니다 (정규 언어 ⊂ 문맥 자유 언어 ⊂ 문맥 의존 언어 ⊂ 일반 언어). 자연어 구문 분석에서 실제로 자주 사용되는 것은 정규 표현식, CFG, ATN 세 가지입니다. 각각이 이 계층의 어디에 위치하는지 살펴보겠습니다.
정규 표현식은 정규 문법의 실용적인 표기법으로, 유한 상태 오토마톤과 동등한 표현력만을 가집니다. 고정적인 패턴 매칭에는 적합하지만, 중첩 구조 (재귀적 삽입)를 다룰 수 없다는 원리적인 한계가 있습니다.
let pattern = #"^the (\w+) (chased|hit) the (\w+)$"#
let regex = try! NSRegularExpression(pattern: pattern)
func matches(_ text: String) -> Bool {
...
"the cat the dog chased escaped"
(개가 쫓아간 고양이가 도망갔다에 해당하는 중앙 삽입문)처럼, 명사구 안에 다른 문장이 삽입되는 구조는 유한 상태 오토마톤으로는 원리적으로 다룰 수 없습니다. 이것이 정규 언어의 표현력의 한계이며, 재귀를 다루기 위해서는 문맥 자유 문법 이상의 형식이 필요합니다.
CFG는 재작성 규칙 (생성 규칙)의 집합으로서 문법을 정의하며, 규칙의 우변에 자기 자신의 비종단 기호 (Non-terminal symbol)를 포함할 수 있기 때문에, 재귀적인 구조를 선언적으로 표현할 수 있습니다. CFG가 생성하는 문맥 자유 언어는 스택을 하나 가진 푸시다운 오토마톤이 수용할 수 있는 언어 클래스와 정확히 일치합니다.
S -> NP VP
NP -> Det N | Det N RelClause
VP -> V NP
...
NP가 RelClause를 포함하고, RelClause가 다시 NP를 포함할 수 있기 때문에, 앞서 언급한 중앙 삽입문과 같은 구조도 자연스럽게 생성 및 분석할 수 있습니다.
CFG와 동일한 표현력 (문맥 자유 언어)을 상태와 화살표로 이루어진 전이도로 다시 쓴 것이 **재귀 전이 네트워크 (Recursive Transition Network, RTN)**입니다 (주5). RTN은 유한 상태 오토마톤의 화살표를 확장하여, 화살표로부터 다른 네트워크를 호출하는 것을 허용합니다. 이 '호출'이 푸시다운 오토마톤의 스택에 쌓고 내리는 동작에 대응하며, CFG의 재귀적인 생성 규칙을 네트워크 도표로서 절차적으로 다시 표현한 것이라고 이해할 수 있습니다. CFG가 '무엇이 옳은 문장인가'를 선언적으로 정의하는 반면, RTN은 '어떻게 분석을 진행할 것인가'라는 절차를 상태 전이로서 보여준다는 점이 다릅니다.
ATN은 William Woods가 1970년에 제안한 형식으로(주6), RTN을 다음과 같은 점에서 더욱 **확장(augment)**하고 있습니다.
- 화살표에 임의의 조건(테스트)과 동작(액션)을 부여할 수 있음
- **레지스터 (Register)**라고 불리는 작업 영역에 값을 쓰면서 해석을 진행할 수 있음
이를 통해 주어와 동사의 수 일치 체크, 수동태에서 능동태로의 변환, 의미 구조의 조립을 해석과 동시에 절차적으로 수행할 수 있습니다. 문맥 자유 문법(Context-Free Grammar)이나 문맥 의존 문법(Context-Sensitive Grammar)처럼 재작성 규칙(rewriting rules)을 나열하는 것이 아니라, 화살표에 임의의 처리를 매립할 수 있기 때문에 ATN의 표현력은 이론상 튜링 머신(Turing Machine)과 동등(Type 0 상당)해질 수 있습니다. 강력한 반면, 문법 자체가 일반적인 프로그램에 가까워져 해석의 가독성(정지성이나 모호성 파악)이 나빠진다는 트레이드오프(trade-off)가 있습니다.
이러한 설계 덕분에 구문 분석의 결과로서 처음부터 의미적인 구조(프레임에 가까운 것)를 조립할 수 있으며, 실제로 자연어 데이터베이스 인터페이스 구현에 사용되었습니다(4절에서 다룹니다).
지금까지의 형식을 Chomsky 계층에 따라 정리하면 다음과 같습니다.
- 정규 표현식 (Regular Expression, 정규 문법) (대응하는 언어 클래스: 정규 언어 / Type 3): 빠르지만 재귀적인 중첩 구조를 다룰 수 없음
- CFG (대응하는 언어 클래스: 문맥 자유 언어 / Type 2): 선언적이고 이해하기 쉽지만, 의미 구축이나 문맥 의존 처리와는 별개로 분리됨
- RTN (대응하는 언어 클래스: 문맥 자유 언어 / Type 2): CFG와 동일한 표현력을 호출 가능한 전이 네트워크(transition network)로서 절차적으로 표현함
- ATN (대응하는 언어 클래스: 이론상 Type 0 상당): 레지스터와 액션을 통해 문맥 의존적인 처리와 의미 구축을 해석과 동시에 수행할 수 있음. 문법 자체가 복잡해짐
CFG나 ATN은 우선 통사적인 구조를 해석한 뒤, 그 다음에 의미를 할당하는 2단계 설계를 전제로 하는 경향이 있습니다. 하지만 데이터베이스 관리 시스템(Database Management System, DBMS)에 대한 질의와 같은 특정하고 좁은 영역에 한해서는, 통사적으로는 올바르더라도 해당 영역에서는 의미를 갖지 않는 해석 결과를 대량으로 생성하게 되어 비효율적입니다.
이 문제에 대한 해결책으로 고안된 것이 **의미 문법 (Semantic Grammar)**입니다. NP (명사구)나 VP (동사구)와 같은 범용적인 통사 카테고리 대신, 해당 영역에 특화된 카테고리를 문법 규칙에 직접 매립합니다.
<SHIP-QUERY> -> "list" <SHIP-ATTRIBUTE> "of" <SHIP-CLASS>
<SHIP-ATTRIBUTE> -> "speed" | "draft" | "displacement"
<SHIP-CLASS> -> "destroyers" | "carriers" | "the Iowa class"
이렇게 작성하면 문법 자체가 '해당 영역에서 의미를 갖는 표현'만을 수용합니다. 통사적인 모호성은 애초에 대부분 발생하지 않으며, 해석 결과가 곧바로 의미의 확정, 즉 자연문에서 DBMS의 **질의 언어 (Query Language, QL)**로의 변환이 됩니다.
이 수법을 채택한 대표적인 사례가 1970년대에 만들어진 데이터베이스 자연어 인터페이스 (Natural Language Interface, NLI)입니다.
- LUNAR (Woods, 1972년, BBN사): 아폴로 계획에서 가져온 달 암석의 화학 분석 데이터베이스를 지질학자가 자연어로 질의할 수 있도록 만든 시스템. ATN 기반의 구문 분석기와 절차적 의미론 (procedural semantics)을 결합하였으며, 1971년 데모에서는 훈련받지 않은 사용자의 질문 약 90%에 올바르게 답변했습니다(주7).
- LIFER/LADDER (Hendrix, 1978년): 미 해군의 함선 데이터베이스를 위한 자연어 인터페이스. 의미 문법을 사용하여 구문 분석과 의미 해석을 일체화한 3계층 아키텍처를 채택했습니다(주8).
의미 문법(Semantic Grammar)은 문장 단위의 해석에는 유효하지만, 실제 상호작용은 여러 질문에 걸쳐 이루어집니다. 예를 들어, "아폴로 12호 암석의 규소 함유량은?"이라는 질문에 이어 "아폴로 11호는?"이라고만 묻는 경우, 후자는 "아폴로 11호의 암석의 규소 함유량은?"을 생략한 **생략문(elliptical query)**입니다. 이러한 생략이나 "그것", "그 암석"과 같은 지칭 표현(anaphora)을 해결하기 위해, 당시의 NLI 시스템은 **히스토리 리스트(history list, 질문 이력표)**라고 불리는 기구를 갖추고 있었습니다. 이는 이전 질의에서 언급된 실체(대상·속성 등)를 기록해 두었다가, 새로운 질의가 불완전할 경우 직전의 문맥으로부터 누락된 요소를 보충하는 메커니즘입니다. 이는 2절에서 다룬 화용론(Pragmatics, 문맥에 의존하는 의미)을 시스템으로서 구체적으로 구현한 한 사례라고 할 수 있습니다.
이러한 시스템들의 공통점은, 범용적인 문법이 아니라 대상 영역에 특화된 문법을 준비함으로써 효율적이고 견고한 자연어 인터페이스를 실현했다는 발상입니다. 트레이드오프(Trade-off)로서, 영역이 바뀌면 문법을 다시 만들어야 하므로 범용성과 이식성이 부족하다는 약점이 있습니다.
마지막으로, CFG의 규칙을 그대로 프로그램 구조로 구현하는 **재귀 하강 파서(Recursive Descent Parser)**를 사용하여, 파서의 출력을 지난 기사의 프레임 시스템에 직접 흘려보내는 구현을 확인하겠습니다.
재귀 하강 파서는 CFG의 비단말 기호(non-terminal symbol) 하나하나에 대응하는 함수를 준비하고, 그 함수가 우변의 기호에 대응하는 다른 함수를 호출하는 단순한 설계입니다. 문법의 재귀 구조가 그대로 함수 호출의 재귀가 되기 때문에, 정규 표현식으로는 다룰 수 없었던 중첩 구조도 자연스럽게 처리할 수 있습니다.
여기서는 파서가 해석 트리(parse tree)를 구성하는 대신, 프레임의 슬롯(slot)을 직접 채워 나가는 설계로 하겠습니다. 이는 의미 문법이나 ATN의 레지스터와 같은 발상으로, "해석 = 구조의 구축"을 일체화한 것입니다.
final class ActionFrame {
var agent: String?
var action: String?
...
let parser = RecursiveDescentParser("the boy hit the ball with the bat")
let frame = parser.parseSentence()
print(frame.summary) // boy가 ball을 hit(bat을 사용하여)
parseSentence는 S -> NP V NP (PP)?라는 규칙 그 자체를 함수 호출의 나열로 표현하고 있으며, parseNounPhrase는 S로부터도 PP의 내부로부터도 공통적으로 호출됩니다. 이것이 CFG의 비단말 기호의 재사용과 재귀 하강 파서의 함수 호출이 1대 1로 대응한다는 의미입니다.
중요한 점은, 파서가 반환하는 것이 해석 트리가 아니라, ActionFrame이라는 지난 기사와 같은 발상의 프레임 구조 그 자체라는 점입니다. 이는 ATN의 레지스터가 해석과 동시에 의미 구조를 구축하던 것과 같은 생각이며, 의미 문법이 구문 분석과 의미 해석을 일체화했던 것과도 같은 발상입니다. 구문 분석(이 파서)과 지식 표현(프레임)이라는 두 기술은 이렇게 하나로 이어져 있습니다.
이 파서는 NP 안에 PP를 재귀적으로 매립하는 처리까지는 대응하지 않습니다. 실제 운용되는 ATN에서는 바로 이 재귀 호출(서브 네트워크로의 PUSH)을 사용하여 임의의 깊이를 가진 중첩 구조를 다룰 수 있도록 합니다.
전절에서는 프레임에 통합했지만, 지난 기사에서 다룬 또 다른 지식 표현인 **의미 네트워크(Semantic Network)**에도 동일한 방식으로 NLI를 결합할 수 있습니다. 여기서는 4절의 의미 문법과 5절의 재귀 하강 파서를 조합하여, 영어 질문문을 그대로 SemanticNetwork.query 호출로 변환합니다.
지난 기사의 Relation과 SemanticNetwork를 그대로 재게시합니다.
enum Relation: String {
case isA = "is-a"
case canDo = "can"
...
질문문 측은 범용적인 NP/VP가 아니라, 이 의미 네트워크 전용 카테고리만을 수용하는 의미 문법으로서 설계합니다.
<QUERY> -> "what" "can" <CONCEPT> "do" ; canDo를 묻는다
| "what" "does" <CONCEPT> "have" ; hasProperty를 묻는다
<CONCEPT> -> 임의의 식별자 (네트워크 상의 노드 이름)
이 문법을 재귀 하강 파서 (Recursive Descent Parser)로 구현하고, 해석 결과를 그대로 SemanticQuery (노드 이름과 관계의 쌍)라는 프레임 (Frame)적인 구조로 변환합니다.
struct SemanticQuery {
let concept: String
let relation: Relation
...
마지막으로, 파싱 결과를 의미 네트워크 (Semantic Network)에 대한 질의로서 실행하는 부분을 연결합니다.
extension SemanticNetwork {
func answer(_ question: String) -> String {
guard let q = SemanticNetworkParser(question).parseQuery() else {
...
지난 기사에서 구축한 net (Canary · Penguin이 Bird의 is-a 관계이고, Bird가 canDo: Fly를 가지며, Penguin만이 canDo: Swim을 가지는 네트워크)에 대해, 그대로 질문문을 던져 보겠습니다.
net.answer("what can Penguin do") // "Penguin can Swim" ―― Penguin 자신의 값이 우선됨
net.answer("what can Canary do") // "Canary can Fly" ―― Bird로부터 is-a로 상속받은 값
"what can Canary do"라는 질문에는 Canary 자신에게 canDo 값이 없기 때문에, query가 is-a 상속 체인을 거슬러 올라가 Bird의 Fly를 반환합니다. 즉, 의미 문법과 파서가 담당하는 것은 통사 분석(Syntactic Analysis)뿐이며, "기본 추론과 예외"라는 의미 네트워크 자체의 추론 규칙에는 일절 손을 대지 않았습니다. 자연어 인터페이스는 어디까지나 기존 지식 표현의 "창구"이며, 추론의 실체는 지난 기사에서 만든 네트워크 구조 측에 있다는 역할 분담이 명확해집니다.
이 설계는 4절의 LUNAR · LIFER/LADDER와 완전히 동일한 구조입니다. 의미 문법이 "해당 영역에서 의미를 갖는 표현"만을 수용하고, 파서의 출력이 그대로 백엔드(데이터베이스의 조회 언어, 혹은 여기서는 의미 네트워크의 query 호출)로 전달되는 하나의 파이프라인이 됩니다.
통사론 (Syntax) (역할: 문장의 구조 규칙을 다룸): 문법적으로 올바르더라도 의미의 타당성은 보장하지 못하는 것이 과제 -
의미론 (Semantics) (역할: 단어·문장의 문자 그대로의 의미를 합성함): 문맥 의존적인 의미 변화(어휘 선택 등)를 단독으로는 다룰 수 없는 것이 과제 -
화용론 (Pragmatics) (역할: 발화의 문맥·화자의 의도를 고려함): 형식화 및 자동 처리가 어려운 것이 과제 -
정규 표현식 (Regular Expression) (역할: 패턴 매칭을 통한 분석): 재귀적인 중첩 구조를 다룰 수 없는 것이 과제 -
문맥 자유 문법 (CFG) (역할: 재귀적인 구조를 선언적으로 정의함): 문맥 의존 처리나 의미 구축과는 별개로 취급되기 쉬운 것이 과제 -
확장 전이 네트워크 (ATN) (역할: 레지스터와 액션으로 절차적으로 분석하면서 의미 구조도 구축함): 문법 자체가 프로그램에 가까워져 복잡해지는 것이 과제 -
의미 문법 (Semantic Grammar) (역할: 영역 특화된 어휘로 구문 분석과 의미 해석을 일체화함): 영역마다 문법을 새로 만들어야 하므로 이식성이 낮은 것이 과제 -
프레임/의미 네트워크로의 NLI (역할: 재귀 하강 파서의 출력을 기존의 지식 표현에 그대로 전달함): 어디까지나 "창구"일 뿐이며, 추론 규칙 자체는 지식 표현 측에 있다는 것이 과제 (라기보다 역할 분담의 전제)
정규 표현식 (Regular Expression)・CFG・ATN는 결국 「입력의 구조를 어떻게 표현하고, 어떻게 구축할 것인가」라는 지식 표현 (Knowledge Representation) 문제의 일종입니다. 구현 예시에서 보았듯이, 재귀 하강 파서 (Recursive Descent Parser)가 프레임 (Frame)이나 의미 네트워크 (Semantic Network)의 구조를 직접 채워 나가는 설계는, 구문 분석 (Parsing)과 지식 표현이라는 두 가지 기술을 가교하는 전형적인 사례라고 할 수 있습니다. 특히 6절의 의미 네트워크로의 NLI에서는, 파서가 수행하는 것은 통사 분석 (Syntactic Analysis)뿐이며, 「디폴트 추론과 예외」라는 추론 그 자체는 지난 기사에서 만든 SemanticNetwork.query 측이 담당하고 있다는 역할 분담이 명확하게 보입니다.
덧붙여, 여기서 다룬 것은 모두 1970년대의 기호주의적 (Symbolic, Rule-based) 접근 방식입니다. 현재 주류인 통계적·뉴럴 NLP (단어 임베딩 (Word Embedding)이나 Transformer 등)는 문법 규칙을 수동으로 작성하는 대신 대량의 텍스트로부터 패턴을 학습한다는, 완전히 다른 발상에 서 있습니다. 이 대비는 다른 기사에서 다시 다루겠습니다.
-
Joseph Weizenbaum, ELIZA (1966년). 키워드에 대한 패턴 매칭 (Pattern Matching)과 정형 응답의 조합으로, 내부에 의미 표현을 갖지 않음.
-
Terry Winograd, SHRDLU (1968~1972년). 「쌓기 놀이 블록의 세계」라는 제한된 영역에서 통사론·의미론·화용론 (대화의 기억을 통한 상호 참조 해결)을 통합한 자연어 이해 (NLU) 시스템.
-
Noam Chomsky, "Syntactic Structures" (1957년). "Colorless green ideas sleep furiously"는 문법적으로는 옳지만 의미적으로는 앞뒤가 맞지 않는다는 예로, 통사론과 의미론의 독립성을 보여줌.
-
Noam Chomsky, "Three Models for the Description of Language" (1956년). 정규 문법 (Regular Grammar)・문맥 자유 문법 (Context-Free Grammar)・문맥 의존 문법 (Context-Sensitive Grammar)・일반 문법 (General Grammar, 구구조 문법)의 4단계로 이루어진 Chomsky 계층을 제시함.
-
재귀 전이 네트워크 (Recursive Transition Network, RTN). 문맥 자유 문법과 동일한 표현력을, 호출 가능한 유한 상태 네트워크 (Finite State Network)로서 표현하는 형식.
-
William A. Woods, "Transition Network Grammars for Natural Language Analysis" (1970년). RTN에 레지스터 (Register)와 액션 (Action)을 추가한 확장 전이 네트워크 (Augmented Transition Network, ATN)를 제안.
-
Woods et al., LUNAR 시스템 (1972년, BBN사). ATN 기반의 구문 분석과 절차적 의미론 (Procedural Semantics)을 이용한, 달 암석 데이터베이스에 대한 자연어 인터페이스. 1971년 데모에서 미훈련 사용자의 질문 약 90%에 정답을 제시.
-
Gary G. Hendrix, LIFER/LADDER (1978년). 의미 문법 (Semantic Grammar)을 이용한 미 해군 함선 데이터베이스에 대한 자연어 인터페이스.
-
SHRDLU - Wikipedia
-
Chomsky hierarchy - Wikipedia
-
Recursive transition network - Wikipedia
-
Augmented transition network - Wikipedia
-
Transition Network Grammars for Natural Language Analysis - William A. Woods (PDF)
-
LIFER/LADDER - Wikipedia
-
LUNAR (QA) System - GM-RKB
-
Recursive descent parser - Wikipedia
-
ELIZA - Wikipedia
이 기사의 바탕이 된 상세 버전 및 관련 기사는 Bitz Notebook에 정리되어 있습니다.
원문 (Bitz Notebook): 자연어 처리 (NLP) 입문 ― 통사론·의미론·화용론부터 확장 전이 네트워크, 프레임과 의미 네트워크의 통합까지
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기