텍스트 분석으로 어떤걸 할 수 있을까?
예시)
1) 기사 분류
- 하루에도 수백개씩 나오는 기사들, 지도 학습을 통해 사회, 연예, 정치등 카테고리를 분류해줄 수 있다.
2) 감성 분석
- 영화 리뷰, 정책에 대한 댓글 등에서 감성을 분석해서 호감도를 알아 볼 수 있다.
3) 에세이 채점
- 텍스트는 객관식보다 평가할 수 있는 항목이 많고 구체적이지만 채점이 어렵다.
- 텍스트 분석으로 일관성있고 타당한 채점을 할 수 있다.
4) 자기소개서 분석 - 채용에 활용
- 일을 잘하는 사람의 자기소개서와 못하는 사람의 자기소개서를 분석해서 채용시 자기소개서를 분류할 수 있다.
이렇게 수치 데이터가 아닌 텍스트 데이터도 분석 활용 범위가 다양하다.
어떻게 분석할까?
TDM (Term Document Matrix)
컴퓨터는 문장을 이해할 수 없기 때문에, 문장을 숫자로 변형해주어야 합니다.
이 방법을 Term Document Matrix (이하 TDM) 이라고 하는데, 이 과정은 텍스트 분석 과정에서 필수적이며 중요한 단계입니다.
TDM은 문서안에 포함된 단어의 빈도를 정리한 표입니다.
예시)
문서1: 오늘은 밥을 먹었다.
문서2: 어제도 밥, 오늘도 밥
오늘 | 어제 | 밥 | 먹다 | |
문서1 | 1 | 0 | 1 | 1 |
문서2 | 1 | 1 | 2 | 0 |
이렇게 문장내에 등장하는 단어를 컬럼으로하여 빈도수를 넣어주면, 다른 분석에서 사용하는 일반적인 통계 분석 기법을 모두 사용할 수 있습니다.
TDM은 처리가 쉬워지지만, 어순과 맥락을 무시하게 되는 것이 단점입니다.
하지만 대부분의 경우 TDM만으로 정확한 분석이 가능합니다.
Sparse matrix (희소행렬)
많은 문서를 하나의 TDM으로 만들면 대부분의 값은 0을 가지게 될 수 있다.
하나의 문서에는 다양한 단어들이 등장하는데 모든 문서에 그 단어들이 들어가진 않기 때문이다.
그래서 용량을 아끼기 위해서 0을 빼고 저장하는 압축 방법을 사용한다.
실제로 만들어보자!
영화 리뷰 데이터 출처: archive.ics.uci.edu/ml/machine-learning-databases/00331
[코드]
# 라이브러리 import
from sklearn.feature_extraction.text import CountVectorizer
# 단어빈도수 세고, matrix 형태로 만들어주기
cv = CountVectorizer(max_features=500, stop_words='english')
tdm = cv.fit_transform(df['review']) # tdm 완성
-
CountVectorizer 는 토큰이 문서별로 몇 번 등장했는지 행렬로 정리해준다.
-
max_features: 단어문서행렬에 포함시킬 최대의 단어수를 말한다. (빈도순으로 짜름)
-
stop_words: 분석에서 제외할 불용어를 설정하는 옵션이며, english로 설정하면 관사, 전치사 등을 제외한다. 다른 언어는 리스트등의 형태로 불용어 목록을 넘겨주어 사용한다.
-
[결과]
TDM을 쳐보면, 아래처럼 테이블 형태로 나오지 않는데 출력된 메시지를 보면, sparse matrix이며, 총 3433개의 값이 들어있는걸 알 수 있다.
문서의 갯수 (row): 748 개, 단어수( columns): 500개 의 행렬에서 3433이 차지하는 비율은 1%도 되지 않는다.
그래서 Compressed( 압축된 상태) 로 제공된다.
[단어 빈도수 확인하기]
TDM에서는 각 row 마다 특정 단어의 빈도수를 체크하고 있는데, 전체 데이터 셋에서 단어 빈도수 합을 살펴보자.
# 단어 목록 확인하기
cv.get_feature_names()[:50]
# 빈도수 확인하기
tdm.sum(axis=0)
# DataFrame 형태로 만들어주기
word_count=pd.DataFrame({
'단어': cv.get_feature_names(),
'빈도': tdm.sum(axis=0).flat
})
TDM의 종류
1. CountVector
- 단어의 빈도수를 표기 (실습에 진행한 내용)
2. Binary Vector
- 단어의 등장 여부를 표기 (0 or 1)
3. TF-IDF (Term Frequency-Inverse Document Frequency)
정확히 Matrix는 아니고, TDM을 보완하기 위한 가중치 값
TF-IDF에 대해서는 다음에 문서에서 이어서 정리하겠습니다!! 🙌🏻
강의출처: mindscale.kr/course/intro-text-analysis
'Today I Learned > 머신러닝' 카테고리의 다른 글
[텍스트분석] 단어빈도의 가중치 TF-IDF (0) | 2020.11.27 |
---|---|
[자연어처리] konlpy 설치하고 불러오기 (0) | 2020.11.20 |
Cross Validation (교차검증) 이란? (0) | 2020.11.12 |
K-means Clustering with Python (0) | 2020.11.06 |
엑셀로 추천시스템 유저프로필 만들어보기 (0) | 2020.09.30 |