커뮤니케이션과 AI #2 사람의 말을 이해하는 페이지(PAIGE)

AI에 대한 R&D를 선도하고 있는 엔씨소프트.

엔씨소프트는 AI센터와 NLP(자연어 처리)센터를 주축으로 AI 연구개발을 진행하고 있습니다. 그 중 NLP센터 산하 언어(Language)AI랩과 지식(Knowledge)AI랩의 전문 연구진들은 각각 자연어 처리(NLP) 기술과 지식 추론 기술을 활발히 연구하고 있습니다.

‘커뮤니케이션과 AI’ 두 번째 편에서는 NLP센터의 언어(Language)AI랩에서 연구하고 있는 자연어 이해(NLU) 기반 기술 및 이를 야구 정보 서비스 ‘페이지(PAIGE)’에 적용한 사례를 소개하겠습니다.


페이지는 NLP센터가 커뮤니케이션 AI를 연구하면서 내놓은 첫 번째 서비스입니다. 이는 내가 관심 있을법한 야구 선수나 구단 정보를 친한 친구가 알려주는 서비스라고 할 수 있습니다.

만약, 모르는 게 있다면, 페이지에 자세히 물어보고 답을 얻을 수 있습니다. 서로 퀴즈를 내고, 경기 결과에 대해 예측도 하면서 야구를 즐길 수도 있죠. 이 모든 과정을 AI가 담당해 ▲가치 있는 정보를 ▲가장 효과적인 사람의 언어로 ▲재미있게 전달하자는 것이 커뮤니케이션 AI의 목표입니다.

페이지 앱 화면의 왼쪽 위에는 야구공 모양의 ‘보라색 동그라미 버튼’이 있는데요. 버튼을 누르면 AI가 사람의 질문을 알아듣고 대답하는 Q&A 기능을 이용할 수 있습니다. 이를 통해 다양한 야구 관련 정보를 직접 물어볼 수 있죠. 가령, 야구의 경기, 팀, 선수, 일정, 결과 등에 대해 물어보면, 질문에 대한 답과 함께 연관된 다른 정보들을 제공받을 수 있습니다.

어떻게 하면 AI가 사용자의 질문을 잘 알아듣고, 정확하면서도 풍성한 내용을 전해줄 수 있을까요? 잘 대답하는 영역에 대해서는 다음 글에서 설명하기로 하고요. 이번 글에서는 커뮤니케이션 AI 기술의 가장 앞 단이라고 할 수 있는 ‘사람의 말 잘 이해하기’ 즉, ‘자연어 이해(NLU) 기술’을 설명하겠습니다.

 

# 자연어 이해란?

최근 국내외 많은 기업에서 AI 스피커를 출시하면서 음성 인식 기술의 인지도가 많이 높아졌습니다. 이제 일반 사람들도 AI 하면 쉽게 음성 인식 기술을 떠올리곤 합니다. 하지만 ‘자연어 이해’는 여전히 생소한 분야입니다. 어떤 차이가 있을까요. 자연어 이해 기술을 좀 더 쉽게 설명하기 위해 ▲이미지 인식 ▲음성 인식 ▲자연어 이해의 과정을 보여주는 그림을 준비했습니다.

위의 그림은 앞서 언급한 3가지 영역에서 AI가 대상을 인식하는 과정을 담고 있습니다. 이미지 인식 기술은 실제 새의 종류와 모습이 다르더라도 새 이미지를 접하면 모두 ‘새’라는 것을 인식합니다. 음성인식 기술은 화자가 여자든 남자든 관계없이 “안녕하세요”라고 말하여 컴퓨터에 음성 신호로 전달된 것을 “안녕하세요”라는 말로 인식합니다. 한편, 자연어 이해 기술은 컴퓨터로 입력된 “안녕하세요?”, “안녕”, “오랜만이여”, “하이~!” 등 각각 다른 표현의 문장들에 대해 ‘인사’라는 의미를 나타낸다는 것을 어떻게든 알아냅니다.

자연어 이해를 좀더 공학적으로 정의하면 ‘사람의 언어’를 ‘계산(Computation)이 가능한 의미 표현(Meaning Representation)’으로 변환하는 기술입니다. 사람의 말은 무한한 생산성(Productivity)을 갖고 있는데요. 컴퓨터가 이를 유한한 시간 내에 유한한 자원으로, 사람이 작성한 알고리즘을 통해 처리할 수 있도록 ‘한정적인 상태로 표현(Representation)’하고, ‘모델링(Modeling)’하고, ‘일반화(Generalization)’하는 것을 의미합니다.

사실 엄밀히 말해 세상의 모든 현상이 동일하다고 할 수 있을까요? 아닐 것입니다. 그러나 있는 그대로 다 다르다고 인식하게 되면 무한정의 계산량과 비결정성으로 인하여 프로그래밍할 수 없기 때문에, 응용에 맞게 추상화된 인식의 과정이 필요합니다.

자연어 이해 분야에서 한 가지 더 중요한 이슈가 있습니다. 바로 ‘자연어의 모호성(Ambiguity)’입니다.

사실, 컴퓨터가 사람처럼 모든 문맥을 종합적으로 고려한다면 모호성이 크게 발생하지 않을 것 입니다. 그러나 컴퓨터에 한 번에 입력되는 정보는 한정적이고 각 상황에 대한 지식도 제한적이기 때문에 모호성이 발생합니다. 아래 그림은 컴퓨터가 동일한 자연어 입력에 대해 여러 가지 해석을 할 수 있다는 점을 보여줍니다.

음성 인식 단계에서부터 자연어 분석을 위한 형태소/품사 태깅, 구문 분석, 의미 분석 등, 모든 자연어 이해 영역에서 이러한 모호성이 존재합니다.

이렇듯 자연어 입력은 다양성과 모호성을 갖고 있습니다. 이를 정해진 카테고리나 추상화된 표현으로 인식하는 기술이 자연어 이해인데요. 이미지 인식이나 음성 인식처럼 AI 기술로 해결해야 하는 전형적인 ‘인식’ 문제라고 할 수 있습니다. 자연어 이해는 기존의 많은 AI 인식 영역과 같이 대부분 분류(Classification), 레이블링(Labeling)으로 해결해야 하는 문제인 경우가 많습니다.

이에 언어AI랩에서는 문장, 문서, 질문, 대화 등 자연어의 여러 형태를 처리하기 위한 기술을 연구개발하고 있습니다. 그리고 이를 종합적으로 활용해 ‘페이지’에도 자연어 이해 기술을 적용했습니다.

 

# 문장의 이해: 지식과 자연어 분석

자연어 이해 기술에 대해 하위 기술부터 차례대로 설명하기 전에 이러한 기반 기술들이 필요한 이유를 잘 보여주는 자연어 처리 응용 기술부터 구체적으로 설명하겠습니다.

주위를 둘러보면 자연어로 된 정보가 많습니다. 한국 프로야구 경기를 예로 들면, “NC는 21일 잠실 야구장에서 열린 플레이오프 3차전 두산 베어스와의 경기에서 16-2로 대승을 거두었다”와 같은 뉴스 문장을 볼 수 있습니다. 문장이 길긴 하지만 이를 통해 어렵지 않게 정보를 습득할 수 있죠. 만약, 이 뉴스를 접한 뒤 친구가 “NC 플레이 오프 3차전 어떻게 되었어?”라고 묻는다면 바로 “두산한테 16-2로 이겼어~”라고 대답할 수 있을 것입니다.

이처럼 컴퓨터가 사람과 같이 문장의 의미를 ‘이해하고’ ‘저장했다가’ ‘대답하게’ 하고 싶다면 어떻게 해야 할까요? 자연어 정보를 어떤 방법으로든 이해해서 컴퓨터 내부에 특정한 표현으로 저장했다가 필요할 때 대답해야 할 텐데요.

‘End-to-End 딥러닝 네트워크로만 구성할 수 있는(간단히 입력에서 출력까지 단일 모듈로 해결이 가능한) 크기의 응용시스템’이라면 특정한 형태로 저장할 필요가 없습니다. 하지만 방대한 양의 자연어 정보를 저장하거나, 고성능을 위해 (외부 지식을 사용하여) 모듈 별 튜닝이 필요한 상업용 시스템을 구축할 때에는 이러한 ‘내부 표현’을 고민해야 합니다.

가령, 자연어 처리 영역에서 많이 사용되는 지식 그래프(Knowledge Graph) 형태도 하나의 내부 표현 방식입니다. 자연어 문장의 정보 부분을 ‘술어(Predicate)-논항(Argument)’의 ‘명제(Proposition)’ 형태로 이해해 저장하는 방식이죠. 여기서 ‘Predicate’는 행위나 상태를 나타내며, ‘Argument’는 Predicate의 주체, 대상, 장소와 같은 속성을 의미합니다.

위의 그림에서는 예제 문장을 4개 명제의 ‘논리곱(logical conjunction)’으로 표현하여 저장하였습니다. 이제부터 이와 관련된 자연어 질문이 들어오면 위의 명제 집합과 같은 방식으로 표현한 뒤, 매칭을 통해 사용자가 모르는 값을 답으로 얻어낼 수 있을 것입니다. AI가 계속해서 다음 여러 문장들로부터 정보를 이해하고 저장하면 아래와 같은 그래프 형태가 됩니다. 이를 Knowledge Graph라고 합니다.

이와 같이 자연어 문장을 이해해서 지식화하려면 어떻게 해야 할까요?

자연어 이해 중에서도 ▲관계 추출(Relation Extraction) ▲시맨틱 파싱(Semantic Parsing) ▲오픈IE(OpenIE) 등의 분야가 이러한 문제를 다룹니다. 다만, 모두 조금씩 목적과 접근 방법이 다르고 이를 모두 다루는 것은 너무 방대한 일입니다. 그래서 이번 글에서는 그 중 한국어에 대해 비교적 잘 작동하는 OpenIE 방식만을 소개하겠습니다. 아울러 이때 필요한 ‘자연어 이해 기반 기술(형태소 분석, 개체명 분석 등 일명, 자연어 처리 전처리 기술)’까지 설명을 이어가도록 하겠습니다.

특정 관계(Relation)를 타깃팅하지 않고 문장 내 발생한 모든 관계 정보를 뽑는 것을 OpenIE 방식이라고 합니다. 아주 간단한 전략 중 하나는, 아래 그림처럼 일단 문장을 ‘잘 분해’하여, 어떻게든 ‘정규화된 형태’의 가능한 모든 ‘Predicate–Argument 쌍(pair) 후보’들을 뽑습니다. 그리고 그 중 어떤 명제가 맞고, 틀리는지를 ‘여러 입력 정보’를 이용하여 딥러닝 네트워크를 이용하여 ‘분류(Classification)’ 문제로 풉니다.

딥러닝 네트워크를 이용한다는 것은 지도학습(Supervised Learning)을 한다는 의미입니다. 이를 위해서는 대용량의 학습데이터가 필요하죠. 즉, 이 문제에서는 대용량의 <문장, ‘Predicate– Argument’ 명제 집합> 학습데이터를 구축하고 문장과 명제 집합이 대응하는 방식을 기계학습(Machine Learning)을 통해 훈련하게 합니다.

하지만 문장 내의 모든 단어를 대상으로 후보를 만들어 훈련하고 분류하게 하면 후보가 너무 많아집니다. 대부분 정답이 아닌 경우가 될 것이고, 학습 데이터 불균형으로 인한 훈련의 실패 및 계산량의 폭발적 증가 등의 문제에 부딪히게 됩니다.

또한 의미는 같지만 형태가 다른 다양한 자연어 표현들도 있습니다. 가령, ‘날렸다’, ‘날려 버렸다’ 등의 활용형에 대해 모두 다른 입력이라고 생각하여 처리하게 하면, 기계학습의 대표적인 문제, 학습 데이터 부족 문제(Data Sparseness Problem: 학습 시에 보지 못한 데이터가 예측 시에 나타나 답을 줄 수 없는 상황) 또는 OOV(Out-of-Vocabulary)문제, 확률값의 분산으로 인한 부정확한 예측 등 여러 문제에 부딪히게 됩니다.

이처럼 상위 자연어 처리 응용에서 발생할 수 있는 문제들을 막기 위해 앞서 언급한 자연어 입력 문장을 ‘잘 분해’하고 ‘정규화’할 수 있는 자연어 전처리 기술이 필요합니다. 이 예에서는 각 단어를 형태소(최소 의미 단위)로 분할하고 품사(단어 카테고리)를 분석해 ‘Predicate는 동사로 한정하고, Argument는 명사로 한다’든지 하여 후보를 제한할 수 있으며, 동사에 대해서는 어근만 사용함으로써 정규화할 수 있습니다.

 

# 문장 분석기

앞의 예에서 설명한 것처럼 문장 분석기 또는 전처리기는 언어처리에서 매우 활용도가 놓고 중요한 엔진이죠.

형태소/품사 분석기를 통해 문장에서 ‘명사’, ’동사’ 등 ‘체언’과 같은 핵심 의미를 나타내는 부분과 ‘조사’, ‘어미’와 같은 기능을 나타내는 부분을 잘 잘라 주고 원형(어근)을 복원함으로써 입력을 정규화할 수 있습니다. 그리고 ‘개체명 인식기’를 통해 문장에서 고유 명사에 해당하는 부분을 따로 분석할 수도 있습니다. 그 밖에도 문장 구조 분석기(Syntactic Parser)는 문장 내에서 각 단어의 역할(주부, 술부 등)과 수식 관계를 분석할 수 있죠.

각각은 고유 목적의 학습데이터를 이용하여, 기계학습을 통해 고성능의 엔진으로 만들 수 있는데요. 여기서는 상위 자연어 처리 응용 기술에서 전처리 모듈로 가장 많이 사용되는 형태소/품사 태깅과 개체명 인식기술에 대해서만 간단히 소개하겠습니다.

아래 그림은 “NC 다이노스의 테임즈는 오늘 시즌 10호 홈런을 쳤다”는 문장에 대해 형태소 분석 및 품사 부착된 결과입니다. 이를 통해 ‘치었다’가 그대로 응용 시스템의 입력이 되는 것이 아니라 ‘치/VV’가 입력이 되어서 다른 문장에서 ‘치게 되었다’, ‘쳤다’, ‘쳐 내었다’ 등이 나타나더라도 응용 시스템 입장에서는 같은 입력으로 간주할 수 있게 됩니다.

아래 그림은 이러한 ‘형태소/품사 분석기‘를 만들기 위한 딥러닝 네트워크’입니다. Bidirectional LSTM+CRF 네트워크 구조(관련 링크)를 이용하여 형태소 분석과 품사 부착을 한 번에 할 수 있습니다. RNN(Recurrent Neural Network)을 통해 자연어의 시퀀스(sequence)적인 특징을 반영하고, 가장 상단의 CRF(Conditional Random Field)를 통해 주어진 입력 문장에 숨어 있는 품사 시퀀스와 형태소 분할을 동시에 예측하는 구조를 보여줍니다.

이 네트워크 출력 태그에 적용된 ‘B-,I-,O- 접두사(Prefix)’는 형태소의 시작·중간·없음을 의미합니다. 뒷부분의 NNP, JX와 같은 태그는 명사나 조사 등 품사 정보를 나타냅니다. 이처럼 두 종류의 태그를 한번에 출력하게 함으로써 두 가지 예측이 한번에 되도록 설계한 것입니다. 또한, 여기에서 LSTM이라는 Gated Cell(관련 링크)을 사용하는 RNN 방식은 긴 문맥을 고려하기 위한 일종의 메모리 역할을 합니다. 그리고 양방향 정보를 모두 보존하는 Bidirectional LSTM 방식은 한국어의 시퀀스 레이블링 연구에서 매우 높은 성능을 나타낸다고 알려져 있습니다.

형태소/품사 분석만큼이나 자연어 처리의 기본 엔진으로 중요한 것이, 개체명 인식기(Named Entity Recognizer)입니다. 이는 문장에서 현실 세계의 특정 개체에 대응되는 이름을 나타내는 부분을 인식합니다. 가령, ‘나성범’, ‘문학구장’, ‘NC’처럼 주로 사람(Person), 장소(Location), 기관(Organization) 등을 나타내는 부분입니다.

아래 그림은 위에서 예로 들었던 “NC 다이노스의 테임즈는 오늘 시즌 10호 홈런을 쳤다“ 문장에 대해 개체명 인식을 한 결과입니다.

앞에서 설명한 것과 동일한 딥러닝 네트워크 Bidirectional LSTM-CRF 구조를 이용한 개체명 인식기(관련 링크)를 사용할 수 있는데요. 여기서는 입력으로 하나의 문자(character)가 들어가면 출력으로 ‘B-ORG’와 같은 형태의 개체명 태그를 출력하도록 했습니다. ‘B’는 개체명이 시작된다는 것을 의미하고, ‘ORG’는 해당 개체가 기관임을 나타내는 태그입니다.

문장의 핵심 성분과 종류를 알게 된 뒤, 이 정보를 응용의 입력이나 명시적인 피처(Feature)로 활용하면, 완전한(Fully) End-to-End일 때보다 데이터 부족 문제를 완화할 수 있습니다. 반면, 이러한 전처리기 사용은 오류 전파의 위험성이 있습니다. 문제의 크기와 학습데이터의 양에 따라 전처리엔진을 쓸 것인지 Fully End-to-End로 할 것인지는 자연어 처리 시스템 설계자의 몫이라고 할 수 있습니다.

 

# 감정의 이해

자연어 이해에 있어 명제 분석이 중요한 정보 추출의 한 축이었다면, 감정분석도 또 다른 중요한 축이 될 수 있습니다. 일반적으로 감성(Sentiment)과 감정(Emotion)의 이해는 혼용되기도 합니다. 그러나 자연어 처리에서 엄밀히 말하면 감성 이해는 주로 ‘긍·부정’에 대한 이해를 뜻하고, 감정 이해는 기쁨, 슬픔, 노여움 등 구체적인 감정 이해를 의미합니다. 주로 ‘긍·부정’은 오피니언 마이닝(Opinion Mining)을 위해 사용되며, 기쁨, 슬픔, 노여움 등은 대화와 같은 커뮤티케이션 과정에서 어펙티브(Affective)한 대응을 하기 위해 분석할 때가 많습니다.

예전에는 감성 사전을 이용한 방법도 많이 사용됐습니다. 그러나 ‘의견’이나 ’감정’은 대상에 따라 긍·부정을 표현하는 어휘가 달라지고, 문장 전체를 봐야 정확한 의미를 알 수 있는 경우가 많습니다. 그래서 최근에는 사전을 사용한 방식을 잘 사용하지 않습니다. 또 감정이나 감성 표현을 인식하는 경우는 대부분 사용자의 의견, 댓글, 대화 형태의 구어체 문장을 다뤄야 하는 때가 많습니다. 이러한 경우 사전을 사용한 방식은 더욱 적용하기 어려울 것입니다.

위의 그림은 CNN(Convolutional Neural Network) 계열의 간단한 긍·부정 분류(Classification) 네트워크를 보여줍니다. 처음 텍스트에 대해 CNN을 이용하여 문서 분류를 한 연구(관련 링크)가 등장한 이후 최근에는 CNN을 활용하여 자연어 처리의 분류를 풀고자 연구들이 많이 나타났습니다. 또한 이미지에서 사용하는 여러 계층의 등의 Deep CNN 네트워크가 자연어 처리 분류 문제에서도 잘 작동하는 것으로 나타납니다.(관련 링크)

아래 그림은 대화 진행 중 감정의 상태를 추적하는 분류 모델(관련 링크)인데, CNN으로 문장 단위 Feature를 임베딩하고, RNN의 구조로 대화 문맥을 반영한 예입니다. 이 연구에서는 플루칙(Fluchick)의 8분류 체계(관련 링크)를 감정 카테고리로 사용하였습니다.

다만, 이러한 지도학습(Supervised Learning) 방식을 적용할 때는 학습 데이터를 잘 만들어야 합니다. 각 도메인 마다 감정을 표현하는 방식이 다르고, 문맥에 따라 다르게 해석될 수 있기 때문입니다. 아울러 화자의 감정을 명확히 알 수 있는 것이 아니라, 대화를 본 제 3자가 추정하는 화자의 감정이므로 기계학습용 학습데이터에 정답을 다는 것이 매우 어려운 일입니다.

최근에는 다양한 도메인의 특징을 반영하면서 기존의 학습 데이터를 사용하기 위해 Transfer Learning과 같은 방식(관련 링크)과 같은 방식도 자연어 처리에서 좋은 성능을 내고 있습니다.

 

# PAIGE : Q&A를 위한 질문 이해

지금까지는 일반적인 자연어 이해 기술을 정리했습니다. 이 기술이 페이지에서는 어떻게 사용되었을까요?

페이지는 문장 단위에서부터 대용량의 뉴스 집합 단위 등에 이르기까지 여러 가지의 자연어 이해 기술을 사용하는데요. 그 중 가장 크게 이야기 할 수 있는 부분이 Q&A를 위한 자연어 이해 기술입니다. 먼저 Q&A에서 이를 어떻게 사용하는지 설명하고, 그 다음에 문서 집합에 대해서는 어떠한 자연어 이해 기술을 사용하고 있는지 소개하겠습니다.

페이지 메인 화면 왼쪽 위에 질문 버튼이 있습니다. 버튼을 누르면 아래 그림처럼 타이핑 및 음성을 통해 야구 관련 질문을 할 수 있습니다. 예를 들어 ‘나성범 최근 성적 어때?’라고 질문하면 최근 성적을 알려줍니다. ‘오늘 NC 라인업 알려줘’라고 명령형으로 말해도 잘 알아듣습니다. 또한 키워드 형태도 처리할 수 있습니다. 사용자의 동일한 의도가 여러 형태로 표현되는 것을 대응하기 위해 기계가 미리 많은 사용자 데이터를 학습해 대응하고 있는 것입니다.

자연어 이해를 위해서는 다양한 표현에 대한 이해 및 ‘모호성’에 대한 이해가 중요하다고 언급했는데요. 좀 더 다양한 표현을 알아 듣는지 보기 위해 페이지에서 아래와 같이 표현을 바꾸어 질문했습니다. 그 결과 잘 이해하고 대답하는 것을 볼 수 있습니다.

어떻게 사용자의 질문을 잘 이해하고 대답할 수 있었을까요? 이러한 Q&A 기술에서 질문을 이해하는 가장 중요한 두 가지 항목은 질문의 의도(Intent)와 각 의도에 대한 조건(Constraint)들 입니다. 그리고 모호한 상황에 대비해 문맥(Context)도 잘 파악해야 합니다.

1) PAIGE : Q&A 의도 파악

자연어 처리의 Q&A 시스템이나 대화(Dialogue) 시스템에서 의도(Intent) 또는 주행(Dialogue Act)이라는 용어를 사용하는데요. 페이지에서 Q&A 의도를 파악한다는 것은 질문 처리의 범주를 정의하고 이 중 어떤 범주에 해당하는 질문인가를 파악하는 것을 의미합니다. 페이지의 Intent 초기 범주는 아래 그림과 같은 것들을 포함하여 170여 가지입니다.

이처럼 다양한 Intent를 가진 자연어 형태 야구 관련 질문은 CNN 계열의 네트워크를 통해 170개 중 하나의 범주로 분류됩니다. 아래 그림은 “NC의 오늘 선발 투수는 누구야?” 라는 자연어 질문을 입력으로 받아 Intent 중 ‘인물-선수’로 분류하고 있는 딥러닝 네트워크를 보여줍니다.

이 작업을 하기 전에 질문에 대해 다양한 자연어 처리 전처리를 수행합니다. 개체명 인식과 형태소/품사 태깅 등이 이뤄지고, 시간 표현도 인식되어 이러한 정보들이 질문 분류기의 입력으로 들어갑니다. 이처럼 질문의 의도를 잘 분류하기 위해 각 Intent에 따른 학습 집합을 만들었고, 다양한 형태의 표현을 수집했습니다. 그러나 서비스 전에 모든 의도를 미리 정해 놓기는 매우 어려운 일입니다. 그래서 실제 서비스를 운영하며 사용자의 요구사항을 더 명확히 파악하고, 의도의 분류 체계와 학습 집합을 늘리면서 모델을 확장하는 것도 중요합니다.

2) PAIGE : Q&A 조건/문맥 분석

질문의 의도 인식은 사용자가 ‘무엇에 대한 정보를 원하는가?’를 파악하는 것 입니다. 이를 보다 구체적으로 인식하기 위해서는 의도에 대한 조건을 파악하는 것도 필요합니다.

가령, 질문의 의도가 어떤 선수의 성적을 알고 싶은 것이었다면, ‘선수 이름’, ‘시간’이 중요한 조건이 될 수 있습니다. 선수명을 ‘나성범’으로 지정할 수도 있고, 시간을 ‘작년’, ‘올해’, 혹은 ‘최근’이라고 할 수도 있겠죠. 이때 어떤 조건은 답을 한정하기 위한 필수 조건일 수 있고, 어떤 조건은 의도와 전혀 연결될 수 없을 수도 있습니다.

이러한 부분은 잘 대답하기 위해 파악해야 하는 중요한 도메인 종속적인 지식인데요. 기계학습을 통해 AI를 일반화하면서도, 동시에 도메인 지식을 통해 유연하게 특화할 수 있는 시스템을 설계하는 것이 필요합니다.

 

# PAIGE : 요약을 위한 문서 이해

지금까지는 단일 문장에 대한 이해를 주로 설명하였는데, 페이지의 자연어 이해 기술을 문장 단위에만 적용한 것이 아닙니다.

페이지는 야구와 관련된 뉴스들을 이해하고 뉴스의 토픽(Topic), 주요 이벤트(Event), 핵심 개체, 키워드 등 메타 정보를 추출합니다. 그리고 이러한 정보에 기반하여 요약 메커니즘이 동작하는데요. 요약문을 생성하는 부분은 다음 자연어 생성 부분에서 설명하고, 여기서는 요약을 하기 위해 문서를 분석하는 부분을 설명하겠습니다.

페이지는 단일 사건에 대해 동시간 대에 집중적으로 발생하는 여러 뉴스를 최소한의 문장으로 요약하여 전달합니다. 가장 앞에서는 핵심 키워드를 보여주고, 상세 페이지에서는 요약 문장 리스트를 보여줍니다. 이처럼 핵심 문장만을 선별하기 위해 문서 집합을 이해하는 과정을 거칩니다.

페이지는 뉴스가 발생하면 실시간으로 자연어 처리를 한 뒤, 문서 분류기를 이용하여 미리 정해진 분야별로 분류합니다. 이후 야구로 분류된 기사들은 동적으로 발생하는 이벤트에 따라 클러스터링(Clustering) 알고리즘을 적용하여 그룹화됩니다. 그 다음 그룹화된 문서를 대상으로 요약 알고리즘이 동작합니다.

이와 같이 뉴스를 같은 카테고리나 이벤트에 따라 분류하거나 클러스터링하기 위해서는 문서의 내용을 기계가 알아야 합니다. 여기서는 문서의 벡터(Vector)로 표현을 통해 이해와 계산의 과정이 이루어 집니다. 예전에는 목적에 맞게 문서를 표현할 Feature를 조심스럽게 선별하여 Vector를 구성하는 Feature 엔지니어링(Engineering)에 대한 연구가 많았습니다. 그러나 최근에는 오토-인코더(Auto-Encoder)라는 기계학습 개념을 이용하거나, 딥러닝의 Encoder를 통해 문서를 목적에 맞게 잘 표현할 수 있습니다.

도메인에 따라 문서의 생성 양상이 다르기 때문에 방법론적으로 정답은 없습니다. 다만 이 과정을 최대한 자동화할 수 있는지의 여부가 제너럴(General)한 문서 이해 기술을 만드는 핵심이라고 할 수 있습니다.

문서의 표현을 위해 정보검색에서 많이 사용하는 TF-IDF(Term Frequency – Inverse Document Frequency)에 기반한 Vector 표현 방식도 가장 쉬우면서 많이 사용됩니다. 또한 비지도 머신러닝(Unsupervised Machine Learning)의 대표적인 방법론인 LDA(Latent Dirichet Allocation)(관련 링크) 등도 많이 사용되는 방법 중 하나 입니다.

LDA는 문서의 생성 과정에 관한 확률 모델로서 각 토픽은 단어의 분포로 표현하고, 각 문서는 여러 토픽의 분포에 의해 발생한 것으로 가정합니다. 그리고 관찰된 대용량의 문서 데이터로부터 토픽의 단어 분포와 문서 별 토픽 분포를 추론(Inference)하는 과정을 통해 문서 Vector가 만들어 집니다. 모든 문서, 토픽, 단어에 대해 분포를 추정하는 것은 복잡하고 많은 계산량을 필요로 하죠. 따라서 여러 샘플링(sampling) 기법 및 필요할 경우 병렬 계산을 위한 분산처리 등의 방법이 요구됩니다.

최근에는 딥러닝 기반의 분산 표현도 많이 사용됩니다. 이를 기반으로 한 문서 표현은 아래의 딥러닝 기반 문장 표현 기술과 거의 동일한 방법을 사용하는데요. 아직 까지 성능이 좋은 것은 아닙니다.

위의 방법들 중 어떤 방법이 문서를 표현하는 데 적합한지 여부는 도메인의 특성을 많이 따릅니다. 실제 데이터를 많이 봐야 합니다. 다루고자 하는 도메인의 뉴스나 문서들이 토픽에 따른 단어 분포를 이상적으로 가지고 있지 않을 경우도 많이 있죠. 그래서 좋은 모델을 사용한다고 해서 좋은 결과가 나오지 않을 수도 있습니다.

문서뿐 아니라 문장의 Vector 표현도 문장 간 유사도를 측정하거나, 문장 간 포함 관계 등을 알아내기 위해 사용하곤 합니다. 페이지에서도 요약의 중복 문장을 피하기 위해 혹은 각 문장 Vector간 연관관계를 측정하여 ‘의미 네트워크’를 만들기 위해 문장의 Vector 표현을 사용합니다.

위 그림은 딥러닝 기반 문장 표현에 있어 잘 알려진 두 가지 방식인데요. 그림 왼편의 Doc2Vec(관련 링크)은 주변 문장을 통해 현재 단어를 예측함으로써 주변 문장의 Vector 표현을 학습하는 방법입니다. 오른편 Skip-Thought 방식(관련 링크)은 현재 문장으로부터 주변 문장을 생성하게 함으로써 현재 문장의 Vector 표현을 학습하는 방법입니다.

한편 페이지에서는 딥러닝 RNN 네크워크의 히든 유닛(Hidden Unit)을 문장의 표현 Vector로 사용합니다. 아래 그림처럼 Seq2Seq 네트워크를 통해 입력 문장이 자기 자신을 그대로 생성하는 과정에서 히든 유닛이 입력 문장의 표현을 나타내도록 학습할 수 있습니다.

이렇게 학습된 문장 표현은 앞에서의 ‘명제’ 표현과는 다르게 실수의 Vector로서 표현됩니다. 따라서 사람이 잘 만들어졌는지 확인하기 어렵겠죠. 얼마나 잘 표현을 학습하였는지를 측정하기 위해 유사 문장 그룹에 대한 정답 집합을 작성한 후 블루 스코어(BLEU score)(관련 링크) 또는 nDCG(normalised discounted cumulative gain)와 같은 유사도 측정 척도를 사용하여 평가하기도 합니다. 그리고 목적에 따라 얼마나 정밀하게 문장 표현을 학습할 것인가는 모델의 표현력과 딥러닝 네트워크의 설계 및 파라미터 조정을 통해 실험적으로 결정해야 합니다.

 

# 결론

지금까지 소개한 내용은 자연어 이해 영역의 일부분입니다. 자연어 이해란 응용이 어느 수준까지 필요로 하는지에 따라 난이도와 방법론이 다릅니다. 또 간단한 응용이라면 자연어 이해라는 별도의 모듈 없이 자연어 입력을 그대로 받아 End-to-End로 개발할 수 있을 것 입니다.

하지만 대규모의 Q&A, 대화 시스템이라면 별도의 자연어 이해 모듈이 필요합니다. 그리고 각 모듈 별로 학습데이터와 적합한 방법론을 통해 성능을 향상함으로써 응용 시스템을 만드는데 도움을 줄 수 있을 것입니다. 지금까지 소개한 태스크(Task) 외에도 자연어 이해와 관련하여 다양한 연구들이 언어AI랩에서 진행되고 있습니다.

기회가 된다면, 언어AI랩 소속의 언어이해팀을 통해 앞서 소개한 각 기술 개발의 어려운 점 및 최근의 고민에 대해 더욱 깊이 있게 공유할 수 있기를 바랍니다.


이연수 NLP센터 언어AI랩(Language Lab) 실장. 자연어 이해, 기계번역, 자연어 생성, 정보 추출, Q&A 대화 등 여러 자연어 처리 분야에 대해 기술 개발을 해 왔습니다. 자연어 처리 기술을 통해 더 많은 정보와 재미를 나누는 수다스러운 AI 세상을 만들고 싶습니다.

커뮤니케이션과 AI #1 페이지(PAIGE)를 만드는 사람들