왜 자연어 처리는 어려울까?
음성 인식은 눈에 보이지 않는 신호를 다룹니다. 보이지도 않는 상황에서 노이즈와 신호를 가려내야 하는데, 소리의 특징상 노이즈와 신호는 더해져서 나타납니다. 게다가 샘플링 주기가 짧아서 데이터의 길이가 매우 깁니다. 어려울 것 같군요. 그렇다면 눈에 보이는 영상 처리 분야를 생각해보죠. 그런데 이미지 데이터는 눈에 보이긴 하지만 너무 크고 다양합니다. 심지어 내 눈에는 다 똑같은 색인데 사실 알고 보면 컴퓨터에겐 다른 색이라고 합니다. 그럼 애초에 불연속적인 단어들로 이루어져 있는 자연어 처리를 해볼까요? 그런데 자연어 처리는 쉬울까요? 세상에 쉬운 일은 없습니다. 자연어 처리도 다른 분야 못지않게 매우 어렵습니다. 그렇다면 어떠한 점들이 자연어 처리를 어렵게 만드는 것일까요?
사람은 언어를 통해 타인과 교류하고 의견과 지식을 전달합니다. 소리로 표현된 말을 나무나 석판, 종이에 적기 시작했고 사람의 지식은 본격적으로 축적되기 시작했습니다. 이처럼 언어는 사람의 생각과 지식을 내포합니다. 컴퓨터가 이러한 사람의 언어를 이해할 수 있다면 컴퓨터에도 우리의 지식과 의견을 전달할 수 있을 것입니다.
모호성
다음 문장을 한번 살펴볼까요? 어떤 회사의 한영 번역이 가장 정확한지 살펴보겠습니다.
안타깝게도 완벽한 번역은 없는 것 같습니다. ‘차’라는 뜻의 영문 단어가 세 개 등장했는데 모두 서로 다른 의미를 지닙니다(tea, car, kick, dumped). 일부는 표현을 빠뜨리기도 했고 일부 는 단어를 헷갈린 것 같습니다. 이처럼 단어의 중의성 때문에 문장을 해석하는 데 모호함이 생기기도 합니다. 또 다른 상황을 살펴보겠습니다.
이처럼 문장 내 정보의 부족으로 인한 모호성이 발생할 수 있습니다. 사람의 언어는 마치 생명체와 같아서 계속해서 진화합니다. 이때 언어는 그 효율성을 극대화하도록 발전했기 때문에, 최소한의 표현으로 최대한의 정보를 표현하려 합니다. 따라서 쉽고 뻔한 정보는 최대한 생략한 채 문장으로 표현하곤 합니다. 사람은 이렇게 생략된 정보로 생긴 구멍을 쉽게 메울 수 있지만, 컴퓨터의 경우에는 이러한 문제가 매우 어렵게 다가옵니다. 사실 첫 예제의 ‘차’도 주변 단어들의 문맥context을 보면 중의성을 해소할 수 있습니다.
다음 예제도 문장 내 정보의 부족이 일으킨 구조 해석의 문제입니다.
다양한 표현
예를 들어 개가 공중에 던져진 원반을 잡기 위해 잔디밭을 달려가는 사진이 있다고 해보겠습니다. 이 사진을 사람들에게 한 문장으로 묘사해달라고 한다면 다음 표와 같이 다양한 표현이 나올 것입니다.
하지만 알고 보면 다 같은 사진을 묘사하는 것이고, 그 안에 포함된 의미는 같다고 할 수 있겠지요. 이와 같이 문장의 표현 형식은 다양하고, 비슷한 의미의 단어들이 존재하기 때문에 다양한 표현의 문제가 존재합니다. 더구나 앞에서 지적한 것처럼 사람들이 이해하는 단어의 의미는 미묘하게 다를 수도 있습니다. 이 또한 더욱 문제의 어려움을 가중시킵니다.
불연속적 데이터
사실 이와 같은 데이터는 불연속적discrete인 데이터이므로 과거에는 비교적 처리가 쉬운 편이었 습니다. 하지만 딥러닝(인공 신경망)에 적용하려면 연속적인 값으로 바꾸어주어야 합니다. 자연어 처리에서는 알다시피 단어 임베딩이 그 역할을 훌륭하게 수행하고 있습니다. 하지만 애초에 연속적인 값이 아니었기 때문에 딥러닝에서 여러 가지 방법을 구현할 때 여전히 제약이 존재합니다.
| 차원의 저주 |
불연속적인 데이터이기 때문에 많은 종류의 데이터를 표현하려면 데이터 종류만큼의 엄청난 차원이 필요합니다. 즉, 각 단어를 불연속적인 심벌로 다룬 만큼, 어휘의 크기만큼의 차원이 있는 것이나 마찬가지였습니다. 이러한 희소성sparseness 문제를 해결하기 위해서 단어를 적절하게 분절segmentation하는 등 여러 가지로 노력해야 했습니다. 다행히 적절한 단어 임베딩을 통해 차원 축소dimension reduction를 하여 이 문제를 해결함으로써, 이제 이러한 문제는 예전보다 크게 다가오 진 않습니다. 추후 단어 임베딩에 관한 장에서 더 자세히 다루도록 하겠습니다.
| 노이즈와 정규화 |
모든 분야의 데이터에서 노이즈를 신호로부터 적절히 분리해내는 일은 매우 중요합니다. 그 과정에서 자칫 실수하면 데이터는 본래의 의미마저 잃어버릴 수도 있습니다. 이러한 관점에서 자연어 처리는 어려움이 존재합니다. 특히, 다른 종류의 데이터에 비해 데이터가 살짝 바뀌었을 때의 의미 변화가 훨씬 크기 때문입니다.
예를 들어 하나의 큰 이미지에서 딱 한 픽셀의 RGB 값 중 하나가 1 바뀐다고 해도 이미지 전 체의 시각적 의미에는 변화가 없을 것입니다. 하지만 단어는 불연속적인 심벌이기 때문에, 단어가 살짝만 바뀌어도 문장의 의미가 완전히 다르게 변할 수도 있습니다. 마찬가지로 띄어쓰기나 어순의 차이로 인한 정제normalization의 이슈도 큰 어려움이 될 수 있습니다. 이러한 어려움을 다루고 해결하는 방법을 이후 장에서 다루도록 하겠습니다.
김기현의 자연어 처리 딥러닝 캠프(파이토치 편) 자세히보기 ▼
이전 글 : 파이썬 날코딩으로 알고 짜는 딥러닝 - 회귀 분석 : 전복의 고리 수 추정 신경망
다음 글 : 토크노믹스란 무엇인가?
최신 콘텐츠