word2vec์..
์ด๋ฌํ ํ๊ณ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ ์ฒด ๋จ์ด์งํฉ์ด ์๋ ์ผ๋ถ ๋จ์ด์งํฉ์๋ง ์ง์คํ๋ ํ์ต๋ฐฉ๋ฒ์ negative sampling skip-gram(SGNS)์ด๋ผ๊ณ ํ๋ค.
๐ฅ ๊ตฌ๊ธ gensim์์๋ sgns์ ์ ๊ณตํ๋๊ฐ?
์ ๊ณต์ X -> ์ง์ ๊ตฌ์ฑํด์ผ!
๋ฐ์ดํฐ ๊ตฌ์ฑ
์ผ๋ผ์ค์์ ์ ๊ณตํ๋ skipgram์ '์ ์ฒ๋ฆฌ ๊ธฐ๋ฅ'์ ์ฌ์ฉํ์ฌ
์ค์ฌ๋จ์ด์ ์ฃผ๋ณ๋จ์ด์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ์๋ 1์ ๋ ์ด๋ธ์, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ 0์ ๋ ์ด๋ธ์ ๊ฐ์ง๋๋ก ๋ฐ์ดํฐ์ ์ ๊ตฌ์ฑํ๋ค.
ํ์ต๊ณผ์
skip-gram๊ณผ ๋ฌ๋ฆฌ gensim์ ๊ทธ๋๋ก ์ด์ฉํ๋ ๊ฒ์ด ์๋๋ผ
< ์ค์ฌ๋จ์ด๋ฅผ ์ํ ์๋ฒ ๋ฉ ํ ์ด๋ธ >
< ์ฃผ๋ณ๋จ์ด๋ฅผ ์ํ ์๋ฒ ๋ฉ ํ ์ด๋ธ >
์ด๋ ๊ฒ 2๊ฐ์ ํ ์ด๋ธ์ ๋ง๋ค๊ณ
ํ์ฑํํจ์(์๊ทธ๋ชจ์ด๋ ์ฌ์ฉ)๋ฅผ ๊ฑฐ์ณ
(๋จ์ด์ ์๋ฒ ๋ฉ ํ ์ด๋ธ ๊ฐ์ ๋ด์ ๊ฒฐ๊ณผ)๋ฅผ ํตํด 1๋๋ 0์ผ๋ก ์์ธกํ๋๋ก ํ์ต!!
๊ฒฐ๊ณผ ํ์ธํ๊ธฐ
ํ์ต๋ ์๋ฒ ๋ฉ ๋ฒกํฐ๋ค์ vector.txt์ ์ ์ฅf = open('vectors.txt' ,'w') f.write('{} {}\n'.format(vocab_size-1, embed_size))
๊ทธ ํ gensim์ models.KeyedVectors.load_word2vec_format()์ผ๋ก ๋ก๋ํ๋ฉด ๋จ์ด ๋ฒกํฐ๋ค ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ตฌํ ์ ์๋ค.
์ผ๋ถ ๋จ์ด์งํฉ์๋ง ์ง์คํ๊ธฐ ์ํด ์ผ๋ถ negativeํ ์ํ๋ง ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์ด ํ์ตํด์ผ ํ ๋ฐ์ดํฐ์ ์์ ์ค์ธ๋ค.
(์ฝ๊ฐ ๋ฐ์ดํฐ์ ๋ฐ๋ก๋ฅผ ์ถ๊ฐํ๋ ๋๋?!)
Skip-Gram์์๋ ๋ชจ๋ ๋จ์ด๋ค์ ๋ํด์ ์ค์ฌ๋จ์ด-์ฃผ๋ณ๋จ์ด ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ตํ์๋ค. ๊ทธ๋ก์ธํด ํ์ต์ ์์ด ๊ต์ฅํ ๋ง์์ก๋ค.
์๋ฅผ ๋ค์ด, ์ด 10,000๊ฐ์ ๋จ์ด๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ค.
ํ์ตํด์ผ ํ ์๋ฒ ๋ฉ ๋ฒกํฐ(์ฃผ๋ณ๋จ์ด)๋ 300๊ฐ๋ผ๊ณ ํ๋ค.
Skip-Gram์์๋ ์๋ฒ ๋ฉ ๋ฒกํฐ๋ฅผ ํ์ตํ๊ธฐ ์ํ ์ํํธ๋งฅ์ค ๋จ๊ณ์ ํ๋ ฌ์ ์์๊ฐ 10,000 x 300 = 3,000,000๊ฐ๊ฐ ๋๋ค.
SGNS์์๋ ๋ฌธ์์ ๋ชจ๋ ๋จ์ด๊ฐ ์๋๋ผ k+1๊ฐ์ ๋จ์ด์ ๋ํด์๋ง ์๋ฒ ๋ฉ ๋ฒกํฐ๋ฅผ ํ์ตํ๊ฒ ๋๋ค.
ํ์ตํ ๋ฐ์ดํฐ์๋ 1๊ฐ์ positiveํ sample๊ณผ k๊ฐ์ negativeํ sample์ด ์กด์ฌํ๋ค. ์ด k+1๊ฐ์ ์ํ์ ๋ํด์๋ง ํ์ตํ๋ค.
์์
๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ฅ์ด ์๋ค๊ณ ๊ฐ์ ํ์๋,,
- ์ค์ฌ๋จ์ด
<๋ณ๋๋ก>
- positive sample
positive์ ์ฃผ๋ณ๋จ์ด๋ ์ค์ฌ๋จ์ด๋ฅผ ์ค์ฌ์ผ๋ก window size์ ๊ธฐ๋ฐํ์ฌ ์ ํ๋ค.
์์ ๊ฒฝ์ฐ์๋ positive์ ์ฃผ๋ณ๋จ์ด๋<๋ฐฑ๋์ฐ์ด, ๋ง๋ฅด๊ณ , ํ๋๋์ด, ๋ณด์ฐํ์ฌ>
์ด๋ค.
์ด์ positive sample์
<๋ณ๋๋ก, ๋ฐฑ๋์ฐ์ด>, <๋ณ๋๋ก, ๋ง๋ฅด๊ณ >, <๋ณ๋๋ก, ํ๋๋์ด>, <๋ณ๋๋ก, ๋ณด์ฐํ์ฌ>
์ด๋ค.
positive sample์ 1๊ฐ์ด๋ค.
- negative sample
negative sample์ ํน์ ํ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ sampling ํ๋ค.(ํน์ ํ ๋ฐฉ๋ฒ์ ์๋์์ ์๊ฐ)
์ํ๋งํ ๋จ์ด๋ค์ ์ค์ฌ๋จ์ด์ ์์ผ๋ก ์ด๋ฃจ์ด negative sampling ๋ฐ์ดํฐ๋ฅผ ๋ง๋ ๋ค.
์ด negative sample์ k๊ฐ์ด๋ค.
์๋์ฐ ์ฌ์ด์ฆ์ ๊ธฐ๋ฐํ ๋ค๊ฑฐํฐ๋ธ ์ํ์ k๊ฐ ๋งํผ ๋ง๋ค์ด์ค๋ค.
์ฒซ๋ฒ์งธ ์๋ฒ ๋ฉ ํ
์ด๋ธ์ ์ค์ฌ ๋จ์ด(์
๋ ฅ1)์ ํ
์ด๋ธ ๋ฃฉ์
์ ์ํ ๊ฒ์ด๊ณ ,
๋๋ฒ์งธ ํ
์ด๋ธ์ ์
๋ ฅ 2์ธ ์ฃผ๋ณ ๋จ์ด์ ํ
์ด๋ธ ๋ฃฉ์
์ ์ํ ์๋ฒ ๋ฉ ํ
์ด๋ธ์ด๋ค.
๊ฐ ๋จ์ด๋ ๊ฐ ์๋ฒ ๋ฉ ํ
์ด๋ธ์ ํ
์ด๋ธ ๋ฃฉ์
ํ์ฌ ์๋ฒ ๋ฉ ๋ฒกํฐ๋ก ๋ณํ๋๋ค.
(๋จ์ด ์ ์ ๊ฐ ์ ๋ผ์์ง๋ ์์ง๋ง ์ํด๋ฐ๋)
์ข์ธก์ ์ค์ฌ๋จ์ด์ ๋ํ ์๋ฒ ๋ฉ ํ
์ด๋ธ
์ฐ์ธก์ ์ฃผ๋ณ๋จ์ด์ ๋ํ ์๋ฒ ๋ฉ ํ
์ด๋ธ
ํ์ต์ด ๊ณ์๋จ์ ๋ฐ๋ผ ์๋ฒ ๋ฉ ํ
์ด๋ธ์ ๊ณ์ํด์ ์
๋ฐ์ดํธ ๋ ๊ฒ์ด๋ค.
์ข์ธก ํ
์ด๋ธ์ ์๋์ฐ๊ฐ ์ฌ๋ผ์ด๋ฉ ๋ ๋๋ง๋ค ๋ค๋ฅธ ๋จ์ด๋ค๋ ์
๋ฐ์ดํธ ๋ ๊ฒ์ด๊ณ ,
์ฐ์ธก ํ
์ด๋ธ์ ๋งค ํ์ต์๋ง๋ค positiveํ ์ฃผ๋ณ๋จ์ด+negativeํ ์ฃผ๋ณ๋จ์ด ๊ฐ ์
๋ฐ์ดํธ ๋ ๊ฒ์ด๋ค.
๋ชจ๋ ์์ ๋ํ์ฌ ์ค์ฌ๋จ์ด์ ์ฃผ๋ณ๋จ์ด์ ๋ด์ ๊ฐ์ ์ค์ฝ์ด๋ฒกํฐ(์์ธก๊ฐ)์ผ๋ก ๋ณธ๋ค.
์ค์ฝ์ด๋ฒกํฐ์ ๋ ์ด๋ธ(1, 0)๊ณผ์ ์ค์ฐจ๋ก๋ถํฐ ์ญ์ ํ ํ์ฌ
์ค์ฌ๋จ์ด์ ์ฃผ๋ณ๋จ์ด์ ์๋ฒ ๋ฉ ํ
์ด๋ธ(๋ฒกํฐ)๋ฅผ ์
๋ฐ์ดํธํ๋ค.
ํ์ต์ด ์๋ฃ๋ ํ์๋
(1) ๋ ํ๋ ฌ์ ๋ํ์ฌ ์ฌ์ฉํ๊ฑฐ๋
(2) ๋ ํ๋ ฌ์ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ๊ฑฐ๋
(3) ์ข์ธก์ ํ๋ ฌ(์ค์ฌ๋จ์ด์ ๋ํ ์๋ฒ ๋ฉ ๋ฒกํฐ)์ ์ฌ์ฉํ๋ค.
์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ,
์ด ๋จ์ด๋ค์ด negative sampling์ผ๋ก ๋ฝํ ์ ์๊ฒ๋ ํ๋ค.
๊ณต์
์์
(์์ ๋ด์ฉ ๋ถ๊ฐ์ค๋ช )
w_1์ ์๋ ๋ฑ์ฅํ๋ฅ ์ด 0.1
์ฌ๊ธฐ์ negative sample ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌw_1์ 0.1284
๊ฐ ๋จ!
์ฆ, ์ ๋ฑ์ฅํ์ง์๋ ๋จ์ด์ ๋์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํจ์ผ๋ก์จ negative sample์ด ๋ ์ ์๊ฒ๋ ํ๊ฑฐ์!
๋ฐ๋ฉด์.
w_4๋ ์๋ ๋ฑ์ฅํ๋ฅ ์ด 0.4
negative ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋w_4๋ 0.3631
๋ก ๊ฐ์ค์น๊ฐ ๋ฎ์์ง
์์ฃผ ๋ฑ์ฅํ๋ ๋จ์ด์์ผ๋ก ๋ฎ์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ฌ negative sample๋ก ์ ์๋ฝํ๊ฒ ํ๋๊ฑฐ์!!!!
SGNS
= (1+k) x (์ฃผ๋ณ๋จ์ด)
์์ ์์์์์ ๊ฒฐ๊ด๊ฐ
skip-gram์ ๋ค์ค๋ถ๋ฅ ํ์ต๋ฐฉ์์ด๋ค.
I love you so much
๋ ๋ฌธ์ฅ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ฉด
skip-gram์ ์ค์ฌ๋จ์ด์ ๋ํ ์ฃผ๋ณ๋จ์ด๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ณด๋ ๊ฒ
๋ค์ค๋ถ๋ฅ. ๋ต ํ ๊ฒ์ด ๋ง์
SGNS์ love
์ you
๋จ์ด๊ฐ ์๋ค๋ฉด ๋์ ๊ด๊ณ๋ positiveํ๊ฐ? negativeํ๊ฐ?๋ฅผ ์๋ ๊ฒ.
๊ธ์ ์ธ์ง ๋ถ์ ์ธ์ง๋ง ์๋ ค๋ฌ๋ผ.