딥러닝의 발전과 NLP(자연어 처리)

딥러닝의 발전과 NLP(자연어 처리)


더딘 기술발전과 실효성에 대한 의문으로 ‘빙하기’를 거치고 있던 인공지능 기술은 2010년대 중후반 딥러닝(Deep Learning) 기술의 발전 덕분에 제2의 전성기를 맞이하게 된다. Resnet을 비롯한 CNN(Convolutional Neural Network)의 발달로 주목받게된 이미지처리(Image Processing) 분야는 업계와 산업을 막론하고 다방면에서 활용되는가 하면, 금융 업계의 퀀트(Quant)들이 RNN(Recurrent Neural Network)를 전통적인 시계열 분석에 활용하면서 사람들은 딥러닝을 활용해 내일의 주가를 예측할 수 있을 것이라는 희망을 보았다.

출처: pixabay

그러나 딥러닝 전성시대에도 유독 NLP(자연어처리)분야 만큼은 빛을 보지 못했다. 인간의 언어는 문장속 단어의 위치와 뉘앙스에 따라 의미가 달라진다는 특성 뿐 아니라 발화자의 의도를 100% 담아낼 수 없는 모호성과 불규칙을 가지고 있다. 이러한 특성들 때문에 자연어처리 분야는 사람들에게 외면받아왔다.

전통적인 RNN과 LSTM 모델의 장기의존성 문제라는 NLP의 기술적 한계가 2017년대 구글이 발표한 ‘attention is all you need’라는 논문에 의해 극복되면서, NLP 연구는 변곡점을 맞게 되었다. 이후 언어모델(Language Model)의 거대화라는 트렌드 속에 초거대언어모델(LLM)들이 속속들이 개발되기 시작하였고, 이제 드디어 자연어처리(NLP)의 전성기가 시작되었다. 이번 시간에는 우리 일상속에 이미 깊이 침투한 언어모델들과 자연어처리에 대해 알아보자.

1. NLP(Natural Language Processing), 자연어 처리란?

오랜 시간 인간의 전유물로만 여겨져 왔던 '언어'를 컴퓨터에게 가르치고, 나아가 컴퓨터가 스스로 언어를 자유자재로 사용하게 할 수는 없을까? 이러한 질문에 답하기 위한 오랜 연구들이 모여 NLP(자연어 처리)라는 분야가 만들어졌다. 간단히 말해 NLP(자연어 처리)란 인공적이지 않은, 즉 자연스럽게 발생한 모든 언어(한국어, 영어, 일본어 등)를 컴퓨터가 처리하고 응용하게끔 해주는 모든 기법들을 다루는 머신러닝(딥러닝)의 한 분야를 말한다.

출처: pixabay

NLP는 또다시 인풋을 다루는 NLU(Natural Language Understanding)과 아웃풋을 다루는 NLG(Natural Language Generation)로 나뉘는데, 전자는 각 언어 텍스트의 문법과 문맥 등을 컴퓨터가 사람이 의도한 바와 같이 이해하게끔 하는 영역이며, 후자는 한 발짝 더 나아가 컴퓨터가 이해한 것을 바탕으로 직접 인간이 이해할 수 있는 텍스트를 생성해내는 영역이다. 번역기, 챗봇, 텍스트 분석 등 다양한 NLP 응용 기술에는 NLU(인풋)과 NLG(아웃풋)의 요소가 섞여있다.

2. 실생활 속의 자연어 처리

텍스트의 데이터화는 이미 많은 부분 이루어져 왔고, 실생활 속 다양한 분야에서 응용되어 왔다. 챗봇, 리뷰(평점) 분석, 번역기, TA(텍스트 분석) 등 누구나 한 번쯤 사용해 본 적이 있을 법 한 모든 분야에 NLP가 활용되고 있다. 예를 들어 우리가 배달 음식을 시켜먹고 작성한 '리뷰와 평점'은 하나의 귀중한 '텍스트 데이터'가 된다. 배달 플랫폼에서는 수십만 건의 리뷰 데이터를 바탕으로 고객들의 식당에 대한 생각들을 분석하고 보다 정확히 파악할 수 있다.

우선 가게 사장님은 수십 수백만 건의 고객 리뷰를 보고 전체적인 음식에 대한 평이 긍정적인지 혹은 부정적인지를 쉽게 알 수 있다. 나아가 음식이 짠지, 양이 적은 지, 배달이 느린지 등 고객의 세부적인 의견도 한눈에 파악하고 개선할 수 있으며, 배달 플랫폼에서는 고객의 리뷰와 주문한 가게에 대한 정보를 바탕으로 고객이 선호할 만한 가게를 추천해주며, 고객별로 쿠폰을 다르게 발행할 수도 있다. 이 모든 분석의 가운데에는 자연어 처리가 있다.

3. 컴퓨터가 자연어를 이해하는 과정

우리가 아는 거의 모든 경우 컴퓨터가 인식할 수 있는 것은 주로 0과 1로 이루어진 숫자뿐이다. 음성, 이미지, 텍스트 등 어떠한 형태의 데이터도 컴퓨터는 숫자의 형태로 인식하게 된다. 그럼 어떻게 아이폰 siri는 어떻게 '오늘의 날씨는?'이라는 숫자가 아닌 '자연어'로 된 질문을 알아듣고 날씨를 알려주는 것일까? 마찬가지로 언어도 컴퓨터는 숫자로 된 데이터가 아니면 인식하지 못한다.  그래서 어떤 모델을 사용하든 자연어를 컴퓨터가 이해할 수 있는 형태(숫자)로 만들어주는 작업이 필요하다.

이것을 벡터화(Vectorization)라고 한다. 그 밖에도 의미 혹은 단어 단위로 문장을 잘라주는 토큰화(tokenization)와 모델에 따라 정보 손실을 방지하기 위한 패딩(Padding) 그리고 정규화(Normalization) 등의 작업, 그리고 더 모델이 더 좋은 성능을 낼 수 있도록 불용어(Stop word) 지정과 범주화(Categorization) 등 전처리 과정이 필요하다.

데이터가 준비되었다면 이제 본격적으로 머신러닝(딥러닝) 모델을 만들어볼 차례다.  크게 두 가지 분류로 나누어 볼 수 있을 것 같은데, NLP를 가능하게 해주는 모델들은 word2 vec, fasttext 등 통계적 언어 모델(Statistical Language Models) 계열과 RNN, CNN 등 신경망 기반의 전이 학습(transfer learning) 계열 모델들로 나눌 수 있을 것 같다. 방대한 양의 사전학습(pre-trained)을 마친 전이 학습 계열의 모델들은 대부분의 경우 통계적 언어 모델보다 성능이 좋을 수밖에 없고, 실제로도 요즘 많이 쓰이고 있다.






문과 출신으로 AI 스타트업에서 데이터 사이언티스트로 일하고 있습니다.