Open hia5314 opened 7 years ago
Natural Language Processing 자연어 처리
자연어 처리에서는 자연어를 이해 그리고 내부 구조를 거쳐서 자연어를 생성하는 흐름을 갖게 된다.
자연어를 이해하기 위해서는 형태소분석, 구문분석, 의미분석, 화용분석 단계로 이루어진다.
형태소 분석은 입력된 문자열을 분석하여 형태소라는 최소 의미 단위로 분리한다.
구문분석은 문법 규칙 및 여러 종류의 규칙에 의해 입력 문장을 해석하고 그 구조를 나누게 된다. 문장을 명사, 동사 등으로 트리 구조로 나누는 것이 구문 분석에 속한다.
의미 분석은 문장을 구성하는 단어들의 의미를 파악하고 문장 구성 성분들의 의미적 관계를 논리적으로 밝혀내어 문장의 전체적인 의미를 파악한다. 형태소 분석에서 해석되지 않는 단어의 중의성을 여기서 파악하게 된다.(ex:배(먹는 배, 타는 배, 신체의 배 등등))
화용분석은 문장이 실 세계와 가지는 연관관계를 분석하게 된다. 가령 반어법의 경우에 "정말 넌 빨리도 오는구나"라는 문장에서 내가 정말 빠르다라고 이해하는 것이 아닌 늦었기 때문에 말하는 사실을 파악하게 된다.
이러한 네단계를 거쳐 컴퓨터가 인간의 언어를 이해할 수 있도록 단계를 거치고 이러한 단계를 거친 후에 프로그램 상 어떤 내용을 화자에게 전달할 것인지 내용을 정하게 된다.
이후 전달할 내용의 키워드를 조합한 문장에 말하는 어투를 담아 화자에게 전달하는 것이 NLP의 과정이다.
먼저 자연어란 프로그래밍 언어처럼 인공적으로 만든 언어가 아닌 사람이 일상생활에서 쓰는 자연적으로 만들어진 언어를 의미한다. 컴공쪽에서 언어라고 하면 프로그래밍 언어를 떠올리는 경우가 많아 자연어라고 한다.
일반적으로 NLP(Natural Language Processing, 자연어 처리)는 컴퓨터가 자연어를 받아들여서 이해(NLU)하고 그것을바탕으로 시스템이 자연어를 생성(NLG)를 해서 사용자에게 자연어로 응답하는 구조이다.
자연어를 이해하기 위해서는 어휘분석, 구문분석, 의미분석이 필요하다. 직설적인 표현이면 상관없겠지만, 어느 사람이 부산에 급하게 가야한다고 한다면 일반적인 사람이면 급한 일이 생겼다고 이해할 수 있을 것이다. 하지만 철도 예약 시스템이라면 부산으로 가는 가장 빠른 열차를 찾아주겠지만 그 사람에게 어떤 일이 일어났는지는 이해하지 못할 것이다.
자연어 분석단계는 보통 다음과 같은 순서를 따른다.
어휘분석이란 문장의 어휘구조가 문법에 맞는가를 분석하는 것이다.
의미해석은 문장의 의미에 관한 내부표현을 생성하는 역할을 한다. 나는 자동차를 타고 부산에 갔다. 라고 하면 나라는 주체가 자동차라는 수단을 이용해서 부산이라는 장소로 이동하였다고 컴퓨터가 주체나 수단, 어떠한 행동 등을 했는지 판단하는 것이다.
확장된 지식 해석은 위에서 의미해석한 문장에서 사람들의 기본 베이스가 되는 상식을 첨가하는 것이다. 자동차가 탈 것이라면 기차, 비행기 또한 탈 것이고 이것을 타고 부산을 갔을 수 있다는 판단을 할 수 있다. 그러나 이러한 탈 것이 킥보드나 자전거라면, 그리고 내가 운동을 하지 않는 사람이라면 높은 확률로 이러한 인력을 이용하는 탈 것을 타고 가지 않을 것이라고 판단할 수 있을 것이다. 또한 부산에 살지 않는 내가 부산에 간다라고 하면 어떠한 사정이 있어서 갈 것이라고 컴퓨터가 판단할 수 있다. 이러한 것처럼 의미해석한 내부표현에서 지식베이스로부터 구조를 첨가하여 문장의 의미를 확장(실세계지식을 부가)한다.
이후 이렇게 이해한 내용을 각종 시스템에 전달해서 사용할 수 있을 것이다.
여기까진 자연어를 분석하는 방식을 설명하였다. 이 다음엔 단수문장을 이해하는 방법을 설명하려고 한다.
먼저 단어 이해가 필요하다. 하나의 단어가 여러 의미를 지니고 있을 수 있다. 단어를 저장한 사전과 같은 곳에서 각각의 의미가 문맥에서 어떤 식으로 적용될 수 있는지를 판단하고 결정하여야 한다. 이러한 것을 단어 의미 애매모호를 제거한다고 한다.
그 다음으로 문장의 이해필요한데 문장은 구문분석, 의미 분석, 실용분석 세가지로 나눌 수 있다. 구문분석은 토큰을 트리 구조로 변환하는 과정을말하며 파싱이라고도 한다. 가령 명사 동사 명사구 동사구 등등 문법적으로 토큰을 나누어 문법적인 해석이 맞는지 틀린지를 확인하는 것으로 볼 수 있다. 의미분석은 구문분석 과정에 만들어진 구문에 의미를 부여하는 것이다. 자연어 이해기법 중의 하나인데, 문장의 의미에 근거를 두어 그 문장을 해석하는 방법이다. 실용분석은 어떠한 문장(음성으로 말하는 어문)이 실제로 나타내는 의미를 알기 위해 다시 해석되는 과정을 말한다. 예로 일반적으로 관용적으로 하는 이야기를 재해석해서 이해하는 것을 말한다.
언어를 이해하는 방법으로 키워드 매칭(챗스크립트)를 쓰는데 우리가 관심을가지고 있는 키워드만을, 선택해 사용하고 나머지를 무시하는 방법이다. 구문분석에는 일반적으로 파스 트리 모델을 사용하여 문법관계를 조사 및 분석을 한다. 주어진 입력이 구문명세서에 적합한가를 검사하는 것이며 파스 트리는 유도 트리라고도 부르며, 문법의 기작기호가 어떻게 스트링을 유도하는가를 트리로써 나타낸 것이다. 의미분석 파싱은 문장의 구조를 파악하는 것으로 이해를 시작하는 단계이고, 의미분석에서 문장에 대한 진짜 의미를 분석을 한다.