자동번역부터 챗봇까지 머신러닝과 딥러닝으로 사람을 읽는 자연어 처리 기술
지난 포스트에서는 시각화에 관한 이야기를 조금 나눴지만, 실제 최근의 머신러닝, 구체적으로 필자가 공부하는 미디어 분야에서 가장 핫한 머신러닝/딥러닝 기술은 "자연어 처리(NLP, Natural Lanuage Processing)"라고 불리는 기술이다.
사실, 일반인들에게도 자연어 처리는 낯선 분야는 아닌데, 가볍게는 필자를 포함해서 수많은 대학교 학생들이 신세를 지고 있는 구글 번역기나 최근 많은 회사에서 사용하고 있는 상담용 챗봇, 깊게 들어가서는 수능을 대신 보는 AI와 같은 꽤 인간적인(?) 머신러닝 기술들이 대부분 자연어 처리에 뿌리를 두고 있기 때문이다.
“그리 비관적으로 생각하지 말게. 그렇게 끔찍하진 않아. 사람들이 말하듯, 이탈리아에선 보르지아 치하 30년간 전쟁, 테러, 살육, 학살을 겪었지만, 미켈란젤로, 다 빈치, 르네상스를 만들었어. 형제애를 가진 스위스에선 500년간 민주주의와 평화를 가졌지. 그런데 그들은 뭘 만들었나? 뻐꾸기 시계라네. 잘 가게.” - 영화 <제 3의 사나이>
그렇다면 컴퓨터가 글을 읽고/쓰게 만드는 자연어 처리 기술은 어디서부터 시작됐을까? 사실 "인간이 가지고 있는 언어 능력"에 대한 탐구는 고대 그리스까지 거슬러 올라가는 떡밥(?)이지만, 현대 머신러닝/딥러닝 기술과 직접적인 연결점을 갖는 시기는 "제 2차 세계대전"을 전후한 시기라고 볼 수 있다. *
* 머신러닝을 포함한 현대 컴퓨터 기술의 많은 부분은 전쟁과 매우 깊은 관계가 있다(e.g. 인터넷, 암호화 등)
사실, 어떻게 보면 당연한 이유인데, 손자병법이나 오자병법 등 대부분의 병법서에서 나오듯이 전쟁에서 가장 중요한 역할을 하는 것은 "적에 대한 정보"이기 때문이다. 이런 배경에서 적에 대한 정보는 아군 측이 읽기 쉬운 말(영어)가 아닌 다른 나라의 언어(러시아어, 일본어 등)일 수밖에 없고 이에 따라 "엄청나게 많이 쏟아지는 외국어 문서"를 자동으로 처리하는 기술을 개발해야 할 필요가 있었기 때문이다.
하지만, 기계의 도움을 받은 초기 자연어 처리 기술(?)은 상당히 성능이 떨어지는 편이었는데, 사람들이 초기에 시도한 방식은 "언어의 규칙을 분해해서 재조립"하는 방식이었기 때문이다. 자세히 말하기에 전문적인 이야기이기 때문에 쉽게 풀어보자면, "외국어 문장을 역할(규칙)별로 조각조각 내서 번역하고, 원하는 언어의 구조에 맞게 붙여내는 조립과정을 정교하게 만들자"라는 접근이 초기 번역 기술이 시도했던 방식이다.
이런 방식은 문장 구성 방식이 이질적인 언어에 자연스럽게 적용되는데는 한계가 있었고, 결과적으로는 현대의 자연어 처리 방식으로 사용되지는 않고 좁은 분야(특정 분야나 메뉴얼 구성 등)로 방향을 틀어 발전하게 됐다. (현대에도 이런 식의 자연어 처리 방식을 연구하는 인원은 존재하지만, 주류라고 보기에는 어느 정도 거리가 있다).
이런 배경에서 주목을 받게 된 방식은 "통계적 언어모델" 방식이었다. 복잡한 내용을 쳐내고 핵심적인 접근법을 보자면. "문장의 규칙(Rule)에 신경쓰는 대신 단어가 얼마나 등장하는지 파악하자!" 라는 접근이었다. 얼핏 보면 "이게 말이 되나?" 라는 반응이 나올 수 있었지만, 결과적으로 해당 방식은 매우 큰 성과를 냈고, 현대의 컴퓨터를 통한 언어 분석의 주류가 될 수 있었다. J.R Firth가 남긴 말은 이런 접근을 한마디로 요약해 준다고 볼 수 있다.
"You shall know a word by the company it keeps (주변단어가 그 단어의 의미를 알려준다) - J.R Firth (1957)
(전공자가 보면 뒷목 잡을 정도의 요약이지만) 간단히 말해 이런 접근은 "단어/언어 단위의 분포(얼마나 데이터가 뿌려져 있나)에 따른 확률을 계산해서 끊임없이 업데이트 하는 방식"인데, 이는 현대 머신러닝 계산의 핵심적인 부분과 연결되는 부분이 많았기에(혹은 반대로 이 문제를 해결하기 위해 기술이 발전했기에), 현대의 컴퓨터를 통한 언어 분석의 기초를 다졌다고 생각할 수 있다.*
* 이 과정에서 MLE(maximum likelihood estimation, 보통 최대우도법이라고 부른다)나 베이즈 등 여러 통계, 수학적 기술이 활용되는데, 이를 자세히 알고 싶다면 서울대학교 신효필 교수님의 책 "언어학과 통계모델(서울대학교출판문화원)"를 읽어보길 바란다.
여기까지 읽은(그리고 이전의 포스트를 읽어 온) 독자들은 감을 잡았겠지만, 이런 배경에서 딥러닝 기술이 자연어 처리 기술과 결합하게 됐다는 사실은 딱히 놀랍지 않다. 과거 글에서 강조한 바와 같이, 머신러닝/딥러닝 기술의 핵심은 "고차원의(복잡한/규모가 큰) 데이터를 컴퓨터의 연산능력에 던져 최적의 값(작은차원/결과)으로 만들어내는 방법"이기 때문이다.
즉, 한 문장(문단/문서)에서 단어가 얼마나 분포해 있는지를 계산하고, 이를 다시 업데이트는 하는 과정은 결과적으로 거대한 데이터 덩어리(텍스트)에서 단어, 문장을 끊임없이 세고 확률을 바꾸는 단순 작업을 빠르게 반복하는 것과 유사하다.
이 과정은 계산과학(Computational Science, 컴퓨터 과학과는 약간 다르다)을 바탕으로 하는 각종 우아하고 기발한 기법들을 통해 빠르고 효율적으로 머신러닝 분야에 적용되고 발전됐다.
이 과정에서 중요한 것은 "글을 어떻게 컴퓨터가 읽을 수 있게(연산 가능하게) 만드는 것이냐는 문제"인데, 이것을 벡터화/임베딩 등의 다양한 명칭(자세하게는 다르지만 일단 쉽게 이해하자)으로 부른다. 이 과정에서 흔히 사용되는 방식은 BoW(단어가 큰 상자안에 있다고 생각하고 등장 빈도를 세는 방식), TF-IDF(그냥 세는 것이 아니라 가중치를 매겨서 중요한 단어를 표현하는 방식) 등이 존재한다.
어쨌든 간단히 보자면 다음과 같은 방식이 머신러닝/딥러닝에서 컴퓨터가 글을 읽는 방식이라고 볼 수 있다.
step 1. 텍스트 데이터를 준비한다
step 2. 컴퓨터가 읽기 전에 잘 다듬어준다(이것을 전처리라고 부른다)
step 3. 컴퓨터가 읽기 좋게 잘 바꿔준다(벡터화/임베딩)
step 4. 열심히 신경망이 움직인다 *
step 5. 복잡한 자료를 간단한 결과(O/X, 탈락/통과, n번째 주제 등)로 바꿔준다
step 6. Profit!
이 과정에서 수많은 혁신적인 기술들이 매년 세상을 놀랍게 하고 있는데, 전공자 사이에서 이제는 고전적인 기술 이라는 평가를 받는 Word2Vec이나, 최근까지만 해도 강자의 자리를 차지하고 있던 ELMo(세서미 스트리트의 그 엘모 맞다 정확한 이름은 Embeddings from Language Model) 그리고 요즘 인기를 끌고 있는 BERT(Bidirectional Encoder Representations from Transformers)까지 자연어 처리 분야는 정말 쉴새 없이 새로운 기술이 등장하고 있다(그리고 보통 필자와 비슷하게 여기서 좌절한다) *.
* 관심이 있는 사람들은 arxiv같은 곳에서 위 키워드로 검색하면 새로운 세계(?)를 경험할 수 있을 것이다
사실 위에서 무시무시하게 이야기 하긴 했지만(그리고 실제로는 생각보다 더 무서운 괴수들이 활동하지만), 최근의 연구자들은 "누구나 쉽게 사용할 수 있는" 자연어 처리 기술을 개발하는 데 나름의 노력을 쏟고 있다(Gensim같은 키워드로 검색해 보자).
물론, 비전공자가 보기에는 오십보 백보 수준이지만, 적어도 논문을 보고 한땀한땀 컴퓨터 프로그램을 짜야 했던 험악한 시절보다 현대의 자연어 처리 기술은 코드 몇줄로 해당 과정을 처리할 수 있도록 해 놨으며, 현금만 충분하다면(...) 이 과정을 마우스 클릭 몇번으로 해결할 수 있도록 많은 플랫폼이 서비스를 제공하고 있다 (IBM Watson 등을 검색해 보자).
그러니 컴퓨터가 수능을 치는 시대를 미심쩍은 눈으로 맞이하기보다는, 알고 보면 통계에 기반한 정상적인 계산이라는 점(?)을 깨닫고 안심하고 머신러닝을 공부하고 활용해 보는 것은 어떨까? 조그만 관심으로도 삶이 매우 윤택해 질지 모를 일이다.