Technological Deep Dive

How to Get into the Tech

Data Science Basic/Text Analytics

[TA] #2 문장과 문서는 어떻게 숫자로 표현할 수 있을까? - BoW, DTM, TF-iDF

mju-bilab 2024. 11. 30. 01:36

* This content is based on the article written by Ji Ho Park and Gichang Lee

* This content is based on the lecture content of Prof. Pilsung Kang


요약

1. 단어를 표현하는 방법은 크게 국소 표현과 분산 표현으로 나눌 수 있으며, 빈도 기반 표현은 국소 표현에 해당합니다.
2. 주제 분류 혹은 문서 검색과 같은 작업에서는 단어의 순서가 중요하지 않습니다. 
3. 희소 표현은 많은 저장 공간과 높은 계산 복잡도를 요구합니다. 
4. TF-iDF는 단어의 중요도를 고려한 단어 표현 방법으로 문서 검색에서 좋은 성능을 보입니다. 

 

본 포스팅에서는 단어의 집합인 문장과 문서를 숫자로 표현하는 가장 간단한 방법을 알아보고자 합니다.


단어의 나열 순서는 글을 이해하는데 중요할까?

문자(character) → 음절(syllable) → 단어(word) → 문장(sentenct) → 문단(paragraph) → 문서(document)

 

우리는 지난 포스팅에서 단어가 모여 문장이 되고, 문장이 모여 문단을 이루고, 문단이 모여 문서가 됨을 배웠습니다. 단어는 어떻게 표현할 수 있을까요? 단어의 표현 방법은 크게 국소 표현(Local Representation) 방법과 분산 표현(Distributed Representation) 방법으로 나뉩니다. 국소 표현(Local Representation) 방법은 해당 단어 그 자체만 보고, 특정값을 맵핑하여 단어를 표현하는 방법이며, 분산 표현(Distributed Representation) 방법은 그 단어를 표현하고자 주변을 참고하여 단어를 표현하는 방법입니다. 

 

단어 표현 방법의 종류 (types of word represenation)

  • Frequency-based embedding: Bog-of-Words, TF-iDF, Co-occurrence matrix
    • 주어진 코퍼스에서 단어의 발생 빈도와 동시 발생 빈도를 기반으로 단어를 표현
    • 텍스트의 통계적 속성으로부터 단어 표현
  • Prediction-based word embedding:  Word2Vec, Glove, FastText
    • 단어가 나타나는 맥락을 에측하여 단어 표현
    • 대규모 코퍼스에서 단어 사용 패턴을 기반으로 단어 간의 의미 관계를 포착하여 단어 벡터를 학습
  • Contextualized word embedding: ELMO, BERT, GPT, T5, ...
    • NLP에서 상당한 진전을 이룬 단어 표현 방식으로, 더 나은 정확도로 문맥에 대한 이해
    • 다양한 NLP task에서 뛰어는 성능을 발휘 

단어 우월 효과 (word superiority effect)

사람이 단어를 인식할 때 개별 문자의 집합으로 인식하는 게 아닌 단어의 총체적 이미지로 인식하는 효과
캠릿브지 대학의 연결구과에 따르면, 한 단어 안에서 글자가 어떤 순서로 배되열어 있지는 중요하지 않고, 첫 번째와 마지막 글자가 올바른 위치에 있는 것이 중다요하고 한다. 나머지 글들자은 완전히 엉진망창의 순서로 되어 있라을지도 당신은 아무 문제 없이 이것을 읽을 수 있다. 왜하냐면, 인간의 두뇌는 모든 글자를 하하나나 읽는 것이 아니라 단어 하나를 전체로 인하식기 때이문다.

 

위 내용은 워낙 유명해서 많이 접해보셨으리라 생각합니다. 글을 읽고 이해하는 데 어려움이 있으셨나요? 아마도 전혀 문제 없이 읽어 내려가셨을 겁니다. 이와 같이 첫 글자와 마지막 글자를 그대로 둔 채 가운데 글자만 순서를 바꾸는 애너그램은 '개별 문자를 인식함으로써 단어를 인식'한다고 생각해왔던 단어 인식에 큰 변화를 가져왔습니다. 문자의 순서가 단어를 인식하고 이해하는데 크게 영향을 미치지 않음을 볼 수 있습니다. 

 

그렇다면, 단어의 순서는 문장을 읽고 이해하는 데 중요할까요? 다음의 문장을 살펴보도록 하겠습니다. 

(1) 자동차의 범주입니다 자율 주행 자동차는 전체가 무인으로 운전 기능의 일부 또는 이루어지는
(2) 인공지능은 수행할 수 있게 해주는 기술입니다 이미지 분석 및 음성 인식과 같은 생성 분류 태스크를
(3) 비즈니스 인텔리전스 명지대 자연어 학생들은 참여를 프로젝트 통해 연구실 경험을 다양한 합니다

 

(1) 자율 주행 자동차는 운전 기능의 일부 또는 전체가 무인으로 이루어지는 자동차의 범주입니다. 

(2) 인공지능은 이미지 분석 및 음성 인식과 같은 태스크를 생성, 분류, 수행할 수 있게 해주는 기술입니다. 

(3) 명지대 비즈니스 인텔리전스 연구실 학생들은 프로젝트 참여를 통해 다양한 경험을 합니다. 

 

위 세 가지 문장을 보고 제대로 이해할 수 있었나요? 문장을 읽으면서 아래와 같이 올바른 문장으로 의미를 해석할 수 없었을 겁니다. 

문장을 이해함에 있어서 단어의 순서는 매우 중요합니다. 단어의 순서에 따라 문장의 구조가 달라지고 이는 곧 전달하는 의미가 달라지는 경우가 많기 때문입니다.

 

하지만 모든 텍스트 분석에서 문장이 전달하는 의미를 온전히 이해할 필요는 없습니다. 우리는 첫 번째 문장을 보고 자율 주행 자동차와 관련된 내용이구나, 두 번째 문장을 보고 인공지능과 관련된 내용이구나, 세 번째 문장을 보고 명지대 연구실에 대한 이야기를 하는구나 하고 '문장이 다루고 있는 주제(topic)'를 파악할 수 있었을 겁니다. 해결하고자 하는 문제와 상황에 따라 문장을 표현 하는 방법이 달라질 수 있습니다. 이번 포스팅에서는 텍스트를 분석하는 과정에 순서가 상관 없는 경우, 어떻게 표현할 수 있는지에 대해 알아보려고 합니다. 앞서 단어 표현 방식의 분류 중 '국소 표현에 속하는 빈도 기반 표현'에 해당합니다. 

 

Bag-of-Words (BoW): 단어들의 가방

Bag-of-Words는 텍스트 문서를 수치 벡터로 표현하기 위한 가장 간단한 기술로 지난 포스팅에서 학습한 원-핫 인코딩의 확장입니다. 각 문서를 단어의 가방으로 취급하여, 문서에서 각 단어가 출현한 빈도(frequency)를 표현합니다. 

Bag-of-Words (source: stanford)

앞서 설명한 바와 같이 BoW는 단어의 순서를 고려하지 않습니다. 하나의 vector로 문서를 설명하기 때문입니다. 문서에 등장한 모든 단어를 하나의 큰 가방에 넣으면 순서를 알 수 없이 섞여버립니다. 이로 인해 맥락을 이해하기 어렵다는 치명적인 단점이 발생합니다. 

How Bag-of-Words works?
1. Tokenization: Split the text into individual words or tokens
2. Vocabulary Creation: Create a list of all unique words (vocabulary) from the text corpus
3. Vectorization: Convert each document into a vector of numbers where each number represents the count (or frequency) of a word in the document

Document-Term matrix (DTM): 문서-단어 행렬

문서-단어 행렬은 다수의 문서에서 등장하는 각 단어들의 빈도를 행렬로 표현합니다. 서로 다른 문서들의 BoW들을 하나의 행렬에 통합한 표현 방법이라 할 수 있습니다. 이는 서로 다른 문서들을 비교할 수 있도록 합니다. 

Term-Document matrix (TDM) 예시

DTM은 매우 직관적이고 구현하기 쉽지만, 본질적으로 희소 표현이라는 한계를 지닙니다. 
희소 표현(Sparse represenation)이란?
지난 원-핫 인코딩에서 단어 집합의 크기가 벡터의 차원이 되고 대부분의 값이 0이 되는 것을 기억할 겁니다. 이는 공간적 낭비와 계산 리소스가 급격하게 증가할 수 있다는 단점을 가지고 있습니다. Bag-of-Words (BoW)는 원-핫 인코딩의 확장이고 다시, DTM은 BoW의 통합이기 때문에 마찬가지로 동일한 단점을 가지게 됩니다. 만약 가지고 있는 텍스트 코퍼스가 방대한 양이라면 문서 벡터의 차원과 단어 벡터의 차원은 상상할 수 없을 정도로 커질 수 있습니다. 이로 인해 하나의 문서를 표현하는 벡터에는 대부분의 값이 0을 가지는 즉, 출현 빈도가 0인 단어의 수가 많을 수밖에 없습니다. 
원-핫 인코딩, Bag-of-Words, DTM과 같이 0이 아닌 값보다 0의 값을 더 많이 갖는 경우 희소 벡터(sparse vector) 또는 희소 행렬(sparse matrix)라고 부릅니다. 이러한 희소 표현(sparse representation)은 많은 양의 저장 공간과 높은 계산 복잡도를 요구합니다. 

Sparse Matrix 예시 (source: Pranjal Srivastava)

Term Frequency-inverse Document Frequency (TF-iDF): 단어 빈도-역 문서 빈도

여러 문서에 등장하는 모든 단어에 대해서 빈도를 기반으로 표현하는 것은 매우 간단하지만 문서간 비교를 하는 과정에서 다음과 같은 문제를 발생시킵니다. 축구와 관련된 코퍼스를 대상으로 DTM을 생성하였을 때, '축구'라는 단어는 어느 문서에서든 자주 등장할 수 밖에 없습니다. 이러한 경우 '축구'라는 단어는 문서 간 유사도를 측정하는 기준으로 활용해서는 안됩니다. 각 문서에는 중요한 단어와 불필요한 단어들이 혼재되어 있습니다. 따라서 문서를 대표할 수 있는 키워드가 존재하지 않을까? 불필요한 단어들은 작은 가중치를, 중요한 단어들에는 큰 가중치를 처리할 수 있지 않을까? 이러한 아이디어를 적용한 것이 바로 TF-iDF입니다. 

TF-iDF는 BoW를 개선한 것으로, 흔한 단어의 가중치를 줄이고 드문 단어의 가중치를 높여 단어의 중요성을 고려합니다. TF-iDF의 아이디어는 두 가지 요소를 고려하여 문서에서 단어의 중요성을 계산합니다. 
  1. Term Frequency (TF): 어떤 단어가 특정 문서에 얼마나 많이 쓰였는지 빈도를 나타냅니다. 많이 쓰인 단어가 중요하다는 가정을 전제로 한 수치입니다. 
  2. Inverse Document Frequency (iDF): Document Frequency란 특정 단어가 문서에 등장한 횟수를 의미합니다. DF가 클수록 다수 문서에 쓰이는 범용적인 단어라고 볼 수 있습니다. TF는 같은 단어라도 문서마다 다른 값을 가질 수 있지만, DF는 동이한 단어를 포함하는 문서의 수 이기 때문에 문서가 달라지더라도 동일한 값을 지니게 됩니다. 주의할 점은 우리는 inverse DF를 활용합니다. 전체 단어 수를 해당 단어의 DF로 나눈 뒤 로그를 취한 값으로 클수록 특이한 단어라고 볼 수 있습니다. 

TF-iDF는 어떤 단어가 얼마나 많이 쓰였는지, 그 단어가 다수의 문서가 아닌 특정 문서에서만 등장하는 특이성을 지니는지를 모두 반영한 수치로, 다음과 같이 정의합니다. 

$$ TF-iDF(w)=tf(w)\times log(\frac{N}{df(w)}) $$

문서가 3개, 단어가 5개 있는 코퍼스를 예로 들어보겠습니다. 문서 1의 TF, iDF, TF-iDF는 각각 아래와 같이 계산됩니다. 

 

위 표를 기준으로 할 때 Doc1을 구분하는 데 가장 중요한 역할을 하는 단어는 무엇일까요? 본 포스팅을 잘 이해하셨다면, 그 후보는 Term1과 Term2가 될 것입니다. 다른 Doc에는 등장하지 않고 Doc1에만 등장했기 때문입니다. 그런데 이 중에서도 Term1이 Term2보다 많이 쓰였기 때문에 Term1이 가장 중요한 단어라고 판단할 수 있습니다. 실제로 Doc1의 Term1에 해당하는 TF-iDF가 가장 높음을 확인할 수 있습니다. 그렇다면 반대로 모든 문서에 많이 등장한 Term3과 Term4는 어떨까요? 이들에 대응하는 TF-iDF 값은 0으로 Term3과 Term4는 모두 Doc1이라는 문서를 다른 문서들과 구분짓는 데 아무런 정보를 제공해주지 못함을 의미합니다. 

 

다음 포스팅에서는 단어 표현 방식을 바탕으로 문장, 문서들 간 유사도를 측정하는 방식에 대해 알아보도록 하겠습니다.