๐ TF-IDF (Term Frequency – Inverse Document Frequency)๋?
TF-IDF๋ ๋ฌธ์ ๋ด ๋จ์ด์ ์ค์๋๋ฅผ ํ๊ฐํ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. ํน์ ๋จ์ด๊ฐ ๋ฌธ์์์ ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ ์์นํํ์ฌ, ๋ฌธ์ ๊ฐ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๊ฑฐ๋ ๊ฒ์ ์์ง์์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ญํนํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
1๏ธโฃ ๊ฐ๋ ์ ๋ฆฌ
(1) TF (Term Frequency, ๋จ์ด ๋น๋)
๋ฌธ์ ๋ด์์ ํน์ ๋จ์ด๊ฐ ๋ฑ์ฅํ๋ ๋น๋๋ฅผ ๋ํ๋ ๋๋ค.TF(t,d)=f(t,d)NTF(t, d) = \frac{f(t, d)}{N}TF(t,d)=Nf(t,d)โ
- f(t,d)f(t, d)f(t,d) : ํน์ ๋ฌธ์ ddd์์ ๋จ์ด ttt์ ๋ฑ์ฅ ํ์
- NNN : ๋ฌธ์ ddd์ ๋ฑ์ฅํ๋ ๋ชจ๋ ๋จ์ด์ ์ด ๊ฐ์
โ TF์ ์๋ฏธ: ์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด์ผ์๋ก ํด๋น ๋ฌธ์์์ ์ค์ํ๊ฒ ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ๋์.
(2) IDF (Inverse Document Frequency, ์ญ๋ฌธ์ ๋น๋)
ํด๋น ๋จ์ด๊ฐ ์ฌ๋ฌ ๋ฌธ์์์ ๋ฑ์ฅํ๋ ์ ๋๋ฅผ ์กฐ์ ํ๋ ๊ณ์์ ๋๋ค. ๋๋ฌด ๋ง์ ๋ฌธ์์์ ๋ฑ์ฅํ๋ ๋จ์ด(์: “the”, “is”, “and” ๊ฐ์ ๋ถ์ฉ์ด)๋ ์ ๋ณด ๊ฐ์น๊ฐ ๋ฎ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ฐ์ํ์ฌ ๊ฐ์ค์น๋ฅผ ๋ฎ์ถฅ๋๋ค.IDF(t)=logโก(D1+df(t))IDF(t) = \log \left(\frac{D}{1 + df(t)}\right)IDF(t)=log(1+df(t)Dโ)
- DDD : ์ ์ฒด ๋ฌธ์ ๊ฐ์
- df(t)df(t)df(t) : ๋จ์ด ttt๊ฐ ๋ฑ์ฅํ ๋ฌธ์ ๊ฐ์
โ IDF์ ์๋ฏธ: ํน์ ๋ฌธ์์์๋ง ๋ฑ์ฅํ๋ ๋จ์ด์ผ์๋ก(ํฌ๊ทํ ์๋ก) ๋ ๋์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌ.
(3) TF-IDF ๊ณต์
TF์ IDF๋ฅผ ๊ณฑํ ๊ฐ์ด ํด๋น ๋จ์ด์ ์ต์ข ์ค์๋ ์ ์๊ฐ ๋ฉ๋๋ค.TFโIDF(t,d)=TF(t,d)รIDF(t)TF-IDF(t, d) = TF(t, d) \times IDF(t)TFโIDF(t,d)=TF(t,d)รIDF(t)
โ TF-IDF์ ์๋ฏธ:
- ํน์ ๋ฌธ์์์ ์์ฃผ ๋ฑ์ฅํ์ง๋ง, ์ ์ฒด ๋ฌธ์์์๋ ๋๋ฌผ๊ฒ ๋ฑ์ฅํ๋ ๋จ์ด์ ์ ์๊ฐ ๋์.
- ๋ฌธ์ ์ ์ฒด์์ ํํ ๋จ์ด(“the”, “is”, “and”)๋ ์๋์ผ๋ก ๊ฐ์ค์น๊ฐ ๋ฎ์์ง.
2๏ธโฃ Python์ ํ์ฉํ TF-IDF ๊ณ์ฐ(1) Scikit-learn์ ํ์ฉํ TF-IDF ๋ฒกํฐํ
from sklearn.feature_extraction.text import TfidfVectorizer
# ์ํ ๋ฌธ์
documents = [
"I love machine learning. Machine learning is amazing.",
"Natural language processing is a part of AI.",
"Deep learning advances AI and machine learning."
]
# TF-IDF ๋ณํ๊ธฐ ์์ฑ
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)
# ๋จ์ด ๋ชฉ๋ก ์ถ๋ ฅ
print("TF-IDF ๋จ์ด ๋ชฉ๋ก:", vectorizer.get_feature_names_out())
# ๊ฐ ๋ฌธ์์ TF-IDF ๊ฐ ์ถ๋ ฅ
print("TF-IDF ํ๋ ฌ:\n", tfidf_matrix.toarray())
โ ์ค๋ช :
TfidfVectorizer()
๋ฅผ ์ฌ์ฉํด ๋ฌธ์๋ฅผ ๋ฒกํฐ๋ก ๋ณํ.fit_transform()
์ ํตํด TF-IDF ๊ฐ์ ๊ณ์ฐ.toarray()
๋ฅผ ์ด์ฉํด ๋ณํ๋ ํ๋ ฌ์ ์ถ๋ ฅ.
(2) ํน์ ๋จ์ด์ TF-IDF ๊ฐ ํ์ธ
import pandas as pd
# TF-IDF ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ๋ณํ
df = pd.DataFrame(tfidf_matrix.toarray(), columns=vectorizer.get_feature_names_out())
print(df)
๐ ์ถ๋ ฅ ์์
ai | advances | amazing | deep | is | learning | love | machine | natural | part | processing | |
---|---|---|---|---|---|---|---|---|---|---|---|
๋ฌธ์ 1 | 0 | 0 | 0.52 | 0 | 0 | 0.37 | 0.52 | 0.37 | 0 | 0 | 0 |
๋ฌธ์ 2 | 0.42 | 0 | 0 | 0 | 0.42 | 0 | 0 | 0 | 0.42 | 0.42 | 0.42 |
๋ฌธ์ 3 | 0.33 | 0.46 | 0 | 0.46 | 0 | 0.33 | 0 | 0.33 | 0 | 0 | 0 |
โ ์ค๋ช :
- ํน์ ๋จ์ด(์: “machine”)๊ฐ ํน์ ๋ฌธ์์์ ์ผ๋ง๋ ์ค์ํ์ง๋ฅผ ์์น๋ก ํ์ธ ๊ฐ๋ฅ.
- ๋ฌธ์๋ง๋ค ๋จ์ด์ ๊ฐ์ค์น๊ฐ ๋ค๋ฅด๊ฒ ๋ถ์ฌ๋จ.
(3) ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ์ด์ฉํ ๋ฌธ์ ๋น๊ต
TF-IDF ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ์ ์ฌ๋๋ฅผ ์ธก์ ํ ์๋ ์์ต๋๋ค.
from sklearn.metrics.pairwise import cosine_similarity
# ๋ฌธ์ ๊ฐ ์ฝ์ฌ์ธ ์ ์ฌ๋ ๊ณ์ฐ
cos_sim = cosine_similarity(tfidf_matrix)
print("๋ฌธ์ ๊ฐ ์ฝ์ฌ์ธ ์ ์ฌ๋:\n", cos_sim)
โ ์ถ๋ ฅ ์์
๋ฌธ์ ๊ฐ ์ฝ์ฌ์ธ ์ ์ฌ๋:
[[1. 0.118 0.529]
[0.118 1. 0.206]
[0.529 0.206 1. ]]
โ ์ค๋ช :
cosine_similarity()
๋ฅผ ์ด์ฉํด ๋ฌธ์ ๊ฐ ์ ์ฌ๋๋ฅผ ์ธก์ .- 1์ ๊ฐ๊น์ธ์๋ก ์ ์ฌํ ๋ฌธ์, 0์ ๊ฐ๊น์ธ์๋ก ์ฐ๊ด์ฑ์ด ๋ฎ์.
3๏ธโฃ TF-IDF์ ์ฅ์ ๊ณผ ๋จ์
โ ์ฅ์
- ๋ถํ์ํ ๋จ์ด ๊ฐ์ค์น ๊ฐ์: “the”, “is”, “and” ๊ฐ์ ๋ถ์ฉ์ด์ ์ํฅ๋ ฅ์ ์๋์ผ๋ก ๋ฎ์ถค.
- ๋ฌธ์ ๋ด ์ค์ํ ๋จ์ด ๊ฐ์กฐ: ํน์ ๋ฌธ์์์๋ง ์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด์ ๊ฐ์ค์น๋ฅผ ๋๊ฒ ๋ถ์ฌ.
- ๊ฐ๋จํ๊ณ ํจ์จ์ : ๊ณ์ฐ์ด ๋น ๋ฅด๊ณ ๋ฌธ์ ๊ฒ์, ๋ฌธ์ ๋น๊ต ๋ฑ์ ๋ค์ํ NLP ์์ ์ ์ฌ์ฉ ๊ฐ๋ฅ.
โ ๋จ์
- ๋ฌธ๋งฅ ์ ๋ณด ๋ถ์กฑ: TF-IDF๋ ๋จ์ด์ ์์๋ ์๋ฏธ๋ฅผ ๊ณ ๋ คํ์ง ์์. (์: “apple”๊ณผ “fruit”์ ๊ด๊ณ๋ฅผ ์ธ์ ๋ชปํจ)
- ํฌ๊ท ๋จ์ด ๊ฐ์ค์น ๋ฌธ์ : ๋๋ฌด ๋๋ฌธ ๋จ์ด๋ ํ์ ์ด์์ผ๋ก ๋์ ๊ฐ์ค์น๋ฅผ ๋ฐ์ ์ ์์.
- ๋ฐ์ดํฐ ํฌ๊ธฐ์ ๋ฏผ๊ฐ: ๋ฌธ์ ๊ฐ์๊ฐ ์ฆ๊ฐํ๋ฉด IDF ๊ณ์ฐ์ด ๋ณํํ์ฌ ๊ฐ์ค์น๊ฐ ๋ณํ ์ ์์.
๐ TF-IDF vs ๋ค๋ฅธ NLP ๊ธฐ๋ฒ ๋น๊ต
๊ธฐ๋ฒ | ์ค๋ช | ์ฅ์ | ๋จ์ |
---|---|---|---|
TF-IDF | ๋จ์ด ๋น๋ ๊ธฐ๋ฐ ๊ฐ์ค์น ๋ถ์ฌ | ๋น ๋ฅด๊ณ ๊ฐ๋จํจ | ๋ฌธ๋งฅ ๊ณ ๋ ค X |
Word2Vec | ๋จ์ด์ ์๋ฏธ๋ฅผ ๋ฒกํฐ๋ก ๋ณํ | ์๋ฏธ์ ๊ด๊ณ ๋ฐ์ ๊ฐ๋ฅ | ๋ฌธ์ฅ ์ ์ฒด ๋ถ์ ์ด๋ ค์ |
BERT | ๋ฌธ์ฅ ๋จ์์ ์๋ฏธ ํ์ต | ๋ฌธ๋งฅ์ ๊ณ ๋ คํ ์๋ฏธ ๋ถ์ ๊ฐ๋ฅ | ๋ชจ๋ธ์ด ํฌ๊ณ ๋๋ฆผ |
โ TF-IDF๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ด์ง๋ง, ๋จ์ด ๊ฐ ์๋ฏธ๋ฅผ ๋ฐ์ํ์ง ๋ชปํ๋ฏ๋ก Word2Vec, BERT ๊ฐ์ ๋ฐฉ๋ฒ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋์ฑ ์ ๊ตํ NLP ๋ถ์์ด ๊ฐ๋ฅ!
๐ TF-IDF ํ์ฉ ์์
โ ๊ฒ์ ์์ง: ๊ฒ์์ด์ ๋ฌธ์ ๊ฐ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ์ฌ ๊ฒฐ๊ณผ ์ ๋ ฌ
โ ๋ฌธ์ ๋ถ๋ฅ: ๋ด์ค, ์ด๋ฉ์ผ, ๋ฆฌ๋ทฐ ๋ฑ์ ์๋ ๋ถ๋ฅ
โ ์คํธ ํํฐ๋ง: ์คํธ ๋ฉ์ผ๊ณผ ์ ์ ๋ฉ์ผ์ TF-IDF ํจํด์ ๋น๊ตํ์ฌ ๋ถ๋ฅ
โ ๊ฐ์ ๋ถ์: ํ
์คํธ์์ ๊ธ์ /๋ถ์ ํค์๋์ ์ค์๋ ๋ถ์
โ ๊ฒฐ๋ก
- TF-IDF๋ ๋จ์ด ์ค์๋ ์ธก์ ๋ฐ ๋ฌธ์ ๋น๊ต๋ฅผ ์ํ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ.
- ๋น ๋ฅด๊ณ ๊ฐ๋จํ๋ฉฐ, ๊ฒ์ ์์ง, ์ถ์ฒ ์์คํ , ๋ฌธ์ ๋ถ๋ฅ ๋ฑ ๋ค์ํ ๊ณณ์์ ์ฌ์ฉ๋จ.
- ๋ฌธ๋งฅ์ ๊ณ ๋ คํ์ง ๋ชปํ๋ฏ๋ก, Word2Vec, BERT ๊ฐ์ ๊ธฐ๋ฒ๊ณผ ํจ๊ป ํ์ฉํ๋ฉด ๋์ฑ ์ ๊ตํ ๋ถ์ ๊ฐ๋ฅ.