ย
ย
ย
์ค์ ์ฐ์ ์์ ๋ง์ด ์ฌ์ฉํ๋, ์ปจํ ์ธ ๊ธฐ๋ฐ ์ถ์ฒ์์คํ
ย
1) ์ปจํ ์ธ ๊ธฐ๋ฐ ์ถ์ฒ์์คํ ์ด๋? (feat. ์ ์, Represented Items)
์ปจํ
์ธ ๊ธฐ๋ฐ ์ถ์ฒ์์คํ
์ ์ฌ์ฉ์๊ฐ ์ด์ ์ ๊ตฌ๋งคํ ์ํ ์ค์์ ์ข์ํ๋ ์ํ๋ค์ด๋ ์ ์ฌํ ์ํ๋ค์ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ ์ฌํ ์ํ๋ค์ ์ฐพ๋ ๋ฐฉ๋ฒ์๋ Items๋ฅผ ๋ฒกํฐ ํํ๋ก ํํํ ๋ค, ์ ์ฌํ ๋ฒกํฐ๋ฅผ ์ฐพ๋ ๋ฐฉ์์ด ์๋ค. ์ด๋ Represented Items๋ Items๋ฅผ ๋ฒกํฐ ํํ๋ก ํํํ ๊ฒ์ผ๋ก, ๋๋ฉ์ธ์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์ ์ฉ๋๋ค.
ย
Items๋ ํฌ๊ฒ Text์ Image, ๋ ๊ฐ์ง ํํ๋ฅผ ๋๊ณ ์๋ค. ๋จผ์ Text๋ ํํ ์๋ ค์ ธ ์๋ Bert, Word2Vec, TF-IDF, Countervectorizer ๋ฑ์ ์์ฐ์ด์ฒ๋ฆฌ ๋ชจ๋ธ์ ํตํด์ ๋ฒกํฐ๋ก ๋ฐ๊ฟ ์ ์์ผ๋ฉฐ Image๋ CNN, ๋ ์ฆ๋ท, VGG ๋ฑ์ ํตํด ์ด๋ฏธ์ง๋ฅผ ํ๋ก ๋ง๋ค์ด ๋ฒกํฐ ํํ๋ก ๋ฐ๊ฟ ์ ์๋ค. ์ด๋ฌํ ๊ณผ์ ์ ํตํด ์์ ๊ณผ ์ ์ฌํ ์์๊ฐ ์ ํด์ง๋ฉด, ์ด๋ฅผ ํตํด ์ ์ฌํ ๋ฒกํฐ๋ฅผ ์ถ์ถํ ๋ค ์ด๊ฒ์ ์ถ์ฒํ๊ฒ ๋๋๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก Represented Items์ด๋ค.
ย
2) ์ ์ฌ๋ ํจ์, ์ ์ฌ๋๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ
- ์ ํด๋ฆฌ๋์ ์ ์ฌ๋
๋ฌธ์ ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ์์ผ๋ก, ์ ํด๋ฆฌ๋์ ์ ์ฌ๋๋ ์ ํด๋ฆฌ๋์ ๊ฑฐ๋ฆฌ์ ์ญ์๋ฅผ ์ทจํ ๊ฐ์ด๋ค. ์ด๋, ๋ถ๋ชจ๊ฐ 0์ด ๋๋ ๊ฒ์ ๋ง๊ธฐ ์ํด์ ์์ฃผ ์์ ์์ธ โ1e-5โ๋ฅผ ๋ํด์ค๋ค. ์ฆ, ์ ํด๋ฆฌ๋์ ์ ์ฌ๋๋ [ 1 / (์ ํด๋ฆฌ๋์ ๊ฑฐ๋ฆฌ + 1e - 5) ] ์ด๋ค.
๊ณ์ฐํ๊ธฐ๊ฐ ์ฝ๊ณ , ๋ฒกํฐ ์ปฌ๋ผ ํ๋ํ๋๊ฐ ํฌ๊ธฐ์ ๋ฏผ๊ฐํ๊ฑฐ๋ ์ค์ํ ๋ ์ ํด๋ฆฌ๋์ ์ ์ฌ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํจ๊ณผ๋ฅผ ๋ณผ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง p์ q์ ๋ถํฌ ๋ฐ ์ค์ผ์ผ์ด ๋ค๋ฅด๊ฑฐ๋ ๋ฒ์๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ ํด๋ฆฌ๋์ ์ ์ฌ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์๊ด์ฑ์ ๋์น๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ย
- ์ฝ์ฌ์ธ ์ ์ฌ๋
๋ฌธ์ ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ ๋ ๋ฒ์งธ ๋ฐฉ์์ผ๋ก, A์ B์ ํฌ๊ธฐ ๋ฐ ๋ด์ ๊ฐ์ ํตํด ๊ตฌํ ์ ์๋ค. ์ฆ, ๋ ๋ฌธ์๊ฐ ์ผ๋ง๋ ๋น์ทํ ๋ฐฉํฅ์ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ๋ฐฉํฅ์ ๋ํ ๊ฐ์ธ ฮธ๋ฅผ ์ค์ฌ์ผ๋ก ์ผ๋ง๋งํผ์ cos (ฮธ)๋ฅผ ๊ฐ์ง๋์ง๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ๊ฒ์ด ๋ฐ๋ก ์ ์ฌ๋์ด๋ค. ์ ์ฌ๋์ ํฌ๊ธฐ๋ -1์์ 1๊น์ง๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ cos (ฮธ)๊ฐ ๋์ผํ ๋ฐฉํฅ์ด๋ผ๋ฉด 1, 90ยฐ ๋ฐฉํฅ์ด๋ผ๋ฉด 0, ์ ๋ฐ๋์ ๋ฐฉํฅ์ด๋ผ๋ฉด -1์ ๊ฐ์ง๋ค.
ย
์ฝ์ฌ์ธ ์ ์ฌ๋๋ ์ฃผ๋ก ๋ฒกํฐ์ ํฌ๊ธฐ๊ฐ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๊ธฐ ์ํ ๋ฉํธ๋ฆญ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ฆ, ๋น๋์ ์์ฒด๊ฐ ์๋๋ผ ๋ฌธ์ ๋ด์ ๋น์จ์ ํ์ธํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ฝ์ฌ์ธ ์ ์ฌ๋์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ ๋ฒกํฐ์ ํฌ๊ธฐ๊ฐ ์ค์ํ ๊ฒฝ์ฐ์ ์ ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
ย
โก ์ฌ๊ธฐ์ ์ ๊น! ์ ํด๋ฆฌ๋์ ์ ์ฌ๋์ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ๊ฐ๋จํ๊ฒ ๋น๊ตํด๋ณด์.
์ ํด๋ฆฌ๋์ ์ ์ฌ๋๋ ์์์ ๋งํ ๊ฒ์ฒ๋ผ ์ ํด๋ฆฌ๋์ ๊ฑฐ๋ฆฌ๋ฅผ ํตํด์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฒกํฐ๋ฅผ ์ฐพ๋ ๋ฐฉ์์ด๋ค. ์ด์ ๋ฌ๋ฆฌ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ cos (ฮธ)์ ๋ฐฉํฅ, ์ฆ ๋ฒกํฐ ๊ฐ์ ๋ฐฉํฅ์ ์ฐพ๊ธฐ ๋๋ฌธ์ ๋ง์ฝ ๊ตฌํ๊ณ ์ ํ๋ A์ B๊ฐ ์์ง์ ์ ๊ฐ๊น๊ฒ ์์นํด ์๋ค๋ฉด ์ ํด๋ฆฌ๋์ ์ ์ฌ๋์ ๋ฌ๋ฆฌ ์ ์ฌ๋๊ฐ ๊ต์ฅํ ๋ฌ๋ผ์ง๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
ย
- ํผ์ด์จ ์ ์ฌ๋
๋ฌธ์ ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ ์ธ ๋ฒ์งธ ๋ฐฉ์์ผ๋ก, ๋ฌธ์์ ๋ฑ์ฅํ๋ ๋จ์ด์ ๋น๋์์ ๋ฑ์ฅํ๋ ํ์๋ฅผ ํตํด ๊ตฌํ ์ ์๋ค.
ย
- ์์นด๋ ์ ์ฌ๋
๋ฌธ์ ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ ๋ค ๋ฒ์งธ ๋ฐฉ์์ผ๋ก, ๋ฌธ์์ ๋ฑ์ฅํ๋ ๋จ์ด๋ค์ด ๋ฌธ์ ๊ฐ์์ ์ผ๋ง๋งํผ ๊ฒน์น๋ ์ง์ ๋ํด์ ๊ณ์ฐํ์ฌ ๊ตฌํ ์ ์๋ค. ๊ณต์งํฉ ๋๋๊ธฐ ํฉ์งํฉ์ ํํ๋ก, ์ ์ฌ๋๋ 0์์ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ๋๋ค.
ย
- ์ ํด๋ฆฌ๋์, ์ฝ์ฌ์ธ, ํผ์ด์จ, ์์นด๋ ์ ์ฌ๋ ์ธ์ Divergence, Dice, Sorensen ์ ์ฌ๋ ๋ฑ๋ ํ์ ์์ ์์ฃผ ์ฐ์ด๋ ์ ์ฌ๋์ด๋ค. ์ถ์ฒ์์คํ , ๊ณ ๊ฐ ์ง๋จ์ด๋ ๋๋ฉ์ธ ๋ฑ์ ๋ฐ๋ผ์ ์ ์ฌ๋๋ฅผ ๋ค๋ฅด๊ฒ ๊ตฌํ๋ฉฐ ์ ํํ๋ ๊ธฐ์ค ์ญ์ ์ํฉ์ ๋ฐ๋ผ ์์ดํ๋ค. ์ ํ๋๋ ํ๊ฐ์งํ๊ฐ ์ข์ ์์ผ๋ก ์ ํํ ์๋ ์๊ณ , ์ฝ๋์คํํธ๋ ๊ตฌ๋งค์จ๊ณผ ๊ฐ์ด ํ์ํ ์ํฉ์ ๋ฐ๋ผ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ๊ธฐ๋ ํ๋ค.
ย
3) TF-IDF์ ์ ์์, ๊ฐ๊ฐ์ ์๋ฏธ
TF-IDF๋ ๋จ์ด ๋น๋ TF, ์ญ๋ฌธ์ ๋น๋ DF, ๋จ์ด์ ๊ฐ์ค์น IDF ์ธ ๊ฐ์ง ์งํ๋ฅผ ํตํด์ ๋ฌธ์ ๋ด ๋จ์ด์ ๊ฐ์ค์น๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฆ, ์ด๋ ๋ค๋ฅธ ๋ฌธ์์์๋ ๊ฑฐ์ ๋ฑ์ฅํ์ง ์์ง๋ง ํน์ ๋ฌธ์ ๋ด์์๋ง ์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด๊ฐ ์๋ค๋ฉด ๊ทธ ๋จ์ด๋ฅผ ์ฐพ์ ์ด๋ฅผ ํตํด ๋ฌธ์์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ด๋ค. TF-IDF๋ ์ฃผ๋ก ๋ฌธ์์ ํต์ฌ์ด ์ถ์ถ, ๋ฌธ์ ๊ฐ์ ์ ์ฌ๋ ๊ณ์ฐ, ๊ฒ์ ๊ฒฐ๊ณผ ์ค์๋ ์ธก์ ์์
๋ฑ์์ ํ์ฉ๋๋ค.
ย
๋จผ์ TF(d, t)๋ ํน์ ๋ฌธ์ d์์ ํน์ ๋จ์ด t๊ฐ ๋ฑ์ฅํ๋ ํ์๋ฅผ ๋ชจ๋ ๊ธฐ๋กํ ๊ฒ์ด๊ณ , DF(t)๋ ํน์ ๋จ์ด t๊ฐ ๋ฑ์ฅํ ๋ฌธ์๊ฐ ๋ช ๊ฐ์ธ์ง ์ ์ฒด ๋ฌธ์ ์ค์์ ํน์ ๋จ์ด๊ฐ ๋ฑ์ฅํ ๋ฌธ์์ ๊ฐ์๋ฅผ ๋ํ๋ธ๋ค. ๋ง์ง๋ง์ผ๋ก IDF(d, t)๋ DF(t)์ ๋ฐ๋น๋กํ๋ ์๋ก ๋๋ฌด ๋ง์ด ๋ฑ์ฅํ๋ ๋จ์ด๋ ์คํ๋ ค ๋ ์ค์ํ ๋จ์ด์ด๊ธฐ ๋๋ฌธ์ ์ด์ฒ๋ผ ๋๋ฌด ๋ง์ด ๋ฑ์ฅํ๋ ๋จ์ด๋ค์๋ log๋ฅผ ์ทจํ ๋ค DF(t) ๊ฐ์ ๋ถ๋ชจ๋ก ๋ด๋ฆฌ๋ ๋ฑ ํจ๋ํฐ๋ฅผ ์ค์ ์ค์ํ ๋จ์ด๋ฅผ ์ ์ ํ ๋ฐฉ์์ ํตํด ์ก์๋ด๊ณ ์ ํ๋ค. IDF(d, t)์ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ ์ ์์ผ๋ฉฐ, TF-IDF(d, t)๋ ๋ค์๊ณผ ๊ฐ๋ค.
ย
ย
์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ํตํด ๋ฌธ์ ๋ด ๋จ์ด์ TF-IDF ๊ฐ์ ๊ณ์ฐํ์ฌ ๋ฌธ์ ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ๋ ์๊ณ ๋ฆฌ์ฆ ์ญ์ ์กด์ฌํ๋๋ฐ, ์ง๊ด์ ์ธ ํด์์ด ๊ฐ๋ฅํ๊ณ ์์์ ๋งํ ๊ฒ์ฒ๋ผ ํน์ ๋ฌธ์ ๋ด์์๋ง ์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด์ ๊ฐ์ค์น๋ฅผ ๋์ด ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ ๊ฒ์ด ๋งค์ฐ ํธ๋ฆฌํ๋ค. ๋ค๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ํฌ๊ฒ ๋ฐ์ํ๋ค๋ ๋จ์ ์ด ์์ด ๋ฌธ์์ ํฌ๊ธฐ๋ ๊ฐ์๊ฐ ์กฐ๊ธ๋ง ์ปค์ง๋๋ผ๋ ํ์ฉํ๋ ๋ฐ ์ด๋ ค์์ด ์๋ค.
ย
ย
TF-IDF ์ฝ๋
docs = [ '๋จน๊ณ ์ถ์ ์ฌ๊ณผ', # ๋ฌธ์0 '๋จน๊ณ ์ถ์ ๋ฐ๋๋', # ๋ฌธ์1 '๊ธธ๊ณ ๋ ธ๋ ๋ฐ๋๋ ๋ฐ๋๋', # ๋ฌธ์2 '์ ๋ ๊ณผ์ผ์ด ์ข์์' # ๋ฌธ์3 ]
# Counter Vectorizer ๊ฐ์ฒด ์์ฑ(TF๊น์ง์ ๊ณผ์ ๋ง ๋ด๊ธด) from sklearn.feature_extraction.text import CountVectorizer vect = CountVectorizer()
# ๋ฌธ์ฅ์ Counter Vectorizer ํํ๋ก ๋ณํ countvect = vect.fit_transform(docs) countvect # 4x9 : 4๊ฐ์ ๋ฌธ์์ 9๊ฐ์ ๋จ์ด
# toarray()๋ฅผ ํตํด์ ๋ฌธ์ฅ์ด Vector ํํ์ ๊ฐ์ ์ป์ ์ ์์ # ํ์ง๋ง, ๊ฐ ์ธ๋ฑ์ค์ ์ปฌ๋ผ์ด ๋ฌด์์ ์๋ฏธํ๋์ง์ ๋ํด์๋ ์ ์๊ฐ ์์ # sparse matrix -> numpy countvect.toarray()
# ๋์ ๋๋ฆฌ ํํ๋ก ์ถ๋ ฅ ๊ฐ๋ฅ vect.vocabulary_
# sorted ํจ์๋ฅผ ํตํด ๋จ์ด ์ ๋ ฌ sorted(vect.vocabulary_)
# Dataframe ํํ๋ก ๋ณํ import pandas as pd countvect_df = pd.DataFrame(countvect.toarray(), columns = sorted(vect.vocabulary_)) countvect_df.index = ['๋ฌธ์1', '๋ฌธ์2', '๋ฌธ์3', '๋ฌธ์4'] countvect_df
# ์์ Data Frame ํํ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐ from sklearn.metrics.pairwise import cosine_similarity cosine_similarity(countvect_df, countvect_df)
# ์๋ฏธ ์๋ ๋จ์ด๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด TFfidVectorizer ์ฌ์ฉ from sklearn.feature_extraction.text import TfidfVectorizer vect = TfidfVectorizer() tfvect = vect.fit(docs)
tfidv_df = pd.DataFrame(tfvect.transform(docs).toarray(), columns = sorted(vect.vocabulary_)) tfidv_df.index = ['๋ฌธ์1', '๋ฌธ์2', '๋ฌธ์3', '๋ฌธ์4'] tfidv_df
from sklearn.metrics.pairwise import cosine_similarity cosine_similarity(tfidv_df, tfidv_df)
from sklearn.feature_extraction.text import TfidfVectorizer vect = TfidfVectorizer(max_features=4) tfvect = vect.fit(docs)
tfidv_df = pd.DataFrame(tfvect.transform(docs).toarray(), columns = sorted(vect.vocabulary_)) tfidv_df.index = ['๋ฌธ์1', '๋ฌธ์2', '๋ฌธ์3', '๋ฌธ์4'] tfidv_df