미래기술로서의 자연어 처리


일반적으로 자연어 처리는 컴퓨팅을 통해 문어(Written Language)를 분석하고 가공하는 작업을 뜻한다. 인간만이 사용할 수 있는 언어인 자연어를 기계에게 가르치는 것은 오래 전부터 공학자 들의 꿈 중 하나였으며, 지난 50년동안 많은 연구와 발전이 있어왔 다. 자연어 처리가 응용되는 분야는 텍스트 분석, 언어모델, 기계 번역, 질의응답 시스템, 기계번역은 물론 최근에는 음성인식 기술 이나 영상처리 기술과 결합되어 개인비서 시스템, 이미지캡션 생 성 기술까지 발전되고 있다. 대표적으로 SNS 등에 게시되는 짧은 글들을 수집하여 브랜드에 대한 반응을 분석하는 동향 분석(Trend Analysis), 입력된 언어를 다른 언어로 번역해주는 기계번역(Machine Translation), 혹은 사용자의 질의에 따라 사용자가 원하는 행동을 취하거나 대답을 하는 질의응답 시스템(QA System) 등이 자연어 처리 기술이 핵심적인 시스템의 예시이다. 딥러닝 이전 자연어 처리 기술은 대부분 규칙 위주의(Rule Based) 알고리즘으로써 상용화할 수 있는 분야가 제한적이었고, 그 성능 또한 인간에 비해 월등히 떨어졌다. 하지만 최근 하드웨어와 기계 학습의 급격한 발전으로 자연어 처리 기술 역시 이전에 비해 굉장 한 성능을 보이고 있다. 대량의 텍스트 데이터를 부호화시키고 이 를 처리하는 작업은 상당한 양의 메모리와 연산량을 필요로 하기 때 문에 이전에는 소량의 텍스트 분석만이 가능했지만, 현재는 GPU 나 클라우드 컴퓨팅을 적극 활용하여 대량의 데이터와 매우 복잡한 모델을 이용하여 패턴을 학습하는 딥러닝과 같은 기법을 자연어 처 리에 적용하고 있다. 본 기사에서는 구체적으로 딥러닝 모델의 한 종류인 재귀신경망 (RNN, Recurrent Neural Networks)을 사용한 자연어 처리에 대 해 살펴보고자 한다. 먼저 RNN에 대한 기본적인 배경과 특성, 그 리고 LSTM에 대해 알아보고, 이를 활용한 가장 단순한 모델인 언 어모델에 대해 자세히 살펴본다. 또, 자연어 처리를 위해 텍스트 데 이터를 전처리(Preprocess)하는 방법과 Word Embedding 방법도 알아보겠다. 마지막으로 RNN 모델을 기계번역과 같은 작업에 적 용시키기 위한 Encoder-Decoder 구조에 대해 알아보겠다.

 


LSTM-RNN 모델


우리가 일상생활에서 흔히 쓰는 자연어는 단어들 혹은 글자들의 연 속체로 해석할 수 있다. 예를 들어 ‘나는 할 수 있다.’ 라는 문장은 [‘ 나는’, ‘할’, ‘수’, ‘있다’, ‘.’] 혹은 [‘나’, ‘는’, ‘할’, ‘수’, ‘있’, ‘다’, ‘.’] 처 럼 단어들 혹은 글자들이 시간순서대로 나열되어 있다고 볼 수 있
다. 따라서 자연어 처리에는 시계열 데이터(Sequential Data)를 처 리할 수 있는 모델이 효율적이다. 이와 같은 이유로 딥러닝 모델 중 재귀신경망(RNN, Recurrent Neural Networks)이 자주 쓰인다. RNN은 시계열 데이터에서 패턴을 찾는데 특화된 인공신경망(Artificial Neural Networks)의 일종이다. 시계열 데이터를 처리하기 위한 기존의 방법들은 주로 데이터를 작은 크기의 Window를 이용 하여 데이터를 일정한 길이의 프레임들로 맞춰 잘라낸 후 사용하 였다. 이렇게 데이터를 작은 길이의 프레임들로 잘라 사용하면 일 반 인공신경망이나 은닉 마르코프 모델(HMM, Hidden Markov Model)과 같이 보다 단순한 모델을 사용하기 용이하지만, 긴 시간 에 걸친 패턴을 찾거나 더 복잡한 패턴을 찾는 작업은 불가능하였 다. RNN은 기존의 모델들 보다 데이터의 길이의 변화에 대처하기 가 편하고 모델의 복잡도를 설정하기가 수월하고, 또 최근의 연구 들에서 보인 높은 성능 덕분에 딥러닝의 한 종류로써 큰 기대를 받 고 있다. RNN은 간단히 설명하자면 인공신경망 구조에서의 노드들에게 지 난 Time Step에서의 정보를 기억하도록 재귀적인 가중치를 준 신 경망 구조이다[그림 1]. [그림 1]과 같은 구조에서 볼 수 있듯이 RNN에는 인공신경망 구조에서 추가적으로 은닉 노드들이 자기 자 신에게 다시 영향을 주는 재귀 가중치(W_hh, Recurrent Weight) 가 루프 형태로 붙어있다. RNN은 이런 재귀가중치를 통해 현재 은닉 노드의 상태를 다음 Time Step에도 전달할 수 있게 된다. 일반적인 인공신경망은 주로 Back-Propagation 알고리즘을 통 해 최적화를 시키게 되는데, RNN의 경우 이 재귀가중치 때문에 Back-Propagation 알고리즘을 바로 적용시키기가 난해하다. 따 라서 RNN을 Time Step에 걸쳐서 풀어헤친 후 〔그림2〕와 같은 구 조의 Unfolded RNN을 적용하여 최적화시키게 된다. Unfolded RNN은 Input 데이터의 Time Step 만큼의 Layer를 갖는 인공신 경망과 같은 구조이기 때문에 Back-Propagation 알고리즘을 그 대로 적용할 수 있다. 따라서 Input 데이터의 Sequence Length가 길어질수록 RNN의 구조는 매우 깊은 인공신경망의 구조와 같아 지며, 이는 RNN이 딥러닝의 한 종류로 취급되는 이유이다. Unfolded RNN은 굉장히 깊은 구조이지만 여전히 Back-Propagation 알고리즘을 통해 Gradient Descent 방법을 이용할 수 있으 며 이를 Back-Propagation Through Time(BPTT)이라 칭한다. Sequence Length가 지나치게 길어져서 모델이 너무 복잡하거나 비효율적인 경우에는 최대 Propagation Step 길이를 제한하여 BPTT를 적용시키기도 한다. 추가로, [그림 2]에서 각 Time Step 마다의 W_hh 같은 값이라는 점에 주의한다. RNN과 BPTT에 대한 기본적인 구조는 일찍이 1989년에 정리되었 으나 깊은 구조의 인공신경망은 학습이 어렵고 요구되는 연산량이

 


매우 많기 때문에 최근까지 별다른 효과를 볼 수 없었다[2, 3]. 다 행스럽게도 RNN 학습 시 요구되는 과도한 연산량은 GPU와 클라 우드 컴퓨팅 등의 하드웨어적인 발전으로 충당할 수 있게 되었고, 특히 최근에는 여러 대의 GPU를 Distributed System으로 묶어서 학습시간을 줄이는 방법이 보편화 되었다. 깊은 구조의 인공신경망을 학습하는데 가장 큰 어려운 점은 Vanishing Gradient Effect이다. Vanishing Gradient Effect는 학습 이 진행될수록 각 노드들이 포화상태가 되며 Gradient들이 0으로 수렴하기 때문에 Gradient Descent 방법을 진행할 수 없는 효과를 말한다. 활성화함수(Activation Function)로 Soft-Threshold[그 림3]함수를 취하는 대부분의 인공신경망 구조는 Vanishing Gradient Effect를 겪게 된다. Convolutional Neural Networks(CNN의 경우 활성화함수를 ReLU(Rectified Linear Unit, [그림3])으 로 바꾸어 이런 문제를 해결하며 RNN의 경우 Long Short-Term Memory(LSTM) 혹은 Gated Recurrent Unit(GRU) 구조를 통해 Vanishing Gradient Effect 문제를 해결한다. RNN에서 Vanishing Gradient Effect는 [그림 4]과 같이 해석할 수 있다[5]. [그림 4]는 Unfolded RNN에서 Time Step 0에서 1의 정보가 Input으로 들어오고 나머지 Time Step에서는 0의 정보가 Input으로 들어오는 것을 나타낸다. [그림 4]에서 은닉 노드에 저 장되어 있는 Time Step 0에서의 정보는 Time Step이 지나감에 따 라 점차 희석되어 Time Step 6에는 그 정보가 거의 남아있지 않 다는 것으로 해석될 수 있으며, 따라서 [그림 4]의 모델에서는 최 대 Time Step 개수가 5를 넘는 목표 함수는 적절히 학습되지 않

을 것이라는 것을 암시한다. LSTM은 각 노드로 흘러 들어가는 정 보의 양을 조절해서 정보가 희석되는 Vanishing Gradient Effect 을 줄여준다. [그림 5]은 정보가 전달되는 곳에 Gate를 추가한 형 태의 RNN 모델이다. [그림 5]에서 볼 수 있듯이, [그림 4]와는 다 르게 Input 정보가 은닉 노드에 미치는 영향력과 바로 이전 Time Step에서의 은닉 노드의 정보가 현재 Time Step에 미치는 영향력 을 Gate를 이용해 통제하면 긴 Time Step을 거쳐도 정보가 온전 히 유지할 수 있으며, RNN에서 Vanishing Gradient Effect의 영향을 줄일 수 있다. LSTM은 RNN의 활성화 함수를 변형한 것으로 [그림 6]과 매우 유 사한 형태로 이루어져 있다[5]. [그림 6]은 기본적인 LSTM의 구조 를 나타내고 있다. 자세히 살펴보면 LSTM은 이전까지의 정보를 저장하는 Cell과 정보의 흐름을 조절하는 3개의 Gate(Input Gate, Forget Gate, Output Gate)로 구성되어 있다. Input Gate는 현 재 Time Step의 Input 데이터가 Cell State에 얼마나 영향을 미칠 지를 결정하며, Forget Gate와 Output Gate는 각각 지난 Time Step의 Cell State가 현재 Cell State에 얼만큼 영향을 미칠지와 현 재 Cell State중 얼만큼을 Output으로 내보낼지를 결정한다. 물 론 Vanishing Gradient Effect를 완전히 없애는 것은 아니지만, RNN의 활성화함수로 Sigmoid함수나 Tanh함수보다 LSTM을 사 용하면 훨씬 긴 길이의 데이터를 학습할 수 있게 된다.


자연어 처리에서의 응용-언어모델과 기계번역모델


언어 모델은 일련의 단어 혹은 글자 데이터들이 들어왔을 때, 다 음 단어를 내뱉는 모델을 뜻한다. 예를 들어 연속된 단어들 [‘나는’, ‘할’, ‘수’]이 Input 데이터로 들어왔을 때, [‘있다’, ‘.’]라는 단어들 을 Output으로 내뱉으면 성공적인 언어 모델이라 할 수 있다. 즉 성공적인 언어 모델은 가장 그럴듯한 문장을 생성하는 모델이다.

바로 다음 단어를 Target으로 하기 때문에 일반적인 언어 모델의 Input 데이터와 Target 데이터는 다음 예시와 같다; Input 데이 터: [‘나는’, ‘할’, ‘수’, ‘있다’, ‘.’], Target 데이터: [‘할’, ‘수’, ‘있다’, ‘.’, ‘_EOS’](여기서 ‘_EOS’는 End-Of-Sentence의 약자로 문장이 끝났음을 알려주는 토큰이다). 자연어 단어들로 되어있는 데이터를 RNN Model에 적용시키기 위해서 단어들을 0과 1로 표현하는 One-Hot-Encoding 하는 작 업을 거치게 되는데, One-Hot-Encoded 벡터는 전체 단어 개수 와 같은 차원의 0 벡터에서 해당 단어의 인덱스에 해당하는 값만 1인 벡터이고, 이에 따라 One-Hot-Encoding을 거친 문장 데이 터는 필연적으로 그 차원이 비효율적으로 크다. 좀더 효율적인 모 델 학습을 위하여 이를 축소하는 Word Embedding Layer를 도입
하는데, Word Embedding Layer는 One-Hot-Encoded Input 과 Embedding Weight의 Weighted Sum으로 표시된다(혹은 활 성화함수가f(x)=x인 은닉 Layer로 해석될 수 있다). 예를 들어 총 단어의 종류가 30,000개인 경우 One-Hot-encoding을 거친 input 데이터의 차원이 30,000 차원이라면 크기가 [30,000x 1000] 인 Weight 행렬을 통해 1000차원의 실수 행렬로 Input 데이터의 차원을 줄일 수 있다. 데이터 전처리 과정이 끝난 후, LSTM-RNN을 이용한 언어 모델 의 개요는 [그림 7]과 같다[10]. One-Hot 벡터로 표시되는 단어들 의 Sequence는 Word Embedding Layer를 통해 실수 벡터로 변환 된 후, LSTM layer에 전달된다. LSTM Layer를 통과한 Output은 그 후 최종적으로 Output 데이터의 차원과 크기가 같은 Softmax Layer를 통과하며 Output 단어의 확률 값으로 변환된다. 언어 모 델을 학습시키기 위해서는 모델의 Output과 Target 데이터 사이 의 거리를 재는 오류 함수가 필요한데, 대부분의 인공신경망 구 조와 마찬가지로 언어 모델에서도 Cross Entropy를 사용하게 된 다. Target 데이터가 One-Hot-Encoded 벡터이기 때문에, Cross Entropy는 그 자체로 Negative Log-Likelihood(NLL)과 같은 값 이다. 따라서 이 오류 함수를 최소화 시키는 모델의 Parameter 값 을 찾으면 들어온 Input 단어 Sequence에 대한 가장 그럴듯한 다 음 단어를 찾을 수 있게 된다. 잘 학습된 언어 모델은 꽤 그럴듯한 문장을 생성하며, 문장 생성, 기계 번역 등의 자연어 처리 분야에 응용할 수 있다. 언어 모델 학습이 완료된 후, Word Embedding Layer의 Weight 에서는 재미있는 현상이 발견된다. Word Embedding이 된 새로운 공간에서는 각 단어들이 축소된 차원의 실수 벡터로 표현되는데, 잘 학습된 Word Embedded Space의 경우 단어들의 의미적, 구문 적 요소를 적절히 포함하게 된다. 예를 들어 [그림8]과 같이 비슷한 의미 혹은 비슷한 용법의 단어들은 매우 근접하게 분포하게 되며, 나아가서는 [그림 9]처럼 단어들간의 상관관계도 인간의 의식과 비 슷하게 성립되는 것을 확인할 수 있다[6]. 조금 더 복잡한 자연어 처리 기술의 예시로는 기계번역(Machine Translation) 시스템 등이 있다. 기계 번역은 Source 언어의 문 장을 Target 언어의 문장으로 번역하는 패턴을 학습하는 작업이 며, 기존의 구문 단위의 통계학적 기계 번역(Statistical Machine Translation, SMT) 위주의 기법에서 최근 영어-불어 번역을 중 심으로 RNN을 이용한 기법들이 적용되고 또 새로 연구되고 있다 [1, 8].기계번역을 위한 RNN 모델은 주로 Encoder-Decoder 모델 을 사용한다. Encoder와 Decoder는 각각 은닉 Layer의 크기는 동 일하지만 각각의 Weight를 가지고 있는 두 개의 RNN 모델이다. 번역을 위한 과정을 살펴보면, 먼저 Encoder에서 Source 언어의 문장을 Input Data로 받아서 Time Step에 따라 Feed Forward Propagation 시킨 후, Encoder의 제일 마지막 Time Step의 RNN 의 정보를 그대로 Decoder에게 넘겨준다. 이 때 넘겨주는 RNN이 가지고 있는 정보는 Input 문장의 정보를 모두 담고 있는 Sentence Representation이라 볼 수 있다. Source 언어의 문장 정보를 받은 Decoder는 해당 정보를 Target 언어에 맞춰서 한 단어씩 출력하면 번역이 완료된다. Encoder-Decoder 기계 번역 모델을 학습시키 기 위해서는 대량의 Parallel Corpus(Source 언어 문장과 Target 언어 문장이 같이 있는 데이터)가 필요하기 때문에 현재는 서구권 언어를 위주로 좋은 성능을 내고 있으며, 영-한, 영-중 등의 언어 에서 기계 번역 모델에 대한 연구가 활발히 진행 중이다.


 

 

 

결론 - 궁극적인 인공지능에 반드시 필요한 자연어 처리


지금까지 본 기사를 통해 LSTM-RNN과 기본적인 언어모델, 그리 고 Encoder-Decoder 모델을 이용한 기계번역 시스템에 대해 살 펴보았다. 자연어 처리 기술의 응용분야는 기계번역 외에도 QA 시 스템, 감성분석, 개인비서 시스템 등 인간과 컴퓨터의 소통이 필요 한 곳이라면 어디에나 응용이 가능하다. 자연어 처리에 대한 시장 의 수요도 급등하는 추세이며 시장조사 기관인 Tractica에 따르면 2015년 약 3000억원 규모로 추정되었던 자연어 처리 기술의 글로 벌 시장은 2024년에는 약 2조 3천억원 규모로 성장할 것이라 예 측하였다[9]. 인공지능 연구의 궁극적인 목표는 인간과 같은 수준의 지능을 개발 하는 것이다. 이 목표를 이루기 위해 필연적으로 선행되어야 하는 것이 자연어 처리에 관한 연구이다. 아직 인간 수준의 자연어 처리 능력은 요원해 보이지만, 최근 딥러닝과 알파고의 폭발적인 영향력 덕분에 인공지능에 대한 관심이 급증하고 있으니, 자연어 처리 기 술도 이에 부응하여 빠르게 발전하리라 기대한다.

 

 

참고문헌
[1]  Sutskever, Ilya, Oriol Vinyals, and Quoc VV Le. “Sequence to sequence learning with neural networks.” Advances in neural information processing systems. 2014.

[2]  Paul J Werbos. Backpropagation through time: what it does and how to do it. Proceedings of the IEEE, 78(10):1550{1560, 1990.

[3]  Williams, Ronald J., and David Zipser. “A learning algorithm for continually running fully recurrent neural networks.” Neural computation 1.2 (1989): 270-280.

[4]  Bengio, Yoshua, Nicolas Boulanger-Lewandowski, and RazvanPascanu. “Advances in optimizing recurrent networks.” Acoustics, Speech and Signal Processing (ICASSP), 2013 IEEE International Conference on. IEEE, 2013.

[5]  Graves, Alex. Supervised sequence labelling with recurrent neural networks. Vol. 385. Heidelberg: Springer, 2012.

[6]  Mikolov, Tomas, Wen-tau Yih, and Geoffrey Zweig. “Linguistic Regularities in Continuous Space Word Representations.” HLT-NAACL. Vol. 13. 2013.

[7]  Hochreiter, Sepp, and J?rgen Schmidhuber. “Long short-term memory.” Neural computation 9.8 (1997): 1735-1780.

[8]  Bahdanau, Dzmitry, Kyunghyun Cho, and YoshuaBengio. “Neural machine translation by jointly learning to align and translate.” arXiv preprint arXiv:1409.0473 (2014).

[9]  Tractica, (Feb 22, 2016),“Natural Language Processing Software, Hardware, and Services Market to Reach $2.1 Billion by 2024”,

[10]  Mikolov, Tomas, et al. “Recurrent neural network based language model.” Interspeech. Vol. 2. 2010.