[이전글] 2020/11/27 - [텍스트분석] TDM (Term Document Matrix) 단어 문서 행렬
이전글에서 CountVector로 단어가 등장하는 빈도수로 Matrix를 만들어주는 TDM을 만들어보았다.
같은 단어의 빈도수가 동일하게 나타나는 문서는 서로 비슷하다고 판단할 수 있다.
그런데, 무의미하게 특정 문서에서 반복되는 단어의 경우 분석에 도움이 되지 않기도 한다.
예를들어 리뷰에 좋아요 좋아요 좋아요 라고 되어 있을 때, 좋아요와 내용이 다르지 않다.
하지만 빈도수 TDM에서는 다르게 판단할 수 있다.
이럴 때 단어에 적절한 가중치를 주어서 보완할 수 있다.
단어 빈도 가중치들
1. binary: 단어 등장 여부에 따라 0 또는 1로만 표시 -> 무의미하게 반복되는 단어를 무시할 수 있다.
2. 로그함수 적용: 1 -> 0 , 10 -> 1, 100 -> 2, 1000 -> 3, 10000 -> 4 로 만들어주는데, 너무 많이 길거나 반복되는 것의 효과를 줄일 수 있다.
3. 문서의 총 단어 빈도로 나눔
글이 길 때 같은 단어가 3번 나오는거랑 글이 짧을 때 3번 나오는 것은 다르다.
그 것을 보정하기 위해 문서 길이로 나누어준다.
4. 가장 많은 단어의 빈도로 나눔
가장 많이 등장하는 단어의 빈도 대비 이 단어의 빈도가 어떻게 되는지 중요도를 확인할 수 있다.
문서 빈도 (document frequency - df)
- df: 각 단어가 등장한 문서 수
- idf(역문서빈도): 총 문서 수 / df
- 여러 문서에 자주 나오면 -> df 높음, idf 낮음
- 문서간의 차이가 중요한 상황에서는 Idf가 높은 단어가 좋은 단어이다. (특정 문서에서만 등장하는 단어!)
맛집 | 시청 | 밥 | |
문서1 | 3 | 2 | 1 |
문서2 | 2 | 0 | 3 |
문서3 | 0 | 0 | 1 |
df | 2 | 1 | 3 |
idf | 3/2 = 1.5 | 3 / 1 =3 | 3 / 3 = 1 |
-> 밥은 모든 문서에 나오는 단어이므로 문서간의 차이를 보여주지는 않는다. 시청이라는 키워드는 특정 문서에서 등장하는 단어로 문서간의 차이를 보여주는 키워드이다. 이 예시에서는 맛집에 대한 문서에서 장소가 문서마다 다르다는 점을 알 수 있다.
TF - IDF
TDM에 가중치를 주는 대표적인 방법입니다.
- 단어 빈도 (TF) X 역문서빈도 (IDF)
-> 위 테이블의 문서 1은 맛집의 경우 빈도가 3, idf가 1.5 이므로 TF-IDF 가 4.5 이고, 시청은 빈도가 2, idf가 3으로 TF-IDF 가 6이다.
그래서 빈도 자체는 맛집이 더 많지만, 중요도 가중치를 넣으면 시청의 TF-IDF가 더 높다.
실습해보기!
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(max_features=500, stop_words='english')
tdm = tfidf.fit_transform(df[0])
단어 빈도순 정렬
word_count = pd.DataFrame({
'단어': tfidf.get_feature_names(),
'빈도': tdm.sum(axis=0).flat
})
'Today I Learned > 머신러닝' 카테고리의 다른 글
[텍스트분석] TDM (Term Document Matrix) 단어 문서 행렬 (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 |