ย
๋ฌธ์ฅ์ด๋ ๋ฌธ์์ ๊ฐ์ ๊ธด ํ
์คํธ ๋ญ์น๋ฅผ ๋ถ๋ฅํ๋ ๊ฒ์ด ์์ฐ์ด ์ฒ๋ฆฌ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์
์ค ํ๋์
๋๋ค. ๋ฌธ์๋ฅผ ๋ถ๋ฅํ๋ ๋ฐ์๋ ๊ต์ฅํ ๋ค์ํ ๋ฐฉ๋ฒ๋ค์ด ์๋๋ฐ TF-IDF ํํ์ด ๊ทธ ์ค ํ๋์
๋๋ค.
ย
TF-IDF (Term Frequency - Inverse Document Frequency)
TF(Term Frequency)๋ ์ด๋ค ํ ๋จ์ด๊ฐ ๋ฌธ์ ๋ด์ ์ผ๋ง๋ ์์ฃผ ๋ฑ์ฅํ๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์
๋๋ค. DF(Document Frequency)๋ ๊ทธ ๋จ์ด๊ฐ ์ผ๋ง๋ ๋ง์ ๋ฌธ์์ ๋ํ๋๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ด๋ฉฐ, ์ด ๊ฐ์ ์ญ์๋ฅผ IDF(Inverse Document Frequency)๋ผ๊ณ ํฉ๋๋ค. ์ฆ, TF-IDF(Term Frequency - Inverse Document Frequency)๋ผ๋ ๊ฒ์ TF์ IDF๋ฅผ ๊ณฑํ ๊ฐ์ผ๋ก, ํน์ ํ ๋จ์ด๊ฐ ์ผ๋ง๋ ๋ค๋ฅธ ๋ฌธ์์๋ ์์ฃผ ๋ฑ์ฅํ์ง ์์ผ๋ฉด์ ๋์์ ํด๋น ๋ฌธ์์ ์์ฃผ ๋ฑ์ฅํ๋์ง๋ฅผ ์๋ ค์ค๋๋ค.
ย
ํน์ ํ ๋จ์ด์ TF ๊ฐ์ด ๋์์๋ก ์ค์ํ ๋จ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋๋ฐ, my, and, this ์ ๊ฐ์ด ๋ค๋ฅธ ๋ฌธ์์๋ ๊ต์ฅํ ๋ง์ด ๋ฑ์ฅํ๋ ๋จ์ด๋ค์ ํด๋น ๋ฌธ์์์ TF๊ฐ์ด ๋๋ค๊ณ ํ๋๋ผ๋ ์ค์ํ ๋จ์ด๋ผ๊ณ ๋ณด๊ธฐ๊ฐ ํ๋ญ๋๋ค. ๊ทธ๋์ IDF ๊ฐ์ TF์ ๊ณฑํด์ฃผ์ด ํํ ๋จ์ด๋ค์๋ ๊ฐ์ค์น๋ฅผ ๋ฎ์ถ๊ณ ํํ์ง ์์ ๋ฌธ์์ ํน์์ ์ด๋ ค์ฃผ๋ ๋จ์ด๋ค์๋ ๊ฐ์ค์น๋ฅผ ๋์
๋๋ค.
ย
TF-IDF์ ๊ณต์์ ์๋์ ๊ฐ์ด ์ ์๋ฉ๋๋ค.
- : ๋ฌธ์ y ์ ๋จ์ด x์ TF-IDF
- : ๋ฌธ์ y ์ ๋จ์ด x์ TF
- : ๋จ์ด x๋ฅผ ํฌํจํ๋ ๋ฌธ์์ ๊ฐ์
- : ์ด ๋ฌธ์์ ๊ฐ์
ย
์ฌ์ดํท๋ฐ์ ์ฌ์ฉํด TF-IDF ํํ์ ๋ง๋ค์ด๋ด
์๋ค.
#์ฐ์ ๋จ์ด ๋ถ๋ฅ from sklearn.feature_extraction.text import TfidfVectorizer text = ['I go to my home my home is very large', # Doc[0] 'I went out my home I go to the market', # Doc[1] 'I bought a yellow lemon I go back to home'] # Doc[2] tfidf_vectorizer = TfidfVectorizer() # TF-IDF ๊ฐ์ฒด์ ์ธ tfidf_vectorizer.fit(text) # ๋จ์ด๋ฅผ ํ์ต์ํด tfidf_vectorizer.vocabulary_ # ๋จ์ด์ฌ์ ์ ์ถ๋ ฅ sorted(tfidf_vectorizer.vocabulary_.items()) # ๋จ์ด์ฌ์ ์ ๋ ฌ
#์ถ๋ ฅ ๊ฒฐ๊ณผ [('back', 0), ('bought', 1), ('go', 2), ('home', 3), ('is', 4), ('large', 5), ('lemon', 6), ('market', 7), ('my', 8), ('out', 9), ('the', 10), ('to', 11), ('very', 12), ('went', 13), ('yellow', 14)]
ย
์ฝ๋ ์ ๋ฌธ์์ ๊ฐ์๋ ์ด 3๊ฐ, ๋จ์ด์ ๊ฐ์๋ ์ด 15๊ฐ(I์ a๋ ์ ์ธํจ)์
๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์์ TF ๋ฒกํฐ๋ [0,ย 0,ย 1,ย 2,ย 1,ย 1,ย 0,ย 0,ย 2,ย 0,ย 0,ย 1,ย 1,ย 0,ย 0],
๋ ๋ฒ์งธ ๋ฌธ์์ TF ๋ฒกํฐ๋ [0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0],
์ธ ๋ฒ์งธ ๋ฌธ์์ TF ๋ฒกํฐ๋ [1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1] ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ธ ๋ฌธ์์ ๋์ผํ๊ฒ ์ ์ฉ๋๋ DF ๋ฒกํฐ๋ [1,ย 1,ย 3,ย 3,ย 1,ย 1,ย 1,ย 1,ย 2,ย 1,ย 1,ย 3,ย 1,ย 1,ย 1] ์
๋๋ค.
ย
์ด TF, DF ๊ฐ๋ค์ ์ TF-IDF ๊ณต์์ ๋์
ํด์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค.
#TF-IDF ์ฝ๋ tfidf_vectorizer.transform(text).toarray()
#์ถ๋ ฅ ๊ฒฐ๊ณผ array([[0. , 0. , 0.2170186 , 0.4340372 , 0.36744443, 0.36744443, 0. , 0. , 0.55890191, 0. , 0. , 0.2170186 , 0.36744443, 0. , 0. ], [0. , 0. , 0.24902824, 0.24902824, 0. , 0. , 0. , 0.42164146, 0.3206692 , 0.42164146, 0.42164146, 0.24902824, 0. , 0.42164146, 0. ], [0.44514923, 0.44514923, 0.26291231, 0.26291231, 0. , 0. , 0.44514923, 0. , 0. , 0. , 0. , 0.26291231, 0. , 0. , 0.44514923]])
ย
TF-IDF ํํ์ ์ฌ์ฉํ๋ฉด ๊ทธ ๋ฌธ์๋ง์ ํน์ฑ์ ๊ตฌ๋ณํ ์ ์๋ ๋จ์ด๋ค์ ๊ฐ๋ ค๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฅผ ๋ค์ด ์ํ ์ฉ์ด๊ฐ ๋ง์ด ๋์จ๋ค๋ฉด ์ํ ๊ด๋ จ ๊ธ๋ก, ์์ ์ฉ์ด๊ฐ ๋ง์ด ๋์จ๋ค๋ฉด ์์ ๊ด๋ จ ๊ธ๋ก ๊ตฌ๋ถ ์ง์ผ๋ฉฐ ๋ฌธ์๋ฅผ ์ฉ์ดํ๊ฒ ๋ถ๋ฅํ ์ ์๋๋ก ํด์ค๋๋ค.
ย
TF-IDF ํํ ์ด์ธ์๋ ์ํฌํธ ๋ฒกํฐ ๋จธ์ , ํผ์ง k-ํ๊ท , ๊ณ์ธต์ ์ธ ๋ฒ ์ด์ง์ ํด๋ฌ์คํฐ๋ง๊ณผ ๊ฐ์ ์ง๋, ๋น์ง๋ ํ์ต๊ณผ ๋ ์ด๋ธ๋ ๋ฐ์ดํฐ์
์ด ์ ์ ๋ ์ ์ฉํ ๋์ด๋ธ ๋ฒ ์ด์ฆ ๋ถ๋ฅ๊ธฐ, Nearest ๋ถ๋ฅ๊ธฐ์ ๊ฐ์ ์ค์ง๋ ํ์ต์ ํตํด ๋ฌธ์๋ฅผ ๋ถ๋ฅํ๋ ๋ฐฉ๋ฒ๋ค๋ ์์ต๋๋ค. ๋ฌธ์ฅ์ด๋ ๋ฌธ์๋ฅผ ๋ถ๋ฅํ๋ฉด ์ํ ๋ฆฌ๋ทฐ์ ๊ฐ์ฑ์ ์์ธกํ๊ฑฐ๋ ์คํธ ์ด๋ฉ์ผ์ ํํฐ๋งํ๊ฑฐ๋ ์ธ์ด๋ฅผ ์๋ณํ๋ ๋ฑ ๋ค๋ฅธ ์์
์ ํ ๋๋ ์ฐ๋ฆฌ์ ์ผ์์ํ์ ๋์์ด ๋ฉ๋๋ค.
ย
์ด์ ๊ธ ์ฝ๊ธฐ
๋ค์ ๊ธ ์ฝ๊ธฐ
ย
ย