커뮤니케이션과 AI #4 사람의 말로 표현하는 페이지(PAIGE)

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

엔씨소프트의 NLP(자연어처리) 센터는 언어(Language)AI랩과 지식(Knowledge)AI랩의 전문 연구진들이 각각 자연어처리(NLP) 기술과 지식 추론 기술을 활발히 연구하고 있습니다.

지난 글에서는 AI가 사용자의 질문을 잘 알아듣고, 재미있고 흥미로운 야구 소식과 정보를 찾아내는 과정을 알아보았는데요.

‘커뮤니케이션과 AI’ 네 번째 편에서는 NLP센터의 언어(Language)AI랩에서 연구하고 있는 자연어 생성(NLG) 기반 기술 및 야구 정보 서비스 ‘페이지(PAIGE)’에 적용한 사례를 소개하겠습니다. 자연어 생성 기술과 이와 관련된 AI 기술, 그리고 이를 활용하여 페이지에 어떻게 적용하였는지를 자세히 살펴보겠습니다.


# 자연어 생성 기술이란?

인간의 언어를 이해해서 계산의 영역으로 가져오는 기술이 자연어 이해(NLU)라면, ‘자연어 생성(NLG)’은 그와 반대로 시스템의 계산 결과를 인간의 언어로 표현하는 것입니다.

우리는 하루 동안 인간의 말로 표현된 많은 정보를 접합니다. 신문을 보고, TV를 보고, SNS를 읽고, 친구와의 대화를 통해 각종 정보를 읽거나 듣죠. 이처럼 언어는 사람과 정보를 자연스럽고 빠르게 연결할 수 있는 가장 좋은 방법 중 하나입니다.

이는 컴퓨터와의 인터페이싱에서도 매우 중요한 기술입니다. 묻고 대답하기(Q&A), 대화하기(Dialogue) 등 커뮤니케이션 AI의 응용 기술들을 위해서는 반드시 개발해야 하는 기반기술이죠.

NLG의 입력은 컴퓨터에 저장된 데이터의 내부 표현, 즉 데이터 스트림, 로그 파일, Reasoner의 결과물 등입니다. 출력은 이에 대한 자연어 형태의 리포트, 설명문, 요약문, 추천문 등 목적에 맞는 형태가 됩니다.

아래 그림에는 ‘스타워즈 에피소드 4 – 새로운 희망’에 등장하는 로봇 C-3PO의 모습이 담겨 있는데요. NLG는 C-3PO와 같이 주변 데이터를 분석해 사람의 말로 전달해주는 로봇을 만들 때 꼭 필요한 기술입니다.

 

# 자연어 생성 기술의 응용

자연어 생성은 다양한 NLP 어플리케이션에서 사용되는데요. 가령, 대화 시스템에서는 사람이 한 말을 인식하고, 이에 대한 시스템 결과를 자연어 문장으로 생성하는 데 사용됩니다.

 

좀 더 길게 이야기를 만들어 낼 수도 있습니다. 요즘 로봇 저널리즘이라고도 하죠. AI에 경기 기록 데이터, 엔트리 정보 등을 주고 야구 경기 프리뷰 기사를 쓰라고 하면 아래와 같이 기사를 작성할 수 있습니다.

여러 문서나 동영상을 보고 자연어 요약문을 자동으로 작성하는 Summarization 기술도 NLG에 해당합니다. 기계 번역(Machine Translation)도 크게 보면 NLG와 같은 Generation 영역인데요. 거의 동일한 기술이 적용됩니다.

주어진 데이터에 대해 가장 그럴 듯한 자연어 문장을 생성하는 자연어 생성 문제와 주어진 한국어에 대해 가장 그럴 듯한 영어 단어열을 생성하는 기계 번역 문제는 같은 원리로 작동합니다.

 

# 자연어를 잘 생성한다는 것의 의미

그러면 ‘어떻게 생성하는 게 잘 생성하는 것인가?’에 대한 기준이 있어야 할 텐데요. Stent(Stent et al, 2005)라는 사람이 문서 생성의 요건에 대해 아래와 같이 4개의 항목을 제시했습니다.

1) 적절성(Adequacy)

생성된 문장이 모호하지 않고, 원래 담고자 했던 Input 데이터의 의미와 일치하도록 해야 한다는 것 입니다. 다른 말로 ‘Meaning Equivalence’라고도 하는데요.

예를 들어 롯데가 4연승을 하고 있는데, “롯데가 레일리를 선발로 올려 3연승을 노린다”고 생성했다면, 데이터와 자연어 생성 문장의 의미가 일치하지 않는 경우이죠.

2) 유창성(Fluency)

사람이 하는 것처럼 유창하게 말해야 한다는 것인데요. 유창하다는 것은 문법도 정확해야 되고, 어휘도 적절하게 사용해야 한다는 것 입니다. 아래와 같은 예를 보면 알 수 있는데요. A 문장과 B 문장은 같은 의미라도 자연스럽지가 않은 것을 금방 느낄 수 있습니다.

3) 가독성(Readability)

기계가 자연어를 생성할 때 대표적으로 어려운 부분 중 하나입니다. 한 문장 이상으로 이루어진 담화(Discourse)를 생성할 때, 적절히 지시어, 대용어를 사용하고, 적절한 접속사를 사용하는 등 문장의 논리 관계를 고려하여 생성해야 자연스럽게 읽힐 수 있다는 뜻이죠.

4) 다양성(Variation)

같은 의미라도 매번 똑같이 생성하면 지루하고 또 사람같이 느껴지지 않겠죠? 상황에 따라 캐릭터에 따라, 혹은 대상에 따라 표현을 다르게 생성해야 합니다.

최근 딥러닝(Deep Learning)을 통해 자연어 생성이 기술적으로 많이 발전하긴 했지만, 사실 아직까지 AI가 생성한 문장이 이러한 기준을 만족시키기는 매우 어렵습니다.

다만 실용적인 측면에 볼 때, 이러한 요소를 잘 반영할 수 있도록 Generalization(or Trainability, 도메인 적응이 쉽도록 모델 측면에서의 일반화), Context Modeling(문맥, 상황, 조건에 따라 다른 생성), Controllability(파라미터에 의해 생성을 조절) 등의 요소를 고려하여 시스템을 설계해야 합니다.

 

# 자연어 생성의 기반이 되는 딥러닝 기술

지금부터는 자연어 생성을 위한 기본적인 NLP 기술을 소개하겠습니다.

자연어 생성은 딥러닝이 일반화되기 전까지 AI분야에서 매우 꺼려하는 연구 분야였습니다. 통계 기반 생성 모델이 지속적으로 연구되어 왔지만, 한번에 모든 문자열을 확률적으로 생성하는 것은 계산복잡도가 너무 높아 불가능한 일이었습니다.

그래서 도메인 지식을 이용하여 많은 양의 템플릿을 만들어 놓고 이를 선택하는 부분만 기계학습(Machine Learning)을 이용했습니다. 이와 같은 방법은 문장 자체는 정확하게 만들 수 있지만 자연스럽지 않은 결과물, 수많은 템플릿과 도메인 규칙이 필요하다는 점에서 많은 노동이 필요한 방법입니다.

자연어 생성은 입력 데이터 x가이 있을 때, 가장 그럴 듯한 단어열 y1, y2, … 들을 만들어 내는 것입니다. 그러나 최근 딥러닝, 그 중에서도 RNN 기술이 발전하면서 이러한 Conditional Sequence Prediction 문제가 End-to-End 기계학습으로 풀리기 시작하고 있습니다.

가장 기본이 되는 개념은 RNN, Gated Cell, Encode-Decode, Attention, Copy Network 기술들인데요. 지금부터 각각에 대해 간단히 개념을 소개하겠습니다. 이 기술들이 앞서 말씀 드린 NLG의 기술 요건에 어떻게 사용될 수 있을지 생각하면서 보면 좋습니다.

 

# 자연어 인식/생성의 기반 기술, RNN

자연어는 순서가 있는 가변적인 시퀀스입니다. “나는 밥을 먹었다.”, “나는 영희는 좋아하지만 철수는 좋아하지 않는다.” 등 자연어 문장은 길이도 다르고 담겨 있는 의미의 양도 다 다릅니다. 또한 단어 등장 순서에 따라 문장의 의미도 달라지기 때문에 입력으로 자연어를 넣든 출력을 자연어로 생성하든 이러한 가변성과 순서, 구조 등을 지원하는 모델이어야 합니다.

RNN은 이에 적합한 모델이죠. 위의 그림을 보면 t step에서의 입력 xt는 이전 State와 Weighted sum을 한 다음 Activation Function을 통과하여 Hiden state st가 됩니다. 이것이 현재까지의 모든 입력에 대한 기계 내부의 표현이라고 생각할 수 있습니다. 그리고 V라는 Matrix를 거쳐 Output Dimension으로 Projection한 다음 확률값으로 변환하기 위해 Softmax를 통과하면 출력을 위한 확률 분포를 얻을 수 있습니다.

위의 그림 중 아래 이미지는 가장 심플한 RNN의 입출력 예제를 보여 줍니다. 입력은 단순한 1-hot 형태로 넣더라도 Look-up 테이블을 거쳐 임베딩 벡터로 학습됩니다. 그리고 출력은 각 단어에 대한 확률 분포로 만들어 지는데 쉽게는 가장 확률이 높은 것을 생성하면 되죠. 이를 데이터로부터 자연어를 생성하는 문제에 적용 한다면 입력에 데이터가 들어가고 출력에 자연어 단어들이 하나씩 생성된다고 생각하면 됩니다.

 

# 문맥에 대한 고려, Gated Cell

이러한 RNN 자체는 매우 간단하지만, 한계점이 많이 있습니다. 일단, 중요한 정보가 Hidden State를 지날 때마다 0보다 적은 Weight가 곱해지면서 희석됩니다. 이를 Vanishing Gradient Problem이라고 합니다. 이러한 단순한 RNN의 한계를 극복하기 위해 나온 Cell이 Gated Cell인데 RNN에서는 매우 중요한 개념입니다. 이전 State에서 온 정보 중 어떤 정보를 잊어버릴지, 혹은 유지할지를 판단하도록 하였습니다.

 

이렇게 학습하면 각 Cell이 역할을 나눠서 입력된 시퀀스 중 나중에 사용될 중요한 정보만을 잘 기억했다가 출력할 때 사용합니다. Gate 개념을 도입하면서 파라미터도 많아지고 복잡해졌지만, 입력의 Long Distance Dependency를 반영할 수 있게 되면서 시퀀스 생성 성능이 높아졌습니다.

 

# 입력 표현의 확장과 출력의 고도화, Encoder-Decoder & Attention

입출력은 앞의 그림처럼 매 입력마다 생성을 하기 때문에 나중에 입력되는 정보는 이전 출력에서 고려할 수가 없다는 단점이 있습니다. 한번의 입력마다 바로 출력하기 보다는 어떤 출력은 입력 정보를 좀 모았다가 모든 입력 정보를 고려하여 생성해야 할 수도 있죠.

이러한 동기로 Encoder-Decode RNN이 나오게 되었는데 입력을 위한 RNN과 출력을 위한 RNN을 분리하는 것입니다. 아까와 같은 네트워크에서 출력을 안하고 버리다가 마지막 Hidden에서 출력을 시작합니다. 자연어 문장을 생성하고 싶다면 Encoder에서 입력 데이터를 다 받고 정보를 축적했다가 Decoder에서 출력 문장을 생성하는 별도의 RNN을 만들면 됩니다.

Encoder에서는 날씨 데이터를 쭉 입력 받아서 Hidden Unit에 저장했다가, Decoder에서는 이를 기반으로 “오늘”이라는 단어를 생성하고 “오늘”과 이전 state 정보를 다음 Hidden state가 받아 “날씨가”를 생성하고, 이것을 마지막 종료 문자가 생성될 때까지 계속합니다. 아래 그림의 윗 이미지이 Encoder-Decoder RNN입니다.

 

하지만 이 역시 문제점이 있었습니다. Hidden State가 500개의 cell을 가졌다고 해도 하나의 고정된 크기 Unit에 어떤 길이의 문장이든 의미를 다 표현하는 것이 어렵습니다. 같은 구조의 네트워크로 실험한 기계번역 성능을 보면 문장 길이가 20 이상이 되면 성능이 급격히 떨어집니다. 가장 최근의 정보가 가장 큰 영향을 주고 앞쪽에 것은 희미해지며, 또 문장이 길어질수록 압축적으로 표현하는 능력이 떨어지기 때문인데요.

그래서 등장한 것이 Attention 개념입니다. 마지막 Hidden State에 모든 정보를 담는 대신 각 State마다 만들었던 Hidden State를 버리지 않고 Decoder에서 다 이용해 보겠다는 거죠. 보통 앞 뒤로 다 인코딩을 해서 반대 방향으로 생성된 Hidden State도 Concatenation해서 출력할 때 같이 이용합니다. 위 그림의 오른 쪽에 해당합니다.

이 시점에서 Hidden state는 문장의 앞에서부터 현재까지, 문장의 끝에서부터 현재까지 전달된 정보 두 가지(문맥 정보)를 가지고 있되, 자기 자신의 정보가 가장 많은 일종의 메모리라고 생각하면 됩니다. 그리고 출력부에서는 시퀀스를 생성할 때마다 모든 입력부 Hidden Vector의 Weighted sum을 이용하는데요. 가장 중요한 것은 매 생성 시점마다 다이나믹하게 필요한 정보에 더 많은 Weight를 줘서 생성하게 하는 것입니다. 이를 Attention이라고 합니다.

이 Attention 메커니즘을 사용하면 더 많은 정보를 저장하고 더 정교하게 이용하여 생성하기 때문에, 일단 입력이나 생성 길이가 길어져도 성능이 떨어지지 않고 동일한 길이라도 기존 구조에 비해 성능이 향상되는 것을 볼 수 있습니다. 딥러닝 기반으로 NLG를 할 때 가장 중요한 기술 중 하나라고 생각합니다.

 

# 그대로 따라하기, Copy Mechanism

사실, 위에서 언급한 기술들이 생성 문제를 많이 해결했지만, 중요한 문제들이 아직도 남아 있습니다. 우선, Unknown Word 입력에 대해 대처가 어렵습니다.

예를 들어 처음 보는 사람이 “저는 찬드랄레카입니다.”라고 인사한다면 사람의 경우 “찬드랄레카”라는 단어는 처음 듣더라도 “이름이겠구나”라고 생각할 수 있습니다. 그래서 “네 반갑습니다. 찬드랄레카씨”라고 그대로 이름을 따라 할 수 있죠. 그러나 위의 네트워크에서는 기계가 이러한 방식을 배울 수 있는 메커니즘이 없습니다.

따라서 디코더에서 자연어를 생성을 할 때 원래부터 알고 있는 사전 집합 중 하나의 단어로 생성할지, 입력문에 있는 이 모르는 단어를 그대로 카피해서 생성할지에 대해 명시적으로 학습해야 합니다. 아래의 그림이 기존 RNN 메커니즘과 통합하여 한번에 학습하게 한 사례입니다.

 

Copy Mechanism을 사용하면 자연어 생성의 많은 문제들이 성능이 향상됩니다. 예를 들어 신조어가 많이 등장하는 뉴스 요약문 생성 성능도 좋아진다고 알려져 있습니다.

 

# Unpaired (Non-parallel) corpus를 이용한 자연어 생성(문체 변환, 기계 번역)

지금까지 발표된 대부분의 딥러닝을 이용한 자연어 생성 문제 해결 방법들은 입력 정보에 대응하는 출력 문장을 미리 준비한 후에 학습시키는 Supervised Training에 기반하고 있습니다. 예를 들면 “오늘 날씨 알려줘.” 및 이에 대응한 출력 문장 “오늘은 비가 올 것 같네요.”와 같은 쌍을 준비하여 학습해야 하는 것이죠.

문제는 딥러닝 학습은 이런 입력-출력 쌍의 데이터를 대량으로 요구한다는 것입니다. 고성능의 자연어 생성 시스템을 만들기 위해 그 훈련에 필요한 말뭉치의 확보부터 현실적으로 매우 어렵습니다.

최근 이러한 한계점을 돌파하기 위한 연구 방향 중 하나가 Unpaired corpus를 활용한 Unsupervised training입니다. 예를 들면, 어떤 영화에 대한 별 0개 평가 문장을 별 5개 평가 문장으로 변환할 때, 앞서의 경우와 같이 입력-출력 문장 쌍을 만드는 것은 어려운 일이지만 별 0개 평가 문장들과 5개 평가 문장들 각각을 대량으로 수집하는 것은 상대적으로 간단합니다. 이렇게 쉽게 수집된 대량의 말뭉치로부터 상호간 스타일 변환을 학습해 보자는 것입니다.

 

이는 비교적 최근 시작된 연구 방향이기도 하고 Unsupervised 접근법 자체가 supervised 방법에 비해 더욱 고난이도의 기술을 요구합니다. 그래서 자세한 설명은 어렵겠으나, 인공신경망이 반드시 학습해야 하는 핵심적인 포인트들은 다음과 같이 정리할 수 있습니다.

– 어떤 스타일의 문장이 들어오더라도 그 스타일에 의존적이지 않는 본질적인 의미를 Latent vectors의 형태로 인코딩해야 한다.

– 인코딩된 Latent vectors가 주어졌을 때, 각 스타일에 해당되는 디코더는 해당 스타일의 문장을 생성할 수 있어야 한다.

– 위의 포인트들을 학습하기 위해 인공 신경망은 Autoencoder loss, Cycle loss를 최소화하는 방향으로 학습하게 됩니다. (여기서, Autoencoder loss: X 스타일의 문장 x를 latent vectors로 변환한 후, 이를 다시 X 디코더를 이용해 문장 x’가 생성되었을 때, x’과 원래의 문장 x와 얼마나 다른지, Cycle loss: X 스타일 문장 x를 변환 과정을 통해 Y 스타일의 문장 y로 변환하였을 때, 이 문장 y를 다시 X 스타일로 변환한 문장 x’’과 원래의 문장 x는 얼마나 다른지 입니다.)

문체 변환뿐 아니라 언어 간 번역에서도 양 국가 문장 쌍 없이 각각의 대량 말뭉치만으로 번역 능력을 학습시키는 연구 또한 활발히 발표되고 있습니다.

아직 실질적인 성능은 기대에는 미치지 못하지만, 이런 방식의 학습이 가능하다는 사실 자체만으로도 상당히 가능성 있는 기술로 평가받고 있습니다. 그리고 문체 변환에서 곧 체감할 만한 성능까지 도달할 수 있을 것으로 기대를 모으고 있습니다.

 

# 페이지의 자연어 생성, 질문에 대한 답변 생성

페이지는 야구 경기나 팀 정보 등에 대해 아래와 자연어 문장으로 묻고 대답하는 Q&A 기능이 있습니다. 질문을 이해하는 과정에 대해서는 지난번 2회차 글에서 설명이 되었는데, 그러면 앞에서 설명한 자연어 생성 기술을 이용해서 어떻게 답변을 생성하면 될까요?

일단 RNN기반의 자연어 생성의 입력 부분을 보면, 위 그림과 같이 자연어 답변에서 나타나게 될 모든 정보가 입력으로 들어가야 합니다 우선 질문에서 나타난 정보가 매우 중요합니다. 사용자가 어떤 부분을 모르는지, 또는 어떤 부분을 질문의 조건으로 주었는지가 문장형 답변 생성에 중요한 요소가 되기 때문입니다.

 

당연하겠지만, 지식베이스 조회 결과도 입력으로 들어가야겠죠. 그리고 마지막으로 페이지에서는 답변 타입 예측 정보도 답변 생성의 중요한 입력으로 사용됩니다. 그리고 이 입력이 주어졌을 때 결과 문장으로 나타날 수 있는 여러 가지 형태의 문장을 입력과 쌍으로 만들어 학습시키게 됩니다.

그리고 앞에서 설명한 Attention 모델이 페이지에 적용된 모습은 아래와 같습니다. 생성 시에 Attention 중 어떤 정보를 주로 사용했는지를 출력해 볼 수 있는데, 이를 Heatmap이라고 합니다. 아래 그림은 임대한의 기록을 물어보는 질문에 대해 답변을 생성하는 과정에서 Attention이 어떻게 생성되었는지를 보여줍니다.

 

사용자 질문에서의 입력 정보와 데이터 베이스 조회 결과가 답변 문장의 각 단어 생성에 잘 기여했음을 볼 수 있습니다.

 

# 페이지의 문서 생성

페이지는 경기 결과를 입력하면 동적으로 자연어 요약문을 아래와 같이 생성할 수 있습니다.

이는 앞의 답변 생성과 다르게 한 문장이 아닌 여러 문장들로 구성된 문서를 생성하기 위한 페이지 내의 프레임워크를 보여줍니다.

두 개의 RNN 파이프라인으로 구성되어 있는데요. 첫 번째가 문장 시퀀스를 생성해 내는 네트워크이고, 두 번째는 단어의 시퀀스를 생성합니다.

이렇게 둘로 나눈 이유는 아직까지 긴 문서를 하나의 네트워크로 문장 간 논리적으로 구조를 갖게 하고, 데이터와 일관성을 유지하면서 그리고 마지막까지 유창하게 생성하는 것이 쉽지 않기 때문인데요. 최근 논문들을 보면 보다 많은 메모리와 네트워크 계층, Transfer Learning 기법 등을 활용하여 이 두 단계를 End-to-End로 학습하려는 시도도 많이 있습니다.

 

# 페이지의 Unsupervised 문체 변환

아래 그림은 페이지의 뉴스 요약문이 앞에서 설명한 기술들을 이용하여 문체 변환한 모습을 담고있습니다.

입력은 원문이 되고, 출력은 입력과 동일한 의미이지만 우리가 변환하고자 하는 스타일의 문체로 변환한 문장입니다. 여기서는 문어체가 입력이 되고, 구어체가 출력으로 된 경우입니다. 이를 통해 페이지에 보다 친근한 친구의 이미지를 주고자 하였습니다.

그러나 이러한 방식은 앞에서 설명한 데로 각 문체의 정의와 그 기준에 맞는 학습 데이터 구축 비용이 많이 들어가겠죠? 따라서, 앞에서 설명한 Unpaired 데이터를 이용한 Unsupervised 연구가 꼭 필요한데요. 아래는 그러한 연구를 페이지의 문장들에 대해 적용한 결과입니다.

1) 야구: 구어체 ↔ 문어체

2) 야구: 현재형 ↔ 과거형

3) yelp (식당 평가): 부정적 ↔ 긍정적

 

 

# 하루가 다르게 발전하는 자연어 생성 기술

NLG는 과거처럼 규칙과 템플릿을 만드는 노동집약 기술이 아닙니다.

생성할 문서가 길어질수록, 입력이 복잡할수록 해결해야 할 문제들이 아직 많이 남아 있긴 하지만 딥러닝 기술을 이용해서 네트워크를 설계해 주고, 학습데이터만 잘 만들어 주면 End-to-End 기계학습으로 만들 수 있습니다. 이제는 입력 데이터에 Consistent 하면서도 자연스럽고 다양한 문장, 더 나아가 문서를 만들 수 있는 연구들이 계속 발표되고 있습니다.

엔씨소프트의 언어AI랩에서는 단순한 사실 전달부터 추론이나 창작의 영역까지 AI 기술을 이용해 자연어 콘텐츠를 생성하고 전달할 수 있는 다양한 연구를 계속해 나갈 것입니다.


노형종 NLP센터 언어(Language)AI랩 대화/생성 팀장. 자연어 처리 분야 중에서도 특히 대화, 자연어 생성, 문체 변환 등에서 연구를 진행하고 있습니다. 기계의 언어 능력을 더욱 발전시켜 기계와 인간 사이에 진정한 소통이 이루어지기를 바랍니다.

 

 

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

 

 

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

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

커뮤니케이션과 AI #3 흥미로운 소식을 전해주는 페이지(PAIGE)