brunch

You can make anything
by writing

C.S.Lewis

by 라인하트 Jun 15. 2021

오렌지로 배우는텍스트 마이닝(2/6) :텍스트클러스터링

텍스트 마이닝을 위한 단어 표현하기

   텍스트 마이닝은 컴퓨터가 분석을 할 수 있도록 문자를 숫자로 바꿔야 합니다. 문자를 숫자로 바꾸는 기법에는 백 오브 워즈(Bag of Words), 토픽 모델링(Topic Modeling), 워드 임베딩 (Word Embedding) 등이 있습니다. 


   단어를 표현하는 방법은 크게 이산 표현(Discrete Representation)과 연속표현 (Continuous Representation)으로 나뉩니다. 이산 표현은 국소 표현(Local Representation)이라고도 부르며 각 단어에 숫자를 맵핑하고 단어 수준에서 분석합니다. 반대로 연속 표현은 분산 표현(Distributed Representation)이라 부르며 단어의 주변 단어를 함께 고려하여 단어의 뉘앙스까지 표현합니다. 


   예를 들면, good boy 라는 단어가 있을 때 이산 표현은 good 은 1, boy는 2 라는 숫자를 매핑하고 단어 단위로 부석하지만, 연속 표현은 boy 와 good이 함께 자주 등장한다는 것을 파악하고 boy라는 명사에 good이라는 뉘앙스를 부여합니다. 


   이산 표현은 one-hot Vector, N-gram, Bag of Words 등의 기법을 사용하고, 연소 표현은 Word2Vec, LSA, Glove 등의 기법을 사용합니다. 


Bag of Words 

   Bag of Words는 단어의 순서를 고려하지 않고 단어의 출현 빈도를 수치화하는 기법입니다. Bag of Words는 의미그대로 가방으로 자주 표현합니다. 가방에 단어가 순서와 상관없이 들어 있을 뿐이고 같은 단어가 몇 개가 있는 지만을 계산합니다. BoW는 의미를 제대로 파악하지 못하는  단점이지만 단순하기 때문에 많이 활용합니다. BoW는 각 단어에 정수를 부여하여 인덱싱하고 단어의 인덱스 위치에 출현 빈도를 기록합니다. 


   예를 들어, 오렌지 프로그램에 다음 문서를 입력하고 BoW가 어떻게 측정하는 지를 살펴봅니다. 


     LG TV는 좋다

     LG TV는 가격이 저렴하다

     LG TV는 성능이 좋다

    삼성 TV는 가격이 비싸다

    삼성 TV는 성능이 아주 좋다


문서 단어 행렬 (DTM)

   문서 단어 행렬 (DTM, Document-Term Matrix)은 다수의 문서에 출현하는 단어들의 빈도를 행렬로 표시합니다. 각 문서에 대한 Bag of Words를 하나의 행렬로 정리한 것입니다. 위에서 다룬 5개의 문장 또는 문서를 단어별로  출현 빈도를 다음과 같이 정리합니다. 


             LG     삼성     TV   좋다   가격   저렴   성능 비싸다 아주

문서 1    1        0          1     1          0      0         0       0         0

문서 2    1        0          1     0          1       1        0       0          0

문서 3     1       0          1     1          0       0        1       0          0

문서 4      0      1          1      0         1        0       0       1          0

문서 5       0     1           1     1         0        0        1     0           1


    만일 한 문서에 한 단어가 여러번 출현한다면 빈도 수 만큼 2 또는 3 등의 숫자로 표기합니다. 

DTM은 매우 간단하고 구현하기 쉽지만 몇 가지 한계가 있습니다. 


    만일 문서가 매우 방대할 경우 수십만 또는 수백만 차원의 행렬이 만들어지지만, 대부분의 행렬 성분은 0으로 채워질 것입니다. 문서를 표현하는 벡터 또는 행렬 성분이 대부분 0일 때 희소 벡터 (sparse vector) 또는  희소 행렬 (sparse matrix)라고 합니다. 데이터 전처리는 차원을 획기적으로 줄일 수 있습니다. 


   또한, 각 문서에는 중요한 단어와 의미없는 단어가 혼재되어 있고, 두 문서에서 동일한 단어가  빈도수가 높다고 비슷한 문서라고 할 수 없습니다. 예를 들면, "the" 또는"are"와 같은 단어는 모든 문서에서 높은 출현 빈도를 나타내지만, 두 문서를 유사하다고 판단할 근거가 되지 못합니다. 


단어 빈도- 역문서 빈도 (TF-IDF)

    TF-IDF (Term Frequency- Inverse Document Frequency)는 단어의 출현 빈도와 역 문서 빈도를 활용하여 단어의 중요도를 가중치로 나타내는 기법입니다. 문서 단어 행렬을 생성한 후  TF-IDF 가중치를 부여합니다. 


    수학적으로 정리하면, 특정 단어가 특정 문서에 출현한 빈도를 TF(Term Frequency)라 하고, 특정 단어가 출현한 문서의 수를 DF라고 합니다. DF (Document Frequency)는 각 문서에 몇 번 나타났는 지는 상관하지 않습니다. 예를 들면, 문서 1에서 '고양이' 단어가 100번 등장하면 문서 1의 TF = 100 이고, 문서 2에서 '고양이' 단어가 200번 등장하면 문서 2의 TF = 200 이고, 문서 3는 전혀 등장하지 않습니다. 이 때 '고양이' 단어의 DF  = 2입니다. 


    각 문서에서 IDF를 구하는 공식은 log(n / (1 + DF))입니다. Inverse라는 의미에서 DF의 역수를 취한다는 것을 감지할 수 있습니다. 분모에 1을 더하는 이유는 분모가 0되는 것을 막아야 계산할 수 있기 때문입니다. 로그(log)는 문서의 수가 기하급수적으로 증가하더라도 IDF 값이 기하급수적으로 커지거나 작아지는 것을 방지하기 위해 값을 로그스케일로 바꾸어줍니다. 그리고, 분자 n은 총 문서의 수입니다.  


   LG TV와 삼성 TV에 대한 문서들에서 각 단어 별 IDF 값을 구합니다. 

 

             LG     삼성     TV   좋다   가격   저렴   성능 비싸다 아주

문서 1    1        0          1     1          0      0         0       0         0

문서 2    1        0          1     0          1       1        0       0          0

문서 3     1       0          1     1          0       0        1       0          0

문서 4      0      1          1      0         1        0       0       1          0

문서 5      0      1           1     1         0        0        1      0           1

DF           3       2          5      3         2        1       2       1           1  

IDF      0.22   0.51   -0.18  0.51    0.51  0.91 0.51  0.91   0.91


   문서 단어 행렬 (DTM)에서 출현 빈도로 단어를 표현했지만,  TF- IDF에서는 단어들의 가중치에 따라 행렬을 나타낼 수 있습니다. TF-IDF 행렬에서 행렬 성분은 단어의 출현빈도수 X 가중치입니다. 


             LG     삼성      TV   좋다    가격   저렴   성능 비싸다 아주

문서 1    0.22     0     -0.18  0.51     0       0         0       0         0

문서 2    0.22     0     -0.18    0       0.51  0.91     0       0          0

문서 3    0.22     0     -0.18   0.51     0       0       0.5     0          0

문서 4      0      0.51  -0.18     0      0.51    0         0     0.91       0

문서 5      0      0.51  -0.18   0.51      0    0.91     0.51  0        0.91


실습 오렌지 프로그램에서 텍스트 마이닝 점검하기





   단어의 출현 빈도에 따라 워드에 따라 워드 클라우드로 볼 수 있습니다. 


   Bag of Words 위젯은 각 문장에서 각 단어의 빈도수를 나타냅니다. 




2. 텍스트 클러스터링 (텍스트 계층 군집화 분석)



    행렬 구조에서 알 수 있는 것은 단어 간 상관관계와 유사도를 계산할 수 있습니다. 즉, 특정 단어들 간의 거리가 멀다 또는 유사도가 낮다, 특정 단어 간의 거리가 가깝다 또는 유사도가 높다. 거리를 계산하는 방법은 두 가지가 있습니다. 


              문장 1             문장 2            문장 3           문장 4         문장 5

LG             1                    1                   1                     0                  0

삼성          0                    0                    0                     1                 1


    유클리드 거리 계산 :  √((1-0)^2 + (1-0)^2+  (1-0)^2+ (0-1)^2 + (0-1)^2) =  √(5)

    맨해튼 거리 계산 : |1-0| +|1-0|+|1-0|+ |0-1| + |0-1| = 5


    따라서, LG와 삼성은 상관관계가 멀고 유사도는 낮습니다. 이런 유사도를 분석하면 계층적 군집화 분석 (Hierarchical Clustering)이 가능합니다.  Distance 위젯은 상관관계를 계산합니다. 아래는 단어와 단어 간의 상관관계를 유클리드 기법으로 계산하여 계층적 군집 분석을 하였습니다. 



아래는 단어와 단어 간의 상관관계를 맨해튼 기법으로 계산하여 계층적 군집 분석을 하였습니다. 


아래는 단어와 단어 간의 상관관계를 코사인(코싸인) 기법으로 계산하여 계층적 군집 분석을 하였습니다. 가장 일반적인 분석 기법입니다. 


아래 그림에서 문장과 문장 간의 상관관계를 계산하여 계층적 군집 분석을 하였습니다. 



마지막으로 Corpus Viewer로 단어와 문장 간의 빈도를 행렬로 어떻게 나타내는 지를 알 수 있습니다. 





3. 복잡한 Bag of Words 분석하기


1. 캔버스에서 기본구조  그리기

      왼쪽의 Text Mining 탭에서 코퍼스, 텍스트 전처리, 워드 클라우드를 배치합니다. 지난번에 텍스트 전처리에서 작업한 내용을 포함합니다.  Bag of Words 위젯을 전처리 데이터와 연결하고 Data Table 위젯으로 내용을 확인합니다. Bag of Words는 각 단어별로 빈도수를 측정하여 표시합니다. 



2. Distance 분석

   문서와 문서 간의 유사도와 상관관계를 계층 클러스터링으로 분석합니다. Distance 위젯으로 거리를 계산합니다.   거리를 계산하는 방식은 코사인 기법을 선택하였습니다. 



    Animal Tales는 동물이 많이 나오는 우화이고, Tales of  Magic은 용이나 공주가 많이 나오는 우화입니다. 주석 (Annocations) 타입을 Title로 변경합니다. 유사한 이야기끼리 묶였는지 아닌지를 살펴볼 수 있습니다. 





지난 글 보기



오렌지 프로그램 다운로드



매거진의 이전글 Jamovi 의 이해 : 3. t 검증
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari