마치며

5장에서는 단어의 의미에 대해서 살펴보고, 의미의 유사성이나 모호성을 다루어보았습니다. 단어는 겉의 불연속적인 형태와 달리 내부적으로는 불연속적이지 않은 '의미sense'를 가집니다. 따라서 우리는 단어의 겉모양이 다르더라도 의미가 유사할 수 있음을 알고 있습니다. 이렇게 의미가 유사한 단어들 간의 유사도를 계산할 수 있다면, 코퍼스로부터 분포나 특징들을 훈련할 때 더 많은 정보를 얻고 정확한 훈련을 할 수 있습니다. 예를 들어 꼭 소스source 단어가 아니더라도 해당 소스 단어와 유사한 단어들로부터 정보를 얻어올 수 있고, 그 정보를 소스 단어와 유사한 만큼만 사용하면 될 것입니다.

이러한 자연어 처리의 염원 아래, 사람이 직접 한 땀 한 땀 정성 들여 만든 워드넷이라는 사전 이 등장했고, 워드넷을 활용하여 단어 사이의 유사도(거리)를 계산할 수도 있게 되었습니다. 하 지만 워드넷과 같은 시소러스를 구축하기란 너무나도 엄청난 일이므로, 사전 없이 유사도를 구할 수 있으면 더 좋을 것입니다.

사전 없이 코퍼스만 가지고 특징을 추출하여 단어를 벡터로 만든다면, 워드넷의 정교한 지식은 이용할 수 없겠지만 훨씬 간단한 작업이 될 것입니다. 게다가 코퍼스의 크기가 커질수록 추출 된 특징들은 점차 정확해질 것이고, 특징 벡터도 더 정확해질 것입니다. 특징 벡터가 추출된 후에는 코사인 유사도나 L2 거리 등의 매트릭metric을 통해서 유사도를 계산할 수 있습니다.

하지만 앞서 보았듯이, 단어 사전 내의 단어의 수가 30,000~50,000개가 넘는 현실에서 이렇게 추출된 특징 벡터의 차원은 단어 사전의 크기와 맞먹습니다. 단어 대신 문서를 특징으로 사용하더라도 주어진 문서의 숫자만큼 벡터의 차원이 만들어질 것입니다. 벡터가 큰 문제는 차치하고라도, 더 큰 문제는 그 차원의 대부분 값이 0으로 채워진다는 것입니다. 즉, 각 차원에 숫자가 나타나는 경우는 0이 나타나는 경우에 비해서 현저히 적습니다. 따라서 이런 0으로 가득한 희소 벡터를 통해 무엇인가 배우고자 할 때 큰 장애로 작용합니다. 특히, 앞서 배운 코사인 유사도의 경우에는 직교한 경우가 생겨 코사인 유사도의 값을 0으로 만들기 쉽습니다. 즉, 정확한 유사도를 구하기 어렵습니다.

이러한 희소성 문제는 자연어 처리의 가장 큰 특징입니다. 단어는 불연속적인 심볼로 이루어지기 때문입니다. 전통적인 자연어 처리에서는 이러한 희소성 문제로 인해 정말 큰 어려움을 겪었습니다. 많은 분이 이미 잘 알고 있듯이, 요즘 딥러닝에서는 단어의 특징 벡터를 이런 희소 벡터로 만들기보다는 임베딩 기법을 통해 0이 잘 존재하지 않는 덴스dense 벡터로 만들어 사용합니다. 이런 차이점이 바로 딥러닝에서의 자연어 처리가 전통적인 방식의 자연어 처리에 비해 성능이 월등한 이유입니다. 앞으로 다룰 장에서는 딥러닝을 통해 이런 자연어 처리의 문제를 잘 해결하는 방법들을 소개해보고자 합니다.