일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- NLP
- 전처리
- CUDA
- 자연어처리
- word embedding
- 품사태깅
- 석사
- pytorch
- Word2Vec
- 대학원
- 우울증
- naver movie review
- 수기
- 인공지능
- Classification Task
- sentiment analysis
- Today
- Total
슬기로운 연구생활
Classification - [7] TF-IDF 본문
이전 글
[6] One-Hot Encoding, Bag Of Word
들어가며
이전 글에서는 Text To Vector의 가장 기본적인 단계인 One-Hot Encoding과 Bag of Words에 대해 알아보았습니다. Bag of Words의 문제점은 중요한 단어들에 대해 가중치를 주지 못한다는 문제점이 있습니다.
그래서 이번 글에서는 단어마다 가중치를 부여해 서로 다른 값을 가지는 TF-IDF에 대해 알아보겠습니다.
TF-IDF
TF-IDF란 단어의 빈도와 역문서 빈도를 계산해 단어에 가중치를 부여하는 방법입니다.
TF ( Term Frequency ) : 특정 문서 d에서 특정 단어 t의 등장 회수.
ex) "과자"라는 단어가 문서3에서 3번 등장하면 TF는 3입니다.
DF( Document Frequency ) : 특정 단어 t가 등장한 문서의 수.
ex) "과자"라는 단어가 문서2와 문서3에서 언급되었습니다.
이럴 경우 DF는 2입니다.
IDF ( Inverse Document Frequency ) : DF(t)에 반비례하는 수.
분모에 1을 추가해주는 이유는 df가 0일 경우에 분모가 0이 되기 때문입니다.
분자의 n은 전체 문서의 개수를 의미합니다.
log( 전체문서 / ( 1+ 단어가 포함된 문서의 수 ) )
ex) "과자"라는 단어가 문서1에서 0번, 문서2에서 100번, 문서3에서 200번 언급되었다고 가정 해보겠습니다..
log( 분자 : 3 / 분모 : 1+2 ) 가 됩니다.
최종적으로 TF 값 x IDF 값을 곱하면 단어의 가중치가 구해집니다.
TF-IDF 의미
TF-IDF는 이전 글에서 배웠던 Bag of Words와는 다르게 단어마다 가중치가 부여됩니다.
BoW에서는 "사과"와 "행복"이라는 단어가 똑같이 1로 연산되었다면, TF-IDF에서는 단어의 중요도에 따라 다르게 연산이 되어집니다.
모든 문서에서 자주 사용되는 단어는 무엇일까요?
"은", "는", "이", "가"와 같은 조사가 제일 많이 사용될 것 입니다.
그렇다면 조사가 해당 문서의 특성을 가장 잘 나타내는 단어일까요?
TF-IDF의 수식에 의해 전체 문서에 전체적으로 등장하는 조사는 IDF의 값이 작아지게 되므로 단어의 가중치가 낮아지게 됩니다.
반대로, 특정 문서 내에서 빈도가 높은 단어일 수록 TF-IDF 값이 높아지게 됩니다.
따라서 모든 문서에 나타나는 흔한 단어들을 걸러내며, 특정 단어가 가지는 중요도를 알 수 있습니다.
TF-IDF 구현 예시
전체소스코드는 github에 공개되어있습니다.
1. 기본 버전
TF-IDF는 sklearn을 사용해 구현했습니다.
리스트는 3x10으로 구성되어 있습니다.
3은 문장의 개수이며 10은 vocabulary에 등록된 단어의 개수입니다.
2. 특정 빈도수 보다 낮은 단어 제외
TF-IDF는 Default 값으로 한 글자 단어는 제외하게 되어있습니다.
Version2 코드는 한 글자인 단어도 Vocabulary에 등록하는 방법입니다.
3. N-gram 설정
TF-IDF는 설정에 따라 2글자, 3글자 단위로 Vocabulary를 구성할 수 있습니다.
Version3 코드가 다음과 같습니다.
마무리
이번글에서는 TF-IDF에 대해 알아보았습니다.
TF-IDF는 이전 글에서 배웠던 Bag of Words와는 다르게 단어마다 가중치가 부여됩니다. BoW에서는 "사과"와 "행복"이라는 단어가 똑같이 1로 연산되었다면, TF-IDF에서는 단어의 중요도에 따라 다른 가중치가 부여됩니다.
TF-IDF도 BoW와 마찬가지로, Sparse Vector이기 때문에 단어간의 의미적 유사성을 알 수 없습니다. 또한, Sparse Vector는 Vocabulary의 수가 많아지면 한 단어를 표현하는데 불필요한 공간이 많이 필요합니다.
다음글에서는 이러한 문제를 멋지게 해결한 Word Embedding 방법에 대해 알아보도록 하겠습니다. 개인적으로 NLP의 꽃이며 핵심이라고 생각되는 부분이니 많은 Embedding 방법에 대해 상세하게 살펴보겠습니다.
'슬기로운 NLP 생활' 카테고리의 다른 글
Classification - [9] Fasttext (0) | 2020.09.02 |
---|---|
Classification - [8] Word2vec (2) | 2020.08.24 |
Classification - [6] One-Hot Encoding, Bag Of Word (0) | 2020.08.23 |
Classification - [5] 형태소 분석기 (0) | 2020.08.23 |
Classification - [4] Stemming, Lemmatizing (0) | 2020.08.23 |