문제 1: TF vs TF-IDF
Q1-1.
단어 ’data’의 TF-IDF 점수가 가장 높을 가능성이 있는 문서는 A이다.
빈도(TF)는 B 문서도 더 높지만 문서 B 에서는 data가 과도하게 반복되어
다른 단어와의 균형이 무너질 수 있어 있으므로 TF-IDF 점수에서 상대적으로
낮게 반영될 수 있다. 반면 문서 A는 data와 science 두 단어가 균형 있게
등장하므로 TF-IDF 점수가 더 높을 수 있다.
Q1-2.
문서 C에서 단어 ’model’의 TF 값은 6이다. 해당 단어의 IDF가 높다는
것은 model이라는 단어가 다른 문서들에서 거의 등장하지 않고 문서 C에서만
특이하게 등장하는 단어라는 뜻이다.
문제 2: R을 활용한 실습
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidytext)
# 예제 데이터
text_df <- tibble(
document = c("A", "B", "C"),
text = c("data science is fun",
"data model data",
"model and science"))
# 토큰화 및 불용어 제거
data("stop_words")
tidy_tokens <- text_df %>%
unnest_tokens(word, text) %>%
anti_join(stop_words, by = "word")
# TF-IDF 계산
tfidf_result <- tidy_tokens %>%
count(document, word, sort = TRUE) %>%
bind_tf_idf(word, document, n)
tfidf_result
## # A tibble: 7 × 6
## document word n tf idf tf_idf
## <chr> <chr> <int> <dbl> <dbl> <dbl>
## 1 B data 2 0.667 0.405 0.270
## 2 A data 1 0.333 0.405 0.135
## 3 A fun 1 0.333 1.10 0.366
## 4 A science 1 0.333 0.405 0.135
## 5 B model 1 0.333 0.405 0.135
## 6 C model 1 0.5 0.405 0.203
## 7 C science 1 0.5 0.405 0.203
Q2-1.
가장 높은 TF-IDF 점수를 가진 단어는 0.366으로 fun이고 A 문서에만
등장하는 단어이다.
Q2-2.
TF 점수는 높지만 IDF 점수가 낮은 단어는 대부분의 문서에 등장하지만
특정 문서에서 많이 등장하는 특성을 가지고 있다.
문제 3: 개념 요약
Q3-1.
TF-IDF는 문서에서 특정 단어가 얼마나 중요한지를 판단할 때 유용하다.
예를 들어 뉴스 기사 분류, 텍스트 요약, 키워드 추출 등을 들 수 있다.
Q3-2.
TF만 사용할 때 발생할 수 있는 문제점은 단순히 자주 등장하는 단어만
강조하게 되므로 문서 간 차별성이 적은 일반적인 단어도 중요하게 판단될 수
있다. 따라서 단어의 문서 간 차별력을 고려할 수 없다.