정보공간_1

[7기 신촌 박진상] 기계학습 #3 - 텍스트 마이닝 기초 분석법 본문

IT 놀이터/Elite Member Tech & Talk

[7기 신촌 박진상] 기계학습 #3 - 텍스트 마이닝 기초 분석법

알 수 없는 사용자 2015. 4. 14. 20:24

안녕하세요. 엘리트 7기 신촌 멤버십의 박진상입니다.

이번에 소개할 내용은 텍스트 마이닝의 기초 분석법입니다. 텍스트 마이닝은 데이터 마이닝 중에서도 가장 기본적인 단계라고 할 수 있습니다. 왜냐하면 데이터를 구하기가 상대적으로 쉽기 때문이죠. 그럼 이번 포스팅을 통해 텍스트 마이닝의 분석법 들을 알아보고, 실제로 데이터를 얻어서 가장 간단한 형태의 분석을 해보도록 하겠습니다.

먼저 텍스트 마이닝의 정의부터 간단하게 살펴보겠습니다. 텍스트 마이닝이란, 말그대로 텍스트 데이터로부터 의미있는 데이터를 추출하고 가공하는 전반적인 일 자체를 말합니다. , 무수히 많은 문서로부터 우리가 쓸 수 있는 데이터를 긁어오는 행위를 텍스트 마이닝이라고 합니다. “텍스트로부터 의미있는 데이터를 추출한다... “ 잘 감이 안옵니다. 텍스트에서 어떤 것이 의미가 있는지 어떻게 알 수 있을까요?

물론 마이닝의 목적에 따라 알고리즘과 모델은 바뀌게 될 것입니다. 포스팅에서는 그런 부분까지 전부 다루기에는 너무 방대하고 NLP(Natural Language Processing)의 내용을 설명해야 하기 때문에, 적용할 수 있게끔 만드는 분석법까지만 다루도록 하겠습니다. 가장 간단한 분석법은 텍스트를 일정 단위로 쪼개는 ngram 분석법입니다.

Ngram 분석법은 말그대로 전체 텍스트를 n 개씩 쪼개서 빈도수를 체크하는 방법입니다. 예를 들어 5 gram 분석을 했다고 한다면, 전체 텍스트를 5글자 단위로 쪼개서 빈도수를 체크하는 방법입니다. , 다음 문장에서는



와 같이 분석할 수 있게 됩니다. 간단하죠? 그럼 간단한 ngram 분석을 실제로 해보겠습니다. 먼저 분석할 텍스트 데이터를 구해야 합니다. 텍스트 데이터를 구하기 좋은 사이트를 알려드리겠습니다. 바로 구텐베르크 프로젝트(https://www.gutenberg.org/) , 이곳은 세월이 지나 저작권이 풀린 유명 도서들을 공짜 ebook 형태로 제공해주는 사이트입니다. 이 사이트에서 이상한 나라의 앨리스 ngram 분석해보도록 하겠습니다.


위의 그림은 구텐베르크 프로젝트 사이트에서 이상한 나라의 앨리스를 얻는 과정입니다. 간편하게 여러 텍스트 파일을 무료로 얻어볼 수 있습니다 :-)

이번 시간과 다음 시간의 텍스트 마이닝 예제 들은 Python을 이용하여 구현하도록 하겠습니다. 그 이유는 파이썬이 예제에 쓰일 Dictionary 타입을 기본으로 제공해주고 있기 때문에 그 부분에 좀 신경을 덜 써도 된다는 점, 그리고 파이썬이기 때문입니다. Ngram은 알고리즘이 단순하고 간단한만큼 구현 역시 간단합니다. 파일을 읽고, 해당 위치부터 n 글자 단위로 읽으면서, Dictionary에 저장하고, 만약 해당 n 글자가 저장되어있다면 빈도수를 증가시켜주면 됩니다. 코드를 보시면 금방 이해하실 겁니다.




소스는 어렵지 않습니다. fileio.py 파일에서는 파일읽고 쓰는 함수들을 제공하며, ngram.py 파일에서는 ngram 분석을 실행하고 결과를 반환합니다.

그렇다면 이제 이상한 나라의 앨리스를 분석해보도록 하겠습니다.



분석결과 5글자 단위로 자른 빈도수에 대해 분석이 되었습니다. 하지만, 분석은 되었는데 별로 맘에 안 드는 결과가 나옵니다. 왜일까요? 그렇습니다. 그냥 단순히 글자 단위로 자른 것일 뿐이기 때문입니다. 공백이나 The, 조사와 같은 단어들이 가장 많이 나올 뿐, 이 데이터는 이 자체로 의미있지 않습니다.

Ngram은 가장 단순한 형태의 분석법인 만큼 대부분의 경우 만약 이 분석을 사용하게 된다면, 결과를 가공할 필요가 있습니다. 단어 추출(Extraction)을 위해 사용하는 가장 대표적인 다음 방법은 불용어(Stopwords)를 제거하는 일입니다. 불용어란, 의미가 없이 사용되는 조사나 연결사와 같은 단어들을 말합니다. 가장 많이 나온 단어들인 The, and, she 같은 것들이 포함되어있습니다. 불용어는 학회 등을 통해 인터넷에 많이 공개되어 있습니다.



불용어 사전에 등장한 단어들을 필터링하게 된다면, 좀 더 의미있는 키워드 들을 얻게 될 가능성이 큽니다. :-) 

하지만, 불용어 사전은 많은 사람들의 노력으로 잘 구축되어있음에도 불구하고, 직접 구문을 관리해줘야 하는 단점이 있습니다. 또한 우리가 구현한 ngram 자체도 좀 스마트하지 않은 것 같은 꺼림칙함이 있습니다. 이 분석법보다 더 스마트한 방법은 없을까요?

텍스트에서 의미있는 키워드를 분석하기 위한 대표적인 방법으로 TF-IDF 분석법이라는 것이 있습니다. 어떤 알고리즘인지 살펴보도록 하죠.



위의 알고리즘이 기본적인 공식입니다. 간단하지 않나요? 하지만 명확합니다. TF(Term-Frequency) 값은 해당 텍스트가 얼마나 해당 문서내에서 많이 등장하는 지를 나타내고, IDF(Inverse Document Frequency) 값은 해당 텍스트가 얼마나 문서 내에서 다른 문서들에 비해 희귀한지, 즉 다른 문서가 아닌 이 문서의 특징적인 키워드인지를 나타내줍니다. TF-IDF 분석법이란, 이 두 값들을 곱한 수치를 통해 키워드를 평가하는 방법을 말합니다. 실제로 많은 시스템들이 텍스트 특징점 추출로 tf-idf 공식을 적절히 변형하고, 스케일링 값 등을 적용시켜서 사용하고 있습니다.

 

다음 포스팅에는 실제로 TF-IDF 분석법을 통해 문서의 대표 키워드들을 추출해보도록 하겠습니다.