상세 컨텐츠

본문 제목

Bag Of Words

NLP

by LYShin 2022. 12. 26. 12:21

본문

- Bag Of Words는 과거부터 오랫동안 자연어처리 분야에서 사용된 방법입니다.

- 대표적으로 TF-IDF가 있습니다.

- 본 글에서는 Bag Of Words에 대해 간략히 소개합니다.

 

 

 

1. Word Embedding

 

구분 백오브워즈 언어모델 분포 가정
내용 어떤 단어가 많이 쓰였는가 단어가 어떤 순서로 쓰였는가 어떤 단어가 같이 쓰였는가
대표 통계량 TF-IDF   PMI
대표모델 Deep Averaging Network ELMo, GPT Word2Vec
예시 로맨스 소설: 사랑, 행복
스릴러 소설: 살인, 우울
'나는 학교에 __' 학교, 공부, 운전

Word Embedding의 방법은 3가지 가정을 따르는 방법론이 있습니다.

 

먼저 단어의 빈도를 기반으로 하면 백오브워즈 가정입니다. 로맨스 소설은 사랑, 행복 등의 단어가 가장 많이 사용될 것이고, 스릴러 소설은 살인, 우울 등의 단어를 많이 사용할 것입니다. 단어의 등장 빈도수를 기준으로 하여 단어의 임베딩 벡터를 만드는 것이 백오브워즈 가정입니다.

 

다음으로는 단어의 등장 순서를 고려할 수 있습니다. 앞의 나온 단어가 뒤에 나올 단어를 가장 잘 나타내는 빈도를 포함하고 있다고 가정하는 것입니다. 앞의 나온 단어를 통해 뒤에 나올 단어의 확률값을 부여하는 것이 언어모델입니다.

 

마지막으로 함께 등장한 단어들로 단어의 의미를 표현할 수 있습니다. 예를 들어, 학교, 공부, 운전이라는 단어가 있다고 하면 (학교, 공부)가 (학교, 운전) 보다 더 많이 사용될 것입니다. 따라서 학교와 공부는 유사한 의미를 포함하고 있다고 가정할 수 있습니다. 이를 분포 가정이라고 합니다.

 

 

 

2. Bag Of Words

 

BoW는 문법적인 정보나 단어의 등장 순서는 고려하지 않고 단어의 등장 빈도만을 고려한 임베딩 기법으로, 텍스트를 숫자로 표현할 수 있는 가장 심플한 형태입니다.

 

BoW를 만들기 위해서는 다음과 같은 과정이 필요합니다. 먼저 문서 내 등장한 단어로 단어 집합을 만듭니다. 다음으로 각 단어를 원-핫 벡터로 인코딩합니다. 텍스트 데이터 문서나 문장을 원-핫 벡터들의 합으로 나타낼 수 있게 됩니다.

 

예를 들어 'This is scary'라는 문장은 'This'와 'is', 그리고 'scary'라는 세 단어로 표현됩니다. 이를 원-핫 벡터로 표현하면 This = [1,0,0], is = [0,1,0], scary = [0,0,1]이 됩니다. 이 경우에는 어떤 단어든 벡터 간 거리는 \(\sqrt{2}\), 코사인 유사도는 0이 됩니다. 이후 각 단어에 대해 This는 1, is는 2, scary는 3으로 인덱스를 지정하여 [1,1,1]이라는 벡터로 나타낼 수 있게 됩니다. 

 

 

3. TF-IDF

이와 같은 BoW를 기반으로 만들어진 것이 TF-IDF입니다. 위키피디아에서는 하나의 단어가 전체 corpus 중 어떤 document에서 얼마나 중요한지를 나타내는 통계적인 수치라고 설명하고 있습니다.

 

예를 들어 11개의 단어와 3개의 문서 행렬이 있다고 하겠습니다. 이 행렬에서 \(A[w_i,d_j]\)가 의미하는 것은 i번째 단어가 j번째 문서에서 등장한 횟수를 의미합니다. A[3,2]는 'is'라는 단어가 Review2에서 2번 등장한 것을 의미합니다. 이제 Term Frequency와 Document Frequency를 구할 수 있습니다.

 

Term Frequency는 특정 단어가 전체 문장에서 몇 번 등장했는지를 의미합니다. 따라서 \(TF(is) = 4\), \(TF(good) = 1\)가 됩니다. Document Frequency는 특정 단어가 몇 개의 문서에서 등장했는지를 의미합니다. 따라서 \(DF(is) = 3\), \(DF(good) = 1\)입니다.

 

마지막으로 TF와 DF를 사용하여 TF-IDF를 계산할 수 있습니다. TF-IDF의 계산식은 \(TF(w) * log({N\over{DF(w)}})\)입니다. 이때 N은 전체 문서의 개수를 의미합니다. 'is'에 대한 TF-IDF는 \(TF(is) * log({N\over{DF(is)}})\) = \(4 * log({3\over3}) = 0\)입니다. 'good'에 대한 TF-IDF는 \(TF(good) * log({N\over{DF(good)}})\) = \(1 * log({3\over1}) = log3\)입니다.

 

따라서 'good'이 'is'보다 문서 내에서 더 중요한 단어라는 것을 알 수 있습니다.

 

 

'NLP' 카테고리의 다른 글

LSTM 연습  (0) 2023.01.01
Word2Vec Practice  (0) 2022.12.27
Word Embedding  (1) 2022.12.27
Topic Modeling Practice  (1) 2022.12.26
About NLP  (0) 2022.12.23

관련글 더보기

댓글 영역