이 방법은 단순히 컴퓨터가 문자를 인식하기 위한 값이기 때문에, 언어적인 특징이 전혀 담겨있지 않습니다. 그렇다면, 컴퓨터가 언어적인 의미가 담겨있는 자연어를 인식하기 위해서는 어떻게 해야할까요?
그 방법이 바로 단어 임베딩(language embedding)입니다. 단어 임베딩은 앞서 나온 자연어 처리의 다양한 분야들에 적용할 수 있게 언어적 특성을 반영하여 수치화 하는 것을 뜻합니다. 단어 임베딩 방법에도 굉장히 여러가지 방법이 있습니다. 가장 대표적인 3가지는 다음과 같습니다.
(1) 원 핫 인코딩(one-hot encoding)
원 핫 인코딩은 0 또는 1로 단어를 표현하는 방법입니다. 여기까지만 보면 아스키 코드와 뭐가다르냐 하실수도 있는데, 원 핫 인코딩의 크기는 단어의 수와 같으며, 해당 단어의 인덱스 값만 1입니다.
예를 들어 보겠습니다. 만약 [토끼, 거북이, 고양이, 개] 라는 단어 집합을 원 핫 인코딩으로 나타낸다고 하면, 아래와 같이 나타낼 수 있습니다.
· 토끼 = [1, 0, 0, 0]
· 거북이 = [0, 1, 0, 0]
· 고양이 = [0, 0, 1, 0]
· 개 = [0, 0, 0, 1]
위의 예를 보시면, 각 동물에 해당하는 인덱스 값만이 1인것을 확인할 수 있습니다. 이 방법은 매우 간단하기 때문에 이해하기가 쉽습니다. 하지만 이세상 단어 수는 셀 수 없이 굉장히 많습니다. 따라서 실제 단어 수만큼 표현하기가 어렵습니다. 단어가 몇억개라고 하면, 한 단어의 벡터 크기는 몇억이 되버리기 때문이죠. 그리고 단어 벡터 크기에 비해, 실제 사용하는 값은 해당 인덱스 값 1 단 하나입니다. 마지막으로, 원 핫 벡터는 단어 인덱스 값만 표현하기 때문에, 단순히 단어만을 표시할 수 있고, 의미 특성이 표현되지 않습니다.
(2) 카운트 기반 방법
카운트 기반의 방법은 특정 문맥의 단어들이 동시에 등장하는 횟수를 직접 세는 방법입니다. 동시에 등장하는 횟수를 co-occurrence라고 하고, 이를 하나의 행렬로 나타내고, 행렬을 수치화하여 단어 벡터로 만드는 방법을 사용하는 방식입니다. 아래와 같은 방법들이 있습니다.
· 특이값 분해(Singular Value Decomposition, SVD)
· 잠재적의미분석(Latent Semantic Analysis, LSA)
· Hyperspace analogue to Language(HAL)
· Hellinger PCA(Principal Component Analysis)
· Bag of Words(BoW)
이러한 방법들은 빠르고, 데이터가 많을 경우 잘 표현되고, 효율적입니다. 여기서는 BoW로 하나의 예를 들어보겠습니다. BoW는 단어의 순서는 고려하지 않고, 단어들의 출현 빈도에만 집중하는 텍스트 데이터의 수치화 표현 방법입니다. BoW는 각 단어에 대해 고유한 정수 인덱스를 부여해 주고, 각 인덱스의 위치에 단어 토큰의 등장 횟수를 기록한 벡터를 만듭니다.
문장 1: 작은 토끼 토끼통 옆에는 큰 토끼 토끼통이 있고 큰 토끼 토끼통 옆에는 작은 토끼 토끼통이 있다.
위와 같은 문장으로 BoW 방법을 적용해 보겠습니다. 먼저 각 단어들에 대해 고유한 정수 인덱스를 부여해 줍니다.