2014년 11월 19일 수요일

자연어 기계학습의 혁명적 진화 - Word2Vec에 대하여

 기계학습의 여러 분야중에서도 자연언어 처리는 가장 흥미진진하고 응용분야가 넓다. 하지만 이 분야의 연구 진행은 토론토 대학의 교수이자 구글에서 인공지능을 연구하고 있는 인공지능 분야의 거장인 Geoff Hinton이 reddit에서 진행된 질의답변 이벤트에서 지적한 바와 같이 반세기 가까이 벨 연구에서 진행된 연구들의 재탕에 지나지 않는 답보 상태에 있는 실정이다.
 여기에 최근 주목할만한 한가지 흐름이 나타났기에 이번 포스팅에서 소개해 보고자 한다.

출처 deeplearning4j

Word2Vec


 Word2Vec는 구글의 연구원인 Tomas Mikolov와 Kai Chen, Greg Corrado, Jeffrey Dean에 의해 쓰여진 논문인 "Efficient Estimation of Word Representations in
Vector Space(백터공간상에서 단어 의미의 효율적인 추정)"에서 제안된 방법을 구현한 알고리즘으로 기존의 알고리즘에 비해 자연언어 처리 분야에서 비약적인 정밀도 향상을 가능하게 하고 있다.

그렇다. 논문 저자의 한 명은 바로 그 Jeff Dean이다.

 Word2Vedc는 이름이 나타내는 바와 같이 단어의 의미를 벡터형태로 표현하는 계량기법으로,  각 단어를 200차원 정도의 공간에서 벡터로 표현하고 있다. 단어에 대한 벡터 표현 생성 연구는 이전에도 있었지만, 그들과의 차이는 그 벡터가 단순한 수학적 존재 이상의 복잡한 개념 표현을 넘어 추론까지도 손쉽게 구현이  가능하다는 점 이다.

Word2Vec를 나타낸 그림.
두 단어간의 거리는 관계성을. 방향은 문맥상의 의미를 내포하게 된다.
출처: insightdatascience.com


 Word2Vec의 가능성을 실감할 수 있는 예를 한가지 살펴보자.

Insight Data Science의 데이터 과학자인 Christopher Moody는 Word2Vec를 이용해 검색엔진 형태의 질의 응답 사이트를 만들었다.


 (이 글을 포스팅하는 시점인 2014년11월19일에는 접속이 안 되고 있음)

France - Paris + Seoul  = Korea

 위의 수식에서 프랑스France는 파리Paris와 연결되어  문맥 상 그 도시를 수도로 하는 국가를 나타내고 여기에 서울Seoul이 더해짐으로서 대한민국Korea이라는 결론이 도출된다.

 비슷하게 "왕 - 남자 + 여자 = 여왕"이라는 계산이나 "농구 - 마이클 조던 + 골프 = 타이거 우즈"와 같은 추론도 가능하다. 즉, 두 단어를 이은 방향이 문맥적 의미를 표현하게 되며  Word2Vec는 이러한 과정을 간단하게 처리하면서도 높은 정확도를 자랑한다.

 재미있는 예를 좀 더 살펴보자.

메트릭스의 생각없는 버전 = 블레이드2


이쯤되면 한국어 학습도 시켜보고 싶어진다.
넣어 보고 싶은 이름들이 많다.


 이와 같이, 문맥상의 의미를 정량화된 벡터로서 표현하는 것이 가능해지게 되는 것이다.
 논문이 발표되고 불과 1년 사이에 Tomas Mikolov 본인을 포함해 많은 연구자들이 어마어마한 양의 관련 논문들을 쏟아내고 있으며  딥 러닝을 통한 추론의 정밀도를 비약적으로 향상시킬 수 있다는 사실도 입증이 되었다.

Word2Vec는 어떻게 동작하는가?


 Word2Vec는 원래 인공 신경망 연구에서 태어났으며 같은 맥락을 지닌 단어는 가까운 의미를 지니고 있다는 전제에서 출발한다. Word2Vec는 텍스트 문서를 통해 학습을 진행하며 한 단어에 대해 근처(전후 5-10단어 정도)에 출현하는 다른 단어들을 관련 단어로서 인공 신경망에 학습 시킨다. 연관된 의미의 단어들은 문서상에서 가까운 곳에 출현할 가능성이 높기 때문에 학습을 반복해 나가는 과정에서 두 단어는 점차 가까운 벡터를 지니게 되는 것이다.

 원래 이러한 문제는 엄청난 계산을 필요로 하지만, Mikolov는 논문에서 계산 효율도 크게 향상 시켰고(논문의 저자 중 한 사람은 구글 최적화의 신으로 불리는 바로 그 Jeff Dean이다!), 그 결과 현재 C, Python, Java, Go, Scala등 다양한 언어로 구현이 진행되고 있다. 뿐만 아니라 Apache Spark등의 빅데이터 처리엔진도 이미 Word2Vec을 지원하고 있다.

Apache Spark MLlib Word2Vec 문서

물론 학습에 사용되는 문서의 양에 따라 학습에는 다소 시간이 필요하지만 텍스트 문장을 읽어 들이는 것 만으로도 동작 시키는 것 이 가능하기 때문에 매우 기초적인 프로그래밍 기술만 있으면 누구나 쉽게 사용이 가능하다.

 Word2Vec의 덕분에 자연어 기계학습 분야가 개발자들 사이에서 빠른 속도로 일반화 되어가고 있으며 연구자들로 부터도 막대한 논문들과 관련 오픈소스 라이브러리들이 쏟아져 나오고 있다. 그런데 정작 아이러니한 것은 Word2Vec의 계산 결과들이 어떻게 문맥적 의미들을 내포하게 되었는지 제대로 설명이 되지 않고 있다는 점 이다. 

무궁무진한 활용도

  Word2Vec는 간단한 사용법에 비해 터무니 없는 정확도를 제공함으로서 무궁무진한 활용이 기대되고 있다. 현재 많은 연구자들이 단어중심에서 문장이나, 영상, 이미지간의 백터 처리법으로 영역을 점차 확대시켜 나가고 있으며 이를 통해 분석결과의 정확도를 비약적으로 향상시켜 나갈 수 있을것으로 기대되고 있다.
 특히 문맥에 의한 의미파악이라는 특성은 지금까지도 상당한 난제로 손꼽히는 언어간 번역의 정확도를 높이는데 크게 기여할 수 있을것으로 예상된다. 

 모쪼록 이 글을 통해 보다 많은 개발자 들이 흥미를 가지고 한국어에 대한 의미있는 연구 결과들이 나오길 기대해 본다.

최신정보

Word2Vec 개발에 주도적인 역할을 담당한 Mikolov는 지난 8월 구글을 퇴사하고 페이스북으로 이적한 것으로 추정되며, 벡터 해석을 단어에서 구문까지 확장시킨 Paragraph2Vec의 구현에 주력하고 있다고 한다. Paragraph2Vec에 대한 논문은 현재 스텐포드 대학을 통해 공개되어 있으며 아래 URL에서 열람이 가능하다.



참고문헌