본문 바로가기

딥러닝/[딥 러닝을 이용한 자연어 처리 입문]딥러닝

Bag of Words(BoW)

단어의 등장 순서를 고려하지 않는 빈도수 기반의 단어 표현 방법인 Bag of Words

 

1. Bag of Words란?

 

가방안의 단어들! 즉 순서 고려 안하고 오직 빈도만 고려한다.

 

Bag of Words란 단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법입니다.

 

(1)단어 집합 생성 : 각 단어에 고유한 정수 인덱스를 부여합니다. 

(2)각 인덱스의 위치에 단어 토큰의 등장 횟수를 기록한 벡터를 만듭니다.

 

만약, 한국어에서 불용어에 해당되는 조사들 또한 제거한다면 더 정제된 BoW를 만들 수도 있습니다.

 

2. Bag of Words의 다른 예제들

BoW는 각 단어가 등장한 횟수를 수치화하는 텍스트 표현 방법이므로 주로 어떤 단어가 얼마나 등장했는지를 기준으로 문서가 어떤 성격의 문서인지를 판단하는 작업에 쓰입니다.

즉, 분류 문제나 여러 문서 간의 유사도를 구하는 문제에 주로 쓰입니다.

 

3. CountVectorizer 클래스로 BoW 만들기

 

사이킷 런에서는 단어의 빈도를 Count하여 Vector로 만드는 CountVectorizer 클래스를 지원합니다.

영어에서는 길이가 짧은 문자를 제거하는 것 또한 전처리 작업으로 고려되기도 합니다.

주의할 것은 CountVectorizer는 단지 띄어쓰기만을 기준으로 단어를 자르는 낮은 수준의 토큰화를 진행하는 것.

한국어에 CountVectorizer를 적용하면, 조사 등의 이유로 제대로 BoW가 만들어지지 않음

 

4. 불용어를 제거한 BoW 만들기

 

불용어는 자연어 처리에서 별로 의미를 갖지 않는 단어들

BoW를 사용함으로서 각 단어에 대한 빈도수를 수치화하고 텍스트 내에서 중요한 단어들 확인

(1) 사용자가 직접 정의한 불용어 사용

(2) CountVectorizer에서 제공하는 자체 불용어 사용

(3) NLTK에서 지원하는 불용어 사용