1. 텍스트 마이닝(Text Mining)이란
텍스트 마이닝이란 머신러닝, 언어이해, 통계 등을 활용하여 모델을 설계·수립하고 텍스트 속에서 정보를 추출하여 비즈니스 인사이트(Business Insight)나 추천, 예측 등의 분석 작업을 수행하는 것을 통틀어 일컫습니다. 또한, 자연어 처리(NLP)란 인간의 언어를 기계가 이해하고 해석할 수 있도록 하는 것에 방점을 찍은 기술을 통틀어 일컫습니다. 개념 정의에서 알 수 있다시피 텍스트 마이닝이 조금은 더 큰 범주이고, 자연어 처리를 특정 기술에 중점을 두고 있어 조금 더 작은 범주라고 생각하면 편할 것 같습니다.
2. 텍스트 마이닝 종류
크게 4가지로 나눌 수 있다.
- 텍스트 분류(Text Classification) : 주로 지도학습을 활용하여 문서가 특정 분류 또는 카테고리에 속하는 것을 예측하는 기법을 말합니다. 예컨대, 어떤 신문 기사나 내용이 정치/경제/사회/문화 등 어떤 카테고리에 속하는지 자동으로 분류하거나 스팸 메일을 선별하는 것들이 있습니다.
- 감성 분석(Sentiment Analysis) : 텍스트에서 드러나는 감정, 판단, 의견 등 주관적·감정적 요소를 분석하는 것을 말합니다. 예컨대, SNS 감성 분석, 상품이나 영화에 대한 긍정/부정 의견이나 리뷰, 여론조사 의견 분석 등 다양한 분야에서 활용되며, 지도학습뿐만 아니라 비지도학습을 활용합니다.
- 텍스트 요약(Text Summarization) : 텍스트 내에서 중요한 주제나 중심 문장을 추출하는 것을 일컫는다. 가장 널리 알려진 활용 예시로 토픽 모델링(Topic Modeling)이 있습니다.
- 텍스트 군집화/유사도 측정 : 비슷한 유형의 문서를 군집화하거나 문서들간의 유사도를 측정하여 비슷한 문서끼리 묶어 분석하는 것을 말합니다.
3. Feature Vectorization과 파이썬 기반 NLP 패키지
텍스트 분석을 위해서 원천 텍스트 데이터(문서)를 전처리한 후에 'Feature Vectorization' 작업을 거친다. 이런 Feature Vectorization은 두 가지 방법이 있는데, ① Bag of Words와 ② Word2Vec입니다.
'Bag of words'는 단어에 특정 값을 부여하는데, 그 값은 몇 번 등장하였는지 카운트 값이거나 정규한 값 등을 활용한다. 반면, 'Word2Vec'는 어떤 단어 다음에 어떤 단어가 등장하였는지 등 정보를 추출하는 것입니다.
파이썬 기반 텍스트 마이닝/NLP 패키지는 대표적으로 3가지가 있습니다.
- NLTK(National Language Toolkit for Python) : 파이썬에서 가장 대표적인 NLP 패키지로서 방대한 데이터 세트와 서브 모듈을 가지고 있으며 NLP의 거의 모든 영역을 커버할 수 있습니다. 아직도 많은 NLP 패키지가 NLTK의 영향을 받아 구현되고 있으나, 수행 속도 측면에서 아쉽다는 평이 많아 실제 빅데이터 분석에는 활용성이 떨어집니다.
- Gensim : 토픽 모델링 분야에서 가장 두각을 드러내는 패키지이며, 토픽 모델링을 쉽게 구현할 수 있는 기능을 제공하고 있고, Word2Vec 구현 등 다양한 신기능도 제공하여 SpaCy와 함께 현재 가장 많이 활용되는 NLP 패키지입니다.
- SpaCy : 뛰어난 수행 성능으로 최근 가장 주목을 받는 NLP 패키지이다. 많은 NLP 어플리케이션에서 SpaCy를 사용하는 사례가 늘고 있습니다.
4. 텍스트 전처리(Text Preprocessing)
빅콘테스트에 참여했을 당시에 가장 공을 들였던 작업이 전처리(Preprocessing)였다. 텍스트 데이터 전처리(또는 텍스트 정규화)의 경우, 4가지 정도의 작업이 있습니다.
- 클렌징(cleansing) : 텍스트에서 분석에 방해되는 불필요한 문자, 기호 등을 제거하는 작업입니다. (ex. XML 태그나 특정 기호 등)
- 토큰화(tokenization) : 문장/단어 토큰화, n-gram 등으로 '토큰'이라는 단위로 나누는 것입니다.
- 필터링/스톱워드/제거/철자 수정 : 불필요한 단어나 분석에 의미없는 단어(a, the 등)를 제거하거나 잘못된 철자를 수정하거나 하는 작업입니다.
- Stemming/Lemmatization : 어근 추출, Lemmatization이 Stemming보다 정교하고 의미론적 기반에서 단어 원형을 찾아주는 것입니다.
여기서 중요한 개념은 n-gram입니다.
n-gram은 연속된 n개의 단어 단위로 하나의 토큰화 하는 것입니다. 문장을 개발 단어별로 하나씩 토큰화 할 경우에 문맥/맥락적 의미가 반영되지 않거나 무시될 수 밖에 없는 점을 보완하기 위해 활용됩니다.
예컨대, 'You are coming up to me'라는 문장을 2-gram한다면, (You, are), (are, coming), (coming, up), (up, to), (to, me)로 토큰화하는 것입니다. 즉, 연속적인 2개의 단어를 순차적으로 이동하면서 묶는 것입니다.
추후 공부한 소스코드를 저장한 github 링크를 추가할 예정..
끝.
'기술이야기 (Technomian) > 데이터 분석 (Data Analysis)' 카테고리의 다른 글
[데이터 전처리] Preprocessing. 아웃라이어(outlier) 처리하기 (0) | 2021.10.24 |
---|---|
[데이터 전처리] Preprocessing. 결측치 (missing value) 처리하기 (0) | 2021.10.23 |
[탐색적 데이터 분석] EDA를 위한 주요 함수 (pandas, matplotlib 등) (0) | 2021.10.21 |