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 Sampling

์ผ๋ถ€ ๋‹จ์–ด์ง‘ํ•ฉ์—๋งŒ ์ง‘์ค‘ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ negativeํ•œ ์ƒ˜ํ”Œ๋ง ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ์–ด ํ•™์Šตํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ์˜ ์–‘์„ ์ค„์ธ๋‹ค.
(์•ฝ๊ฐ„ ๋ฐ์ดํ„ฐ์— ๋ฐ˜๋ก€๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋Š๋‚Œ?!)




๐Ÿ˜„ SGNS (Skip-gram Negative Sampling)

Skip-Gram์—์„œ๋Š” ๋ชจ๋“  ๋‹จ์–ด๋“ค์— ๋Œ€ํ•ด์„œ ์ค‘์‹ฌ๋‹จ์–ด-์ฃผ๋ณ€๋‹จ์–ด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ•™์Šตํ•˜์˜€๋‹ค. ๊ทธ๋กœ์ธํ•ด ํ•™์Šต์˜ ์–‘์ด ๊ต‰์žฅํžˆ ๋งŽ์•„์กŒ๋‹ค.


์˜ˆ๋ฅผ ๋“ค์–ด, ์ด 10,000๊ฐœ์˜ ๋‹จ์–ด๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์„œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
ํ•™์Šตํ•ด์•ผ ํ•  ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ(์ฃผ๋ณ€๋‹จ์–ด)๋Š” 300๊ฐœ๋ผ๊ณ  ํ•œ๋‹ค.
Skip-Gram์—์„œ๋Š” ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ๋งฅ์Šค ๋‹จ๊ณ„์˜ ํ–‰๋ ฌ์˜ ์š”์†Œ๊ฐ€ 10,000 x 300 = 3,000,000๊ฐœ๊ฐ€ ๋œ๋‹ค.



SGNS์—์„œ๋Š” ๋ฌธ์„œ์— ๋ชจ๋“  ๋‹จ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ k+1๊ฐœ์˜ ๋‹จ์–ด์— ๋Œ€ํ•ด์„œ๋งŒ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๋ฅผ ํ•™์Šตํ•˜๊ฒŒ ๋œ๋‹ค.




1) SGNS์—์„œ๋Š” Skip-Gram๊ณผ ๋‹ฌ๋ฆฌ (์ค‘์‹ฌ๋‹จ์–ด์™€ ์ฃผ๋ณ€๋‹จ์–ด์˜ '์Œ')์„ ์ด์šฉํ•œ๋‹ค.




2) (์ค‘์‹ฌ๋‹จ์–ด-์ฃผ๋ณ€๋‹จ์–ด)์— ๋Œ€ํ•ด์„œ๋Š” positive๋ฅผ,

(์ค‘์‹ฌ๋‹จ์–ด-์ฃผ๋ณ€๋‹จ์–ด๊ฐ€ ์•„๋‹Œ ๋‹จ์–ด)์— ๋Œ€ํ•ด์„œ๋Š” negative๋ฅผ ์ทจํ•ด์ค€๋‹ค.

ํ•™์Šตํ•  ๋ฐ์ดํ„ฐ์—๋Š” 1๊ฐœ์˜ positiveํ•œ sample๊ณผ k๊ฐœ์˜ negativeํ•œ sample์ด ์กด์žฌํ•œ๋‹ค. ์ด k+1๊ฐœ์˜ ์ƒ˜ํ”Œ์— ๋Œ€ํ•ด์„œ๋งŒ ํ•™์Šตํ•œ๋‹ค.




3) positive sample์€ ๋ ˆ์ด๋ธ”์„ 1๋กœ, negative sample์€ ๋ ˆ์ด๋ธ”์„ 0์œผ๋กœ ๋‘”๋‹ค.


์˜ˆ์‹œ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์žฅ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„๋•Œ,,

  • ์ค‘์‹ฌ๋‹จ์–ด
    <๋‹ณ๋„๋ก>

  • positive sample
    positive์˜ ์ฃผ๋ณ€๋‹จ์–ด๋Š” ์ค‘์‹ฌ๋‹จ์–ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ window size์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ •ํ•œ๋‹ค.
    ์œ„์˜ ๊ฒฝ์šฐ์—๋Š” positive์˜ ์ฃผ๋ณ€๋‹จ์–ด๋Š” <๋ฐฑ๋‘์‚ฐ์ด, ๋งˆ๋ฅด๊ณ , ํ•˜๋Š๋‹˜์ด, ๋ณด์šฐํ•˜์‚ฌ> ์ด๋‹ค.
    ์ด์— positive sample์€
    <๋‹ณ๋„๋ก, ๋ฐฑ๋‘์‚ฐ์ด>, <๋‹ณ๋„๋ก, ๋งˆ๋ฅด๊ณ >, <๋‹ณ๋„๋ก, ํ•˜๋Š๋‹˜์ด>, <๋‹ณ๋„๋ก, ๋ณด์šฐํ•˜์‚ฌ> ์ด๋‹ค.


    positive sample์€ 1๊ฐœ์ด๋‹ค.



  • negative sample
    negative sample์€ ํŠน์ •ํ•œ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ sampling ํ•œ๋‹ค.(ํŠน์ •ํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์—์„œ ์†Œ๊ฐœ)
    ์ƒ˜ํ”Œ๋งํ•œ ๋‹จ์–ด๋“ค์„ ์ค‘์‹ฌ๋‹จ์–ด์™€ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด negative sampling ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ ๋‹ค.


    ์ด negative sample์€ k๊ฐœ์ด๋‹ค.
    ์œˆ๋„์šฐ ์‚ฌ์ด์ฆˆ์— ๊ธฐ๋ฐ˜ํ•œ ๋„ค๊ฑฐํ‹ฐ๋ธŒ ์ƒ˜ํ”Œ์„ k๊ฐœ ๋งŒํผ ๋งŒ๋“ค์–ด์ค€๋‹ค.





4) (ํ•™์Šต๊ณผ์ •) Input์œผ๋กœ๋Š” (์ค‘์‹ฌ๋‹จ์–ด-์ฃผ๋ณ€๋‹จ์–ด์˜ ์Œ)์„ ๋„ฃ๋Š”๋‹ค.

์ค‘์‹ฌ๋‹จ์–ด์™€ ์ฃผ๋ณ€๋‹จ์–ด์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋‘๊ฐœ์˜ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•œ๋‹ค.

์ฒซ๋ฒˆ์งธ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”์€ ์ค‘์‹ฌ ๋‹จ์–ด(์ž…๋ ฅ1)์˜ ํ…Œ์ด๋ธ” ๋ฃฉ์—…์„ ์œ„ํ•œ ๊ฒƒ์ด๊ณ ,
๋‘๋ฒˆ์งธ ํ…Œ์ด๋ธ”์€ ์ž…๋ ฅ 2์ธ ์ฃผ๋ณ€ ๋‹จ์–ด์˜ ํ…Œ์ด๋ธ” ๋ฃฉ์—…์„ ์œ„ํ•œ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”์ด๋‹ค.
๊ฐ ๋‹จ์–ด๋Š” ๊ฐ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”์„ ํ…Œ์ด๋ธ” ๋ฃฉ์—…ํ•˜์—ฌ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.



(๋‹จ์–ด ์ •์ œ๊ฐ€ ์ž˜ ๋ผ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ์–‘ํ•ด๋ฐ”๋žŒ)

์ขŒ์ธก์€ ์ค‘์‹ฌ๋‹จ์–ด์— ๋Œ€ํ•œ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”
์šฐ์ธก์€ ์ฃผ๋ณ€๋‹จ์–ด์— ๋Œ€ํ•œ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”

ํ•™์Šต์ด ๊ณ„์†๋จ์— ๋”ฐ๋ผ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”์€ ๊ณ„์†ํ•ด์„œ ์—…๋ฐ์ดํŠธ ๋  ๊ฒƒ์ด๋‹ค.
์ขŒ์ธก ํ…Œ์ด๋ธ”์€ ์œˆ๋„์šฐ๊ฐ€ ์Šฌ๋ผ์ด๋”ฉ ๋ ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฅธ ๋‹จ์–ด๋“ค๋„ ์—…๋ฐ์ดํŠธ ๋  ๊ฒƒ์ด๊ณ ,
์šฐ์ธก ํ…Œ์ด๋ธ”์€ ๋งค ํ•™์Šต์‹œ๋งˆ๋‹ค positiveํ•œ ์ฃผ๋ณ€๋‹จ์–ด+negativeํ•œ ์ฃผ๋ณ€๋‹จ์–ด ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋  ๊ฒƒ์ด๋‹ค.




5) (ํ•™์Šต๊ณผ์ •) ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ ์—…๋ฐ์ดํŠธ


๋ชจ๋“  ์Œ์— ๋Œ€ํ•˜์—ฌ ์ค‘์‹ฌ๋‹จ์–ด์™€ ์ฃผ๋ณ€๋‹จ์–ด์˜ ๋‚ด์ ๊ฐ’์„ ์Šค์ฝ”์–ด๋ฒกํ„ฐ(์˜ˆ์ธก๊ฐ’)์œผ๋กœ ๋ณธ๋‹ค.
์Šค์ฝ”์–ด๋ฒกํ„ฐ์™€ ๋ ˆ์ด๋ธ”(1, 0)๊ณผ์˜ ์˜ค์ฐจ๋กœ๋ถ€ํ„ฐ ์—ญ์ „ํŒŒ ํ•˜์—ฌ
์ค‘์‹ฌ๋‹จ์–ด์™€ ์ฃผ๋ณ€๋‹จ์–ด์˜ ์ž„๋ฒ ๋”ฉ ํ…Œ์ด๋ธ”(๋ฒกํ„ฐ)๋ฅผ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.


ํ•™์Šต์ด ์™„๋ฃŒ๋œ ํ›„์—๋Š”
(1) ๋‘ ํ–‰๋ ฌ์„ ๋”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜
(2) ๋‘ ํ–‰๋ ฌ์„ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜
(3) ์ขŒ์ธก์˜ ํ–‰๋ ฌ(์ค‘์‹ฌ๋‹จ์–ด์— ๋Œ€ํ•œ ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ)์„ ์‚ฌ์šฉํ•œ๋‹ค.




6) k(negative sampleํ•  ๊ฐœ์ˆ˜)๋Š” ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์–‘์— ๋”ฐ๋ผ ์ง์ ‘ ์ •ํ•œ๋‹ค.




7) Negative samplingํ•  ๋‹จ์–ด์˜ ์„ ์ • ๊ธฐ์ค€

์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด์— ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ,
์ด ๋‹จ์–ด๋“ค์ด negative sampling์œผ๋กœ ๋ฝ‘ํž ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•œ๋‹ค.


๊ณต์‹

์˜ˆ์‹œ

  • ์›๋ž˜ ์ถœํ˜„๋นˆ๋„๊ฐ€ ๋†’์€ ๋‹จ์–ด๋“ค์— ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ negative sample์ด ๋  ํ™•๋ฅ ์ด ๋Š˜์–ด๋‚œ๋‹ค.

    (์œ„์˜ ๋‚ด์šฉ ๋ถ€๊ฐ€์„ค๋ช…)
    w_1์€ ์›๋ž˜ ๋“ฑ์žฅํ™•๋ฅ ์ด 0.1
    ์—ฌ๊ธฐ์— negative sample ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ w_1์€ 0.1284๊ฐ€ ๋จ!
    ์ฆ‰, ์ž˜ ๋“ฑ์žฅํ•˜์ง€์•Š๋Š” ๋‹จ์–ด์— ๋†’์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ negative sample์ด ๋  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•œ๊ฑฐ์ž„!


    ๋ฐ˜๋ฉด์—.
    w_4๋Š” ์›๋ž˜ ๋“ฑ์žฅํ™•๋ฅ ์ด 0.4
    negative ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•˜๋‹ˆ w_4๋Š” 0.3631๋กœ ๊ฐ€์ค‘์น˜๊ฐ€ ๋‚ฎ์•„์ง
    ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ๋‹จ์–ด์ž„์œผ๋กœ ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ negative sample๋กœ ์ž˜ ์•ˆ๋ฝ‘ํžˆ๊ฒŒ ํ•˜๋Š”๊ฑฐ์ž„!!!!




8) skip-gram์— ๋น„ํ•˜์—ฌ SGNS๊ฐ€ ํ›จ์”ฌ ํšจ์œจ์ ์ธ ํ•™์Šต๋ฐฉ๋ฒ•์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

SGNS
= (1+k) x (์ฃผ๋ณ€๋‹จ์–ด)




์œ„์˜ ์˜ˆ์‹œ์—์„œ์˜ ๊ฒฐ๊ด๊ฐ’

9) ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ๋Š” skip-gram๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž„๋ฒ ๋”ฉ๋ฒกํ„ฐ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.









๐Ÿ‘ธ SGNS์€ ์ด์ค‘๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•œ ํ•™์Šต๋ฐฉ์‹์ด๋‹ค.

skip-gram์€ ๋‹ค์ค‘๋ถ„๋ฅ˜ ํ•™์Šต๋ฐฉ์‹์ด๋‹ค.
I love you so much๋ž€ ๋ฌธ์žฅ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด
skip-gram์€ ์ค‘์‹ฌ๋‹จ์–ด์— ๋Œ€ํ•œ ์ฃผ๋ณ€๋‹จ์–ด๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ณด๋Š” ๊ฒƒ
๋‹ค์ค‘๋ถ„๋ฅ˜. ๋‹ต ํ•  ๊ฒƒ์ด ๋งŽ์Œ

SGNS์€ love์™€ you ๋‹จ์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‘˜์˜ ๊ด€๊ณ„๋Š” positiveํ•œ๊ฐ€? negativeํ•œ๊ฐ€?๋ฅผ ์•„๋Š” ๊ฒƒ.
๊ธ์ •์ธ์ง€ ๋ถ€์ •์ธ์ง€๋งŒ ์•Œ๋ ค๋‹ฌ๋ผ.











profile
NLP ๊ณต๋ถ€์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN