-- ๋ณธ ํฌ์คํ ์ ํ์ดํ ์น๋ก ๋ฐฐ์ฐ๋ ์์ฐ์ด ์ฒ๋ฆฌ (ํ๋น๋ฏธ๋์ด) ์ฑ ์ ์ฐธ๊ณ ํด์ ์์ฑ๋ ๊ธ์ ๋๋ค.
1. ์ง๋ํ์ต
์ง๋ํ์ต์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ์ ๋๋ ํ๋ จ ๋ฐ์ดํฐ(์ํ)์ ๋ ์ด๋ธ(ํ๊ฒ๊ฐ)์ด ํฌํจ๋์ด ์๋ ๋ฐฉ์์ ๋งํ๋ค.
1.1 NLP์์์ ์ง๋ ํ์ต
๋ฌธ์ ๋ถ๋ฅ ์์คํ ์ ์์๋ก ๋ ๋ค๋ฉด, ํ๋ จ๋ฐ์ดํฐ(์ํ)์ ๋ฌธ์๊ฐ ๋ ๊ฒ์ด๊ณ , ๋ ์ด๋ธ(ํ๊ฒ)์ ๋ฒ์ฃผํ ๋ ์ด๋ธ์ด ๋ ๊ฒ์ด๋ค. ๊ธฐ๊ณ๋ฒ์ญ์ ์์๋ก ๋ ๋ค๋ฉด ํ๋ จ๋ฐ์ดํฐ(์ํ)์ ํ ์ธ์ด์ ๋ฌธ์ฅ, ๋ ์ด๋ธ(ํ๊ฒ)์ ๋ค๋ฅธ ์ธ์ด์ ๋ฌธ์ฅ์ด ๋ ๊ฒ์ด๋ค.
1.2 ์ง๋ํ์ต์ ํ๋ ์ ์ํฌ
์ง๋ํ์ต์ ํ๋ ์์ํฌ๋ฅผ ๊ทธ๋ ค๋ณธ๋ค๋ฉด ์๋์ ๊ฐ๋ค. ํ๋ผ๋ฏธํฐ๋ ๋ชจ๋ธ์ ๊ท์ ํ ๋์ ๊ฐ์ค์น๋ฅผ ์๋ฏธํ๋ค. ์์คํจ์๋ ๋ชจ๋ธ์ ํตํด ๊ตฌํด์ง ์์ธก๋ ๊ฐ์ด ์ค์ ํ๊ฒ๊ณผ ์ผ๋ง๋ ๊ฐ๊น์ด์ง, ๋จผ์ง๋ฅผ ๋น๊ตํ๋ ํจ์์ธ๋ฐ, ์ด๋ฅผ 'loss(์์ค)'์ด๋ผ๊ณ ํ๋ค. ์ด loss๊ฐ์ ์ต์๋ก ํ๋ ๋ชจ๋ธ์ ๊ตฌ์ถํด์ผ๋ง ํ๋ค.
2. ์ธ์ฝ๋ฉ ๋ฐฉ์
2.1 ์ธ์ฝ๋ฉ
๋ฅ๋ฌ๋/๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ธฐ ์ํด์๋ data๋ฅผ ์์น๋ก ํํํด์ผ ํ๋ค. NLP์์๋ ์์ ๋ณด์ด๋ ํ๋ ์ ์ํฌ์ ์ ๋ ฅ๊ฐ์ด ๋๋ data(์ํ+ํ๊ฒ)์ ํ ์คํธ ํํ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ 'ํ๊ฒ'๊ณผ '์ํ'์ด ๋ ์๋ง์ ํ ์คํธ ๋ฐ์ดํฐ๋ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์ ํํ๋ ๋ฐ์ดํฐ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค. '์ ๋ณด์ ํ์์ ๋ณํํ๋ ์ฒ๋ฆฌ ๋ฐฉ์'์ ์ธ์ฝ๋ฉ์ด๋ผ๊ณ ํ๊ณ ์ฐ๋ฆฌ๋ ์ด ๊ณผ์ ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ํํ ์ ์๋ค.
2.2 ์ํซ์ธ์ฝ๋ฉ (one-hot encoding)
์ํซ ์ธ์ฝ๋ฉ์ด๋, ํ ์คํธ๋ฅผ 0 ๋๋ 1๋ก ํํํ๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด๋ค. ๋จ์ด์ ์งํฉ์ ํฌ๊ธฐ๋ฅผ ๋ฒกํฐ์ ์ฐจ์์ผ๋ก ํ๊ณ , ํํํ๊ณ ์ถ์ ๋จ์ด์ ์ธ๋ฑ์ค์ 1์, ๋๋จธ์ง ๋จ์ด์ ์ธ๋ฑ์ค๋ฅผ 0์ผ๋ก ์ง์ ํ๋ ๋ฐฉ์์ด๋ผ๊ณ ์ค๋ช ํ ์ ์๋ค. ์๋ ์์๋ก ์ค๋ช ํด ๋ณด๋ฉด,
I like apple.
I like banana.
์ด๋ ๊ฒ ๋ ๋ฌธ์ฅ์ ํ ํฐ*์ผ๋ก ๋๋๊ณ ํํํด๋ณด๋ฉด,
{i, like, apple, banana}
์ด๋ ๊ฒ ํฌ๊ธฐ๊ฐ 4์ธ ์ดํ ์ฌ์ ์ด ์์ฑ๋๋ค.
์ด๋ ๊ฒ ์ดํ ์ฌ์ ์ผ๋ก ํํ๋๋ค๋ฉด, ์ด ์ดํ ์ฌ์ ์ '4์ฐจ์ ๋ฒกํฐ'๋ก ๋ํ๋ผ ์ ์๋ค.
๊ฐ ๋จ์ด๊ฐ ํ๋์ ๋ฒกํฐ๋ก ํํ๋์๊ธฐ ๋๋ฌธ์, "I like apple" ๋ฌธ์ฅ์ ์ํซ์ธ์ฝ๋ฉ ํ๊ฒ ๋๋ฉด, 3x4 ํํ์ ํ๋ ฌ๋ก ํํ๋ ๊ฒ์ด๋ค.
# I like apple ์ํซ์ธ์ฝ๋ฉ
[[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0]]
ํ์ง๋ง ์ดํ์ฌ์ ์ ์ดํด๋ณด๋ฉด, like๋ ๋ฌด์กฐ๊ฑด ๋์ผ ๋จ์ด๋ผ๊ณ ์๊ฐ๋์ด ์ดํ์ฌ์ ์ 'ํ๋'๋ง ๋ค์ด๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง like๋ ์ข์ํ๋ค ์ ์๋ฏธ์, ~์ ๊ฐ์ ๋ฑ ํ ๋จ์ด์ ์ฌ๋ฌ๊ฐ์ง ๋ป์ ๊ฐ์ง ๋ค์์ด ์ด๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ํซ์ธ์ฝ๋ฉ์ ๋ค์์ด์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ถ๋ถ๋ช ํ๊ณ , like๊ฐ ํฌํจ๋ ๋ฌธ์ฅ์ ๋ฌธ๋งฅ์ ํ์ ํ ์ ์๋ค๋ ๋จ์ ์ด ๋ถ๋ช ํ ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ๋ฌธ๋งฅ์ ํ์ ํ๊ณ , ํด๋น ๋จ์ด์ ๋ป์ ํ์ ํ๋ ๋ฐฉ๋ฒ๋ก ์ ์์ฆ ์ฃผ๋ชฉ๋ฐ๊ณ ์๋ค, ์ด๋ ์ถํ ์ถ๊ฐ๋ก ๊ณต๋ถํ๋ฉด์ ๋ค๋ค๋ณด๊ธฐ๋ก ํ์.
2.3 TF ํํ
TF ํํ์ Term Frequency์ ์ค์๋ง๋ก ํด๋น ๋จ์ด๊ฐ ๋ฌธ์(๋ฌธ์ฅor๋ง๋ญ์น)์ ๋ฑ์ฅํ๋ ํ์๋ฅผ ํ์ฉํ ํํ ๋ฐฉ์์ด๋ค.
from sklearn.feature_extraction.text import CountVectorizer
import seaborn as sns
corpus = ['I like apple',
'I like banana']
one_hot_vectorizer = CountVectorizer(binary = True)
one_hot = one_hot_vectorizer.fit_transform(corpus).toarray()
vocab = one_hot_vectorizer.get_feature_names()
sns.heatmap(one_hot, annot = True,
cbar = False, xticklabels = vocab,
yticklabels = ['Sentence1', 'Sentence2'])
์ฒซ๋ฒ์งธ ๋ฌธ์ฅ์์๋ banana๊ฐ ๋ฑ์ฅํ์ง ์์์ 0์ด ์ถ๋ ฅ๋๊ณ , ๋๋ฒ์จฐ๋ apple์ด 0์ด๋ค.
2.4 TF-IDF
TF๋ Term Frequency ์ ์ค์๋ง์ด๊ณ , IDF๋ Inverse Document Frequency ์ ์ค์๋ง์ด๋ค. ๋ง๊ทธ๋๋ก idf๋ '์ญ๋ฌธ์ ๋น๋'๋ฅผ ์๋ฏธํ๋ค.
TF๋ ๋จ์ด์ ๋ฑ์ฅ ํ์์ ๋น๋กํ๊ฒ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๊ฒ ๋์ด์๋ค. ํ์ง๋ง, ํ ๋ฌธ์ฅ์ด ์๋๋ผ, '๋ฌธ์ ์ ์ฒด'๋ฅผ ๋ณธ๋ค๋ฉด, ์์ฃผ ์์ฃผ ๋ฑ์ฅํ๋ ๋ง ๋ณด๋ค๋, ์ ๊ฒ ๋ฑ์ฅํ์ง๋ง, ์์ฃผ ํต์ฌ์ ์ธ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์๋ค. ๋ฐ๋ผ์ ๋ง๊ทธ๋๋ก IDF๋ ํํ ํ ํฐ์ ์ ์๋ฅผ ๋ฎ๊ฒ, ๋๋ฌผ๊ฒ ๋ฑ์ฅํ๋ ํ ํฐ์ ์ ์๋ ๋๊ฒ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ์์ ๋งํ๋ค.
ํ ํฐ w์ IDF๋ ์๋ ๊ณต์์ผ๋ก ๊ตฌํ ์ ์๋ค. (log๋ฅผ ์ทจํด์ค ์ด์ ๋, ๋น๋์๊ฐ ์ปค์ง๋ฉด ์๊ฐ ๊ด๋ฒ์ํ๊ฒ ์ปค์ง๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ค์ผ์ผ ์กฐ์ ์ ์ด์ ๋ก log๋ฅผ ์ทจํด์ฃผ์๋ค๊ณ ๊ฐ๋จํ๊ฒ ์ดํดํ๋ฉด ๋๋ค.)
TF-IDF๋ TF(w)์ IDF(w)๋ฅผ ๊ณฑํ ๊ฐ์ ์๋ฏธํ๋ค.
์ด ๊ณต์์ผ๋ก๋ถํฐ ์๊ฐํด๋ณด๋ฉด ๋ชจ๋ ๋ฌธ์์์ ๋น ์ง์์ด ๋ฑ์ฅํ๋ ๋จ์ด๋ (N = nw) ๊ฐ ๋๊ธฐ ๋๋ฌธ์ IDF(w)๊ฐ 0์ด ๋๋ค. ๋ฐ๋ผ์ TF-IDF ์ ์๋ 0์ด ๋๊ฒ ๋๋ค. ๋ฐ๋ฉด์ ๋จ์ด๊ฐ ๋๋ฌผ๊ฒ ๋ฑ์ฅํ๋ ๋จ์ด์ผ ๊ฒฝ์ฐ, ํนํ w๋ฅผ ํฌํจํ๋ ๋ฌธ์๊ฐ ๋ฑ ํ ๊ฐ์ผ ๊ฒฝ์ฐ๋ IDF ์ต๋๊ฐ์ logN์ด ๋ ๊ฒ์ด๋ค.
์๋๋ sklearn์ ํ์ฉํ์ฌ TF-IDF๋ฅผ ๋ง๋ค์ด๋ณธ ์ฝ๋ ์์์ด๋ค. (ํ์ดํ ์น๋ก ๋ฐฐ์ฐ๋ ์์ฐ์ด์ฒ๋ฆฌ p.26)
from sklearn.feature_extraction.text import TfidfVectorizer
import seaborn as sns
tfidf_vectorizer = TfidfVectorizer()
tfidf = tfidf_vectorizer.fit_transform(corpus).toarray()
sns.heatmap(tfidf, annot= True, cbar = False,
xticklabels = vocab, yticklabels = ['sentence1', 'sentence2'])
--> like๋ sentence1, sentence2 ๋๊ฐ์์ ๋ชจ๋ ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์ tfidf๊ฐ ์๋์ ์ผ๋ก ๋ฎ๊ฒ ๋์๊ณ , ์ ๋ํฌํ ๋จ์ด์ธ apple๊ณผ banana๋ tfidf๊ฐ ์๋์ ์ผ๋ก ๋๊ฒ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์์ ์ฝ๋๋ฅผ ๋ณด์๋ฏ์ด, sklearn์์๋ tfidf๋ฅผ ๊ณ์ฐํ๋ ๋ฉ์๋๊ฐ ๋ฐ๋ก ์กด์ฌํ๋ค. ๋ฐ๋ผ์ ํธํ๊ฒ ์ธ์ฝ๋ฉ์ ์ํํ ์ ์๋ค. sklearn์์ ์ํ๋๋ IDF์ ๊ณ์ฐ ๊ณผ์ ์ ์ดํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
๋ถ๋ชจ์ ๋ถ์์ 1์ ๋ํด ๋ถ๋ชจ๊ฐ 0์ด ๋๋ ์ํฉ์ ๋ฐฉ์งํ๋ค. ๋ํ ๋ง์ง๋ง์ 1์ ๋ํด์ ๋ชจ๋ ๋ฌธ์์ ํฌํจ๋ ๋จ์ด๊ฐ ์์ ๋ IDF๊ฐ 0์ด ๋์ง ์๊ฒ ๋ง๋ค์ด์ฃผ๋ ์์ด๋ค.
sklearn์์ ๊ณ์ฐํ๋ IDF๋ฅผ ํ์ด์ฌ์ผ๋ก ๊ตฌํํด๋ณด๋ ๋ฐฉ๋ฒ์ ์๋ ์ํค๋
์ค ๋ฌธ์์์ ์ดํด๋ณผ ์ ์๋ค.
์ฐธ๊ณ ) https://wikidocs.net/31698
2.5 ํ๊ฒ์ธ์ฝ๋ฉ (Target Encoding)
๋ผ๋ฒจ์ธ์ฝ๋ฉ, ์ํซ์ธ์ฝ๋ฉ๊ณผ ๊ฐ์ด ๊ฐ ๊ฐ์ ์ซ์(์ธ๋ฑ์ค)๋ฅผ ๋ถ์ฌํ๋ ๋ฐฉ์์ ์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ์ ๋จ์ ์, ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ธ์ํ ๋ ๋ฒ์ฃผํ์ ์๋ฏธ๋ฅผ ๋ด์ ์ซ์(์ธ๋ฑ์ค)๊ฐ ์๋๋ผ, ํด๋น ์์ ํฌ๊ธฐ, ํด๋น ์์ ์์ ๋ฑ์ ๊ณ ๋ คํ๊ฒ ๋ ์๋ ์๋ค. ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ๋ผ๋ฒจ์ธ์ฝ๋ฉ, ์ํซ์ธ์ฝ๋ฉ์ ๋ชฉ์ ์์ฒด๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค. ๋ํ ๋ ์ด๋ธ ์๊ฐ ๋๋ฌด ์ปค์ง๋ฉด ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ๋ ํ๋ค.
๋ฐ๋ผ์ ๋ฑ์ฅํ๊ฒ TF ์ธ์ฝ๋ฉ ๋ฐฉ์๊ณผ ํ๊ฒ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด๋ค.
๋๋ถ๋ถ์ NLP ๋ฌธ์ ์์๋ ๋ฒ์ฃผํ ๋ ์ด๋ธ์ ์ฌ์ฉํ๋ค. ๋ชจ๋ธ์ ๊ณ ์ ๋ ํ ์ธํธ์ ๋ ์ด๋ธ ์ค ํ๋๋ฅผ ์์ธกํด์ผ ํ๋ค. ์ผ๋ถ NLP๋ฌธ์ ๋ ์ด๋ค ์ํ์ ์ซ์ ๋ฑ๊ธ์ ์์ธกํ๊ฑฐ๋, ํด๋น ๋ฌธ์๋ฅผ ์ฝ์ ์ฐ๋ น๋๋ฅผ ์์ธกํ๊ฑฐ๋, ๋ฆฌ๋ทฐ์ ํ์ ์ ์์ธกํด์ผํ๋ ๋ฑ ์ฃผ์ด์ง ํ ์คํธ์์ ์์น๋ฅผ ์์ธกํ๊ฒ ๋๋ค. ์ด๋ด๋๋ ์์น ํ๊ฒ์ ์ธ์ฝ๋ฉํ๋ 'ํ๊ฒ์ธ์ฝ๋ฉ'์ด ์ ํฉํ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค.
๊ฐ๋จํ๊ฒ ํ๊ฒ์ '0-18'', '19-25', '25-30'๊ณผ ๊ฐ์ ๋ฒ์ฃผํ ๊ตฌ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ณ , ์์๊ฐ ์๋ ๋ถ๋ฅ ๋ฌธ์ ๋ก ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํน์, ๊ฐ์ ํ๊ท ๊ฐ์ผ๋ก ๋ฌธ์ ๋ฅผ ๋ค๋ค ์์น๋ก ํํํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
ํ๊ฒ์ธ์ฝ๋ฉ์ ์์๋ ์๋ ์ฐธ๊ณ ๊ธ์์ ์์ธํ ์์๋ฅผ ๋ณผ ์ ์๋ค.
์ฐธ๊ณ ) https://eda-ai-lab.tistory.com/569