DATA101
[NLP] TF-IDF 개념 및 계산 방법(+Python 코드) 본문
📌 Text 빅데이터분석 플랫폼 베타테스트 참가자 모집 중!(네이버페이 4만 원 전원 지급)

👋 안녕하세요, 코딩이 필요 없는 AI/빅데이터 분석 All in One 플랫폼 <DATA101> 개발팀입니다.
😊 저희 서비스를 사용해 보시고 경험담을 들려주세요 :)
💸 참여해 주신 "모든" 분들께 네이버페이 4만 원 쿠폰을 지급해 드립니다.
👨💻 참여 희망 시 카톡플러스친구 1:1 채팅 or 인스타그램 DM 부탁드립니다 :)
📆 참여기간 : 11/25(월)~11/29(금) 11:00~21:00 중 택1 (1시간 1타임)
👉 참여장소 : 강남역 인근 스터디카페 미팅Room
📍 소요시간 : 총 40분 내외(서비스 체험 및 인터뷰 포함)
✅ 참가조건 : Text 빅데이터 분석 업무 경험자
👉 참가 가능일정 조회하기 : https://url.kr/n8k8gu
- 카톡플친 : http://pf.kakao.com/_SxltHG/chat
- 인스타그램 : https://www.instagram.com/data101.official/
본 포스팅에서는 TF-IDF 개념 및 계산 방법에 대해 알아봅니다.
📚 목차
1. TF-IDF 개념
2. TF-IDF 계산방법
2.1. TF(Term Frequency)
2.2. DF(Document Frequency)
2.3. IDF(Inverse Document Frequency)
1. TF-IDF 개념
TF-IDF(Term Frequency-Inverse Document Frequency)는 Document Term Matrix(DTM) 내 단어마다 중요도를 고려하여 가중치를 주는 통계적인 단어 표현방법입니다. DTM에 대한 자세한 설명은 이곳을 참고해 주세요.

TF-IDF는 단어의 중요도를 고려하기 때문에, 일반적으로 단순히 문서 내 단어의 출현빈도만 고려하는 DTM보다 문서에서 유의미한 정보를 얻어내는 데 더욱 효과적입니다. 예를 들어, TF-IDF는 문서 간 유사도 검사, 중요 문서 위주의 검색 결과 제공 시스템, 문서 빅데이터 내 핵심어 추출 등에 활용되고 있습니다.
2. TF-IDF 계산방법
TF-IDF 가중치 계산 방법은 다음과 같습니다. DTM 생성 후, TF-IDF 이름처럼 단어 출현빈도(Term Frequency, TF)와 역 문서 빈도(Inverse Document Frequency, IDF)를 곱하여 단어마다 TF-IDF 가중치를 부여합니다. 아래 수식과 같이 말이죠.
이제 TF와 IDF 각각에 대해 자세히 알아봅니다.
2.1. TF(Term Frequency)
TF(Term Frequency)는 특정 문서
문서구분 | 내용 |
문서1 | 배가 부르다 |
문서2 | 배의 가격이 비싸다 |
문서3 | 진짜 사과가 진짜 좋다 |
문서4 | 아침엔 사과가 좋다 |
문서 내 띄어쓰기를 기준으로 토큰화(tokenization)한다고 가정하겠습니다. 토큰화는 문장을 여러 단위의 덩어리로 쪼개는 작업이라 생각하시면 됩니다. 문서별 TF는 아래 표와 같이 나타낼 수 있습니다. 문서3에서 '진짜'라는 단어를 예시로 살펴보면, TF 값은
가격이 | 배가 | 배의 | 비싸다 | 부르다 | 사과가 | 아침엔 | 진짜 | 좋다 | |
문서1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
문서2 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
문서3 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 | 1 |
문서4 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
2.2. DF(Document Frequency)
IDF(Inverse Document Frequency)는 DF(Document Frequency) 값의 역수입니다. IDF를 알아보기에 앞서 DF을 먼저 알아봅니다. DF는 전체 문서
DF의 경우 오직 단어가 몇 개의 문서에 출현했는지만 관심이 있습니다. 예를 들어, A, B, C, D라는
2.3. IDF(Inverse Document Frequency)
2.3.1. 개념
TF-IDF는 전체 문서에서 빈출되는 단어의 중요도는 낮다고 판단하고, 특정 문서에서만 빈출되는 단어는 중요도가 높다고 판단합니다. 즉, TF-IDF 값은 단어의 중요도와 비례하는데, TF-IDF 값이 클수록 해당 단어의 중요도가 높은 것이죠. 예를 들어, '합니다, '에서', '가'와 같이 서술어나 조사와 같은 불용어는 대부분의 문서에서 빈출하기 때문에 TF-IDF 값은 낮아집니다.
2.3.2. 수식
IDF(Inverse Document Frequency)는 DF 값의 역수라고 했습니다. 수식부터 살펴보겠습니다.
IDF가 DF의 역수라고 했는데 수식을 보시면 몇 가지 의문이 드실 겁니다. 자연로그(
(1) 자연로그 사용이유
로그(
(2) 로그 내 분모에
로그 내 분모에
2.3.3. 계산
파이썬을 활용하여 TF-IDF를 직접 계산해 보겠습니다. 필요한 패키지를 import합니다(패키지 설치 시 pipenv 가상환경 사용 권장).
try:
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
except:
!pip install -U -q pandas numpy sklearn
앞서 사용한 4가지 문서를 예시로 사용하겠습니다.
documents = [
"배가 부르다",
"배의 가격이 비싸다",
"진짜 사과가 진짜 좋다",
"아침엔 사과가 좋다"
]
단어 출현 빈도를 벡터화하여 표현하는 함수입니다.
vectorizer = CountVectorizer()
DTM과 TF를 계산합니다.
# Document Term Matrix
dtm = vectorizer.fit_transform(documents)
# Term Freqeuncy
tf = pd.DataFrame(dtm.toarray(), columns = vectorizer.get_feature_names())
TF를 출력해 보면 아래의 그림 2와 같습니다.

DF를 계산하고 결과를 출력하면 아래의 그림 3과 같습니다. '시과가'와 '좋다'라는 단어만 2개의 문서에서 등장한 것을 알 수 있습니다.
# Document Frequency
df = tf.astype(bool).sum(axis = 0)

이제 IDF를 계산해 봅니다.
# 문서 개수
D = len(tf)
# Inverse Document Frequency
idf = np.log((D) / (df+1))
마지막으로 TF-IDF를 계산해 봅니다.
# TF-IDF
tfidf = tf * idf
tfidf = tfidf / np.linalg.norm(tfidf, axis = 1, keepdims = True)
📚 참고할 만한 포스팅
1. [NLP] Bag of Words(BoW) 개념 및 실습
2. [NLP] 문서 단어 행렬(DTM) 개념 이해
3. [NLP] TF-IDF 개념 및 계산 방법
4. [NLP] Word Embedding의 이해: (1) 희소표현 및 밀집표현
5. [NLP] 언어모델(Language Model)의 개념 및 특징
6. [NLP] N-gram 언어 모델의 개념, 종류, 한계점
7. [NLP] 언어모델의 평가지표 'Perplexity' 개념 및 계산방법
8. [NLP] Word2Vec: (1) 개념
9. [NLP] Word2Vec: (2) CBOW 개념 및 원리
10. [NLP] Word2Vec: (3) Skip-gram
11. [NLP] Word2Vec: (4) Negative Sampling
12. [NLP] 문서 유사도 분석: (1) 코사인 유사도(Cosine Similarity)
13. [NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance)
14. [NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity)
Last Updated @2022-06-13
- 수식 표기 및 계산 오류 수정
👨💻 맞춤 서비스
저희 AI/BigData 분석 솔루션 전문 브랜드 <데이터워너원 DATA101>에서는
맞춤형 데이터 수집부터 통계분석, 텍스트마이닝, AI 모델링, 논문작성을 지원해 드립니다 :)
자세한 내용은 아래 링크를 참고해 주세요!
데이터분석, 통계분석, 논문작성 지원해 드립니다. - 크몽
데이터워너원DATA101 전문가의 IT·프로그래밍 서비스를 만나보세요. <p>Python, SPSS, Tableau를 활용해 <strong>...
kmong.com
텍스트 데이터 분석/텍스트마이닝NLP 도와드립니다. - 크몽
데이터워너원DATA101 전문가의 IT·프로그래밍 서비스를 만나보세요. <p>대기업 AI/빅데이터 연구원 출신으로 구성된 법인 주식회사 유에프5는 Py...
kmong.com
유튜브 댓글 원하는 만큼 수집해 드립니다/웹 크롤링 - 크몽
데이터워너원DATA101 전문가의 IT·프로그래밍 서비스를 만나보세요. <p><strong style="font-size: 24px;&q...
kmong.com
모바일 앱 리뷰 크롤링/구글 플레이 스토어 - 크몽
데이터워너원DATA101 전문가의 IT·프로그래밍 서비스를 만나보세요. <p><strong>구글 플레이 스토어 앱 리뷰 1시간 안에 수집해 ...
kmong.com
오늘은 TF-IDF 개념과 계산방법에 대해 알아봤습니다.
포스팅 내용에 오류가 있거나 보완할 점이 있다면 아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다 :)
그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다.
고맙습니다😊
'AI & 빅데이터 > 자연어처리(NLP)' 카테고리의 다른 글
[NLP] N-gram 언어 모델의 개념, 종류, 한계점 (0) | 2022.04.04 |
---|---|
[NLP] 언어모델(Language Model)의 개념 및 특징 (2) | 2022.03.31 |
[NLP] 문서 단어 행렬(DTM) 개념 이해 (0) | 2022.03.24 |
[NLP] Bag of Words(BoW) 개념 및 실습 (0) | 2022.03.23 |
[논문 리뷰] Leem, B. H., & Eum, S. W. (2021). Using text mining to measure mobile banking service quality. Industrial Management & Data Systems. (0) | 2021.09.20 |