brunch

You can make anything
by writing

C.S.Lewis

by FameLee Feb 20. 2022

데이터 클러스터링, 이제 포스트잇이 아닌 코딩으로(2)

전처리 데이터를 벡터로 변환하기

목차  
1.  전처리, 그 이후는?
2.  벡터화 개념 뜯어보기. 
3. 직접 해보는 벡터화. 


전처리, 그 이후는?

 브런치에 지금까지 어떤 주제로 글을 써왔는지 데이터로 분석하기 위해 (1) BeautifolSoup와 Selenium을 통해 각 글의 제목과 본문을 크롤링하고, (2) Konply로 분석에 적합한 단어만 남겨두는 전처리 과정을 끝냈다. 


 앞선 과정을 통해 분석할 단어로만 구성된 본문 데이터를 얻을 수 있었다. [본문] 칼럼은 크롤링을 통해 수집한 본문이고, [가공 본문]은 전처리를 완료한 본문이다. 이제 이 전처리 데이터로 무엇을 해야 할까? 


 이번 분석의 목표는 "어떤 주제로 글을 써왔는가?"를 알아내는 것이다. 동일한 주제를 다루는 글도 있을 것이고, 그렇지 않은 글도 있을 것이다. 따라서, 각각의 글을 분석해 클러스터링을 진행하고, 각 클러스터별 주제를 파악하면 된다.


  비록 데이터 전처리를 완료했지만, 곧바로 클러스터링을 진행할 수 없다. 그 전에 먼저 벡터화를 진행해야 한다. 데이터 전처리를 완료했는데 왜 클러스터링을 하지 않을까? 벡터화는 왜 필요할까? 이번 글에선 벡터화에 대해 알아보자

 



벡터화 개념 뜯어보기

1. 벡터화? 왜 하는거지?

 벡터화는 데이터를 벡터 형식으로 바꿔주는 작업이다. 벡터화를 진행하는 이유는 컴퓨터가 전처리 데이터를 인식하지 못하기 때문이다. 전처리 데이터는 원문 데이터에서 필요한 단어만 필터링했을 뿐, 여전히 정성 데이터 형식을 갖는다. 컴퓨터는 정성 데이터를 이해할 수 없으므로, 이해 가능한 벡터 형식으로 바꿔줘야 한다. 



2. TF 벡터화

 벡터화를 통해 변환된 데이터는 어떤 형식일까? 이는 클러스터링 방법과 밀접해있다. 클러스터링은 서로 다른 데이터 사이의 유사성을 판단해 동일 집단인지 아닌지를 판단하는 행위다. 이를 위해, 각 데이터가 어떤 정보를 갖고 있는지 파악해야 한다. 각각의 글은 핵심 키워드를 갖고 있다. 핵심 키워드는 글의 특징을 대표하므로, 이 키워드를 비교 분석해 쉽게 클러스터링을 진행할 수 있다. 비슷한 핵심 키워드를 갖는 글이라면, 동일 집단으로 볼 수 있다. 


 그렇다면 핵심 키워드는 어떻게 알아낼 수 있을까? 가장 간단하고 직관적인 방법은 빈도수에 있는데 글에서 자주 언급되는 단어일수록, 핵심 키워드일  확률이 높다. 우리는 앞선 전처리 과정을 통해 분석에 필요한 단어만으로 구성된 본문 데이터를 갖고 있다. 여기서 각 단어가 서로 다른 본문에서 얼마나 자주 등장하는지 볼 수 있다면, 핵심 키워드를 기준으로 클러스터링을 할 수 있다. 예를 들어, 특정 단어가 공통적으로  언급되는 글끼리 같은 클러스터에 속할 확률이 높다. 이와 같이 벡터화를 통해 변환된 데이터는 본문에서 각 단어의 빈도수를 보여준다.


 위와 같은 벡터화는 Term Frequnecy(이하, TF)를 활용한 방법이다. 이 방법은 "자주 언급되는 단어가 핵심 키워드다"를 전제로 한다. 하지만, 자주 언급되는 단어가 반드시 핵심 키워드가 아닐 수도 있다. 빈도 수가 높을수록, 글에서 중요한 단어일 수는 있지만 항상 그런 건 아니다. 가령, '우리', '필자' 같은 단어는 글의 특징을 보여주지 않지만, 내가 글을 쓸 때 습관적으로 쓰는 단어다. 따라서, 벡터화에서 단어의 빈도수뿐만 아니라, 단어가 글의 특징을 잘 대변하는지도 고민해야 한다.


3. TF-IDF 벡터화

 (1) 단어의 빈도수뿐만 아니라, (2) 글의 대변성까지 반영하는 벡터화는 Term Frequency-Inverse Document Frequency(이하, TF-IDF)를 활용한다. 이는 앞선 TF에 IDF를 곱해서 정성 데이터를 벡터 형식으로 바꾸는 방법이다. IDF는 특정 단어가 '현재 글'이 아닌, '다른 글'에서 얼마나 자주 등장하는지를 간접적으로 대변하는 수치다. 다른 글에서 등장하지 않은 단어일수록, 현재 글의 특징을 잘 대변하는 단어일 확률이 크다. IDF를 구하는 방식까지 다루면 글이 길어지니, 자세한 공식이 궁금하면 페이지 끝의 레퍼런스 링크를 참고하자!


직접 해보는 벡터화

  TF 벡터화, TF-IDF 벡터화 중에 자신의 목적에 맞는 방법을 사용하면 된다. 브런치에 쓴 글을 클러스터링해서 주제를 찾는 게 목표이고, 각각의 글은 특징이 명확하니 단어의 희소성을 고려하는 TF-IDF를 사용해보자. 벡터화는 파이썬의 기계 학습 라이브러리인, sklearn를 사용한다. sklearn 라이브러리에 있는 TFidfVectorizer를 이용해 전처리  데이터를 벡터화시킬 수 있다. 아래와 같이 코드를 입력하면, 각 글을 구성하는 단어 별 TF-IDF 값을 보여주는 벡터를 확인할 수 있다.


 참고로, TF 벡터화는 아래와 같은 코드를 사용한다.


 다음 글에는 이렇게 만든 벡터 값으로 클러스터링을 하고, 주제를 파악하는 방법을 다뤄볼 예정이다. 


레퍼런스


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari