NLP/AI/Statistics

Word Representation: Bag-of-Words 본문

NLP

Word Representation: Bag-of-Words

Danbi Cho 2020. 10. 12. 21:46

텍스트는 비구조화된 형식의 데이터이다. 

 

비구조화된 형식의 텍스트 데이터를 처리하기 위한 연구가 진행되었으며,

 

앞서 설명했던 n-gram 도 텍스트를 처리하기 위한 방법으로 사용된다.

 

각각의 토큰 단위로 표현되는 텍스트를 수치화된 데이터로 변환하기 위한 방법(embedding)으로  Bag-of-Words를 소개하고자 한다.

 

Bag-of-Words는 단어의 순서를 고려하지 않고 빈도수 기반으로 단어를 표현하는 frequency representation 방법이다.

 

즉, 특정 문서 내에 특정 단어가 몇번 등장했는가를 고려하여 수치로 표현한다.

 

예를 들어,

 

1) 나는 바나나를 좋아해 그리고 너는 바나나를 좋아해

2) 너는 포도를 좋아해 그리고 너는 딸기를 싫어해

 

두 문장의 vocabulary는 ['나는', '바나나를', '좋아해', '그리고', '너는', '포도를', '딸기를', '싫어해']이다.

 

그리고 vocabular에 따라 아래의 표와 같이 빈도 수를 나타낸다.

  나는 바나나를 좋아해 그리고 너는  포도를 딸기를 싫어해
1번 문장 1 2 2 1 1 0 0 0
2번 문장 0 0 1 1 2 1 1 1

(#. 예시의 경우 '단어' 토큰 단위로 설명한다.)

 

Bag-of-Words와 같이 빈도 기반이 아닌 binary 표현으로도 텍스트 데이터를 수치화시킬 수 있다.

 

  나는 바나나를 좋아해 그리고 너는  포도를 딸기를 싫어해
1번 문장 1 1 1 1 1 0 0 0
2번 문장 0 0 1 1 1 1 1 1

즉, 특정 단어가 해당 문장에 속하는지 아닌지만을 0과 1로 구별하여 나타낸다.

 

하지만 이러한 binary representation 방법은 단어의 존재 여부만을 나타내기 때문에

 

문장 내 단어의 중요도를 나타내기 어려우며 수의 범위가 좁다.

 

이러한 문제를 보완한 방법으로 제안된 방법이 Bag-of-Words 이며, 

 

Bag-of-Words를 통해 텍스트를 수치화된 벡터로 표현할 경우,

 

단어의 빈도를 추론하여 문장 내 단어의 중요도를 표현할 수 있으며 수의 범위를 넓혀주는 장점이 있다.

 

하지만 이러한 Bag-of-Words는 순서를 고려하지 않으며, 여러 문장을 처리할 경우 희소한 특성을 보이는 단점이 존재한다.

 

Bag-of-Words는 순서를 고려하지 않기 때문에 앞의 예시 2)번 문장 "너는 포도를 좋아해 그리고 너는 딸기를 싫어해"은

 

"너는 포도를 싫어해 그리고 너는 딸기를 좋아해"와 Bag-of-Words가 나타내는 벡터값이 동일하게 나타난다.

 

이처럼 상반되는 의미의 문장이지만 각 단어 단위의 빈도 수가 동일하기 때문에 동일한 벡터로 표현되는 문제가 있다.

 

또한, 희소(sparse)한 특성을 보인다.

 

여러 문장에 대하여 처리할 경우, 특정 문장 내에 나타나지 않은 단어들로 vocabulary가 구성될 가능성이 높아진다.

 

그렇기 때문에 특정한 하나의 문장 내에서 나타나지 않은 나머지 단어들에 대한 빈도 수는 0으로 처리되기 때문에

 

불필요하게 벡터의 차원이 커지고 희소한 특성을 나타내게 된다.

 

예를 들어, 

 

1) 나는 바나나를 좋아해

2) 나는 포도를 좋아해

3) 나는 딸기를 좋아해

4) 나는 귤을 좋아해

 

일 때, 1)번 문장은 [포도를, 딸기를, 귤을]이라는 단어를 포함하지 않기 때문에

 

세 가지 단어에 대한 빈도가 0인 값을 벡터에 포함하게 되는 한계가 있다.

 

이러한 빈도 기반의 임베딩 방법의 한계를 해결하기 위해

 

순서 뿐만 아니라 주변 문맥 정보를 학습하고 차원을 축소시킬 수 있는

예측 기반의 임베딩 방법론(word2vec, glove, fasttext) 등이 개발되었다.

 

이에 대해서는 추후에 설명할 예정이다.

Comments