1. 정의
(1) TF (Term Frequency)
TF(단어 빈도, term frequency)는 특정한 단어가 문서 내에 얼마나 자주 등장하는지를 나타내는 값으로,
이 값이 높을수록 문서에서 중요하다고 생각할 수 있다.
위의 문장을 보면 car 의 TF 수치가 높은 것을 보아, car가 중요한 문장이다.
하지만 단어 자체가 문서군 내에서 자주 사용되는 경우, 이것은 그 단어가 흔하게 등장한다는 것을 의미한다.
위 그림이 가설의 예시이다.
여기 문장에서 중요한 단어는 friend 이다. 하지만 TF 수치상으로는 a 도 중요하다.
이는 관용적으로 많이 쓰이는 말이고 연관성이 없다는 것 이다.
(2) IDF (Inverse Document Frequency)
관용적인 표현이나 연관성이 없는 단어의 수치를 DF(문서 빈도, document frequency)라고 하며,
IDF는 ln(문장의 총 수 / 단어가 등장한 문장의 총 수 or +1 (0으로 나누는 행위가 있을수도 있음.))라고 정의한다.
(여러 모듈에서 log 대신 ln을 사용한다.)
IDF 값은 문서군의 성격에 따라 결정된다.
예를 들어 '원자'라는 낱말은 일반적인 문서들 사이에서는 잘 나오지 않기 때문에 IDF 값이 높아지고 문서의 핵심어가 될 수 있지만, 원자에 대한 문서를 모아놓은 문서군의 경우 이 낱말은 상투어가 되어 각 문서들을 세분화하여 구분할 수 있는 다른 낱말들이 높은 가중치를 얻게 된다.
(3) TF-IDF
TF-IDF는 TF*IDF 값을 서로 곱한 값이다.
또한 위의 그림은 TF-IDF를 전체적으로 모아둔 table이다.
A, B 문장에서 결국, TF와 IDF가 동시에 높은 수치를 가지는 car, friend가 TF-IDF값이 제일 높은 것을 보인다.
이로써 우리의 keyword를 car, friend가 문장에서 keyword라는 것을 알아내었다.
2. Sckit-learn을 통한 DTM과 TF-IDF 실습
DTM 구성
from sklearn.feature_extraction.text import CountVectorizer
corpus = [
'you know I want your love',
'I like you',
'what should I do ',
]
vector = CountVectorizer()
print(vector.fit_transform(corpus).toarray()) # 코퍼스로부터 각 단어의 빈도 수를 기록한다.
print(vector.vocabulary_) # 각 단어의 인덱스가 어떻게 부여되었는지를 보여준다.
output
"""
[[0 1 0 1 0 1 0 1 1]
[0 0 1 0 0 0 0 1 0]
[1 0 0 0 1 0 1 0 0]]
{'you': 7, 'know': 1, 'want': 5, 'your': 8, 'love': 3,
'like': 2, 'what': 6, 'should': 4, 'do': 0}
"""
TF-IDF
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
'you know I want your love',
'I like you',
'what should I do ',
]
tfidfv = TfidfVectorizer().fit(corpus)
print(tfidfv.transform(corpus).toarray())
print(tfidfv.vocabulary_)
[[0. 0.46735098 0. 0.46735098 0. 0.46735098 0. 0.35543247 0.46735098]
[0. 0. 0.79596054 0. 0. 0. 0. 0.60534851 0. ]
[0.57735027 0. 0. 0. 0.57735027 0. 0.57735027 0. 0. ]]
{'you': 7, 'know': 1, 'want': 5, 'your': 8, 'love': 3, 'like': 2, 'what': 6, 'should': 4, 'do': 0}
3. Why is TF-IDF?
1. TF-IDF는 단어별로 중요도를 정의, 단어와 문서와의 연관성을 찾아
2. 반복적이고, 관용적인 표현들을 제거하는 방법을 통해
3. 진짜 우리가 원하는 keyword가 필요할 때 쓰인다.!!! + 문서사이 유사도 측정
4. 값이 크다면 ? 특정 문서 내에서 단어 빈도가 높고 전체 문서들 중 그 단어를 포함한 문서가 적을수록!
'AI' 카테고리의 다른 글
자연어 처리 : 문서 유사도 : 유클리드, 코사인, 자카드 (0) | 2020.03.06 |
---|---|
자연어 처리 : TF-IDF 활용해 문서의 유사도 구하기 (0) | 2020.03.06 |
자연어 처리 : 카운트 기반의 단어 표현 : Bag of Words + DTM (0) | 2020.03.06 |
자연어처리 : 카운트 기반의 단어 표현 (0) | 2020.03.06 |
자연어처리 : 언어모델 : Perplexity (0) | 2020.03.06 |
댓글