๐ ๋ชฉ์ฐจ
1. word sense
2. one-hot encoding
3. thesaurus(์ดํ๋ถ๋ฅ์ฌ์ )
4. Feature
5. Feature Extraction. &. Text Mining (TF-IDF)
6. Feature vector ์์ฑ
7. Vector Similarity (with Norm)
8. ๋จ์ด ์ค์์ฑ ํด์ (WSD)
9. Selection Preference
๐ ๊ธ์ ๋ง์น๋ฉฐ...
1. Word Sense
1.1 ๋จ์ด์ ์๋ฏธ์ ๊ด๊ณ์ฑ
NLP์์ ๊ฐ์ฅ ๊ธฐ์ด๊ฐ ๋๋ ๊ทผ๊ฐ์ด์ ๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ์ธ ๋จ์ด์ ์๋ฏธ(word sense)์ ์๋ฏธ์ ์ ์ฌ์ฑ, ๋ชจํธ์ฑ์ ๋ํด ์์๋ณด์.
๋จ์ด๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ ํํ์ธ ํ์ ์ด(lemma)์์ ์ฌ๋ฌ ์๋ฏธ๋ฅผ ๋ด๊ณ ์์ด์ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค.
์ด๋, ์ฃผ๋ณ์ ๋ณด(context)์ ๋ฐ๋ผ ์จ๊ฒจ์ง ์๋ฏธ๋ฅผ ํ์ ํ๊ณ ์ดํดํด์ผํ์ง๋ง
context๊ฐ ๋ถ์กฑํ๋ฉด ambiguity๊ฐ ์ฆ๊ฐํ ์ ์๋ค. ( โต ๊ณผ๊ฑฐ๊ธฐ์ต ๋ฑ์ ์ด์ )
์ฆ, ํ๊ฐ์ง ํํ์ ๋จ์ด์ ์ฌ๋ฌ ์๋ฏธ๊ฐ ํฌํจ๋์ด ์๊ธฐ๋ '์ค์์ฑ' ๋ฌธ์ ๋ NLP์์ ๋งค์ฐ ์ค์ํ ์์น๋ฅผ ๊ฐ๋๋ฐ, ํนํ ๊ธฐ๊ณ๋ฒ์ญ์์๋ ๋จ์ด์ ์๋ฏธ์ ๋ฐ๋ผ ํด๋น ๋ฒ์ญ ๋จ์ด์ ํํ๊ฐ ์์ ํ ๋ฐ๋๊ธฐ์ ๋งค์ฐ ์ค์ํ๋ค.
์ฆ, lemma(ํ์ ์ด)๋ฅผ ๋งค๊ฐ์ฒด ์ผ์ ๋ด๋ถ latent space์ 'word sense'๋ก ๋ณํํด ์ฌ์ฉํด์ผํ๋ค.
1.2
๋ํ์ดโ๋ค์์ด
๋ํ์ด: ํํ๋ ๊ฐ์ผ๋ ๋ป์ด ์๋ก ๋ค๋ฅธ ๋จ์ด (ex. ์ฐจ - tea / car)
๋ค์์ด: ๋ํ์ด๊ฐ๋ + ๊ทธ ์๋ฏธ๋ค์ด ์๋ก ๊ด๋ จ์ด ์๋ ๋ป (ex. ๋ค๋ฆฌ - leg / desk leg)
์ด๋, ํ ํํ๋ด ์ฌ๋ฌ ์๋ฏธ๋ฅผ ๊ฐ๋ ๋ํ์ดโ๋ค์์ด์ ๊ฒฝ์ฐ, ๋จ์ด ์ค์์ฑํด์(WSD)๋ผ๋ ๋ฐฉ๋ฒ์ ํตํด ๋จ์ด์ ์๋ฏธ๋ฅผ ๋ ๋ช ํํ ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
๋จ์ด์ ์๋ฏธ๋ฅผ ๋ ๋ช ํํ ํ๊ธฐ ์ํด ์ฃผ๋ณ๋ฌธ๋งฅ์ ํตํด ์๋๋จ์ด์๋ฏธ๋ฅผ ํ์ ํด์ผํ๋๋ฐ, ์ด๋ end-to-end ๋ฐฉ๋ฒ์ด DNN์์ ์ ํธ๋๋ค.
์ด๋ก์ธํด ๋จ์ด ์ค์์ฑ ํด์์ ๋ํ ํ์๋๊ฐ ๋ฎ์์ก์ง๋ง ์์ง ambiguity๋ ๋ฌธ์ ํด๊ฒฐ์ด ์ด๋ ค์ด ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋์์ด
๋์์ด: ๋ค๋ฅธ ํํ์ ๋จ์ด๊ฐ์ ์๋ฏธ๊ฐ ๊ฐ์ ๋จ์ด (ex. home, place)
๋ฌผ๋ก , ์๋ฏธ๊ฐ ์์ ํ ๋ฑ ๋จ์ด์ง์ง๋ ์๊ณ ๋๊ฐ์ง ์์ ์๋ ์์ง๋ง ์ผ์ข ์ ๋์(consensus)๊ฐ ์กด์ฌํ๋ฉฐ, ์ด ๋์์ด๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๋, ์ด๋ฅผ ๋์์ด ์งํฉ(synset)์ด๋ผ ํ๋ค.
์์์ดโํ์์ด
๋จ์ด๋ ํ๋์ ์ถ์์ ๊ฐ๋ ์ ๊ฐ์ง๋ฉฐ ์ด๋, ๊ทธ ๊ฐ๋ ๋ค์ ํฌํจํ๋ ์โํ์ ๊ฐ๋ ์ด ์กด์ฌํ๋ฉฐ ์ด์ ํด๋นํ๋ ๋จ์ด๋ค์ ์์์ด(hypemym), ํ์์ด(hyponym)์ด๋ผ ํ๋ค. (ex. ๋๋ฌผ-ํฌ์ ๋ฅ, ํฌ์ ๋ฅ-์ฝ๋ผ๋ฆฌ)
์ด๋ฐ ๋จ์ด๋ค์ ์ดํ๋ถ๋ฅ(taxonomy)์ ๋ฐ๋ผ ๋จ์ด๊ฐ ๊ด๊ณ๊ตฌ์กฐ๋ฅผ ๊ณ์ธตํ ํ ์ ์๋ค.
1.3 ๋ชจํธ์ฑ ํด์ (WSD)
์ปดํจํฐ๋ ์ค์ง text๋ง ๊ฐ์ง๋ฏ๋ก text๊ฐ ๋ดํฌํ ์ง์ง ์๋ฏธ๋ฅผ ํ์ ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ฆ, ๋จ์ด์ ๊ฒ ํํ์ธ text๋ง์ผ๋ก๋ ๋ชจํธ์ฑ(ambiguity)์ด ๋๊ธฐ์ ๋ชจํธ์ฑ์ ์ ๊ฑฐํ๋ ๊ณผ์ ์ธ, WSD(๋จ์ด ์ค์์ฑ ํด์)์ผ๋ก NLP์ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค.
2. One-Hot Encoding
2.1 One-Hot Encoding
๋จ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์ธ์งํ ์ ์๋ ์์น๋ก ๋ฐ๊พธ๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ฒกํฐ๋ก ํํํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ one-hot encoding์ด๋ผ๋ ๋ฐฉ์์ด๋ค.
๋ง ๊ทธ๋๋ก ๋จ ํ๋์ 1๊ณผ ๋๋จธ์ง ์๋ง์ 0๋ค๋ก ํํ๋ encoding๋ฐฉ์์ผ๋ก one-hot encoding vector์ ์ฐจ์์ ๋ณดํต ์ ์ฒด vocabulary์ ๊ฐ์๊ฐ ๋๋ค. (๋ณดํต ๊ทธ ์ซ์๋ ๋งค์ฐ ํฐ ์๊ฐ ๋จ; ๋ณดํต 30,000~100,000)
๋จ์ด๋ ์ฐ์์ ์ธ ์ฌ๋ณผ๋ก์จ ์ด์ฐํ๋ฅ ๋ณ์๋ก ๋ํ๋ธ๋ค.
์์ ๊ฐ์ด ์ฌ์ (dictionary)๋ด์ ๊ฐ ๋จ์ด๋ฅผ one-hot encoding ๋ฐฉ์์ ํตํด vector๋ก ๋ํ๋ผ ์ ์๋๋ฐ, ์ด ํํ๋ฐฉ์์ ์ฌ๋ฌ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค.
Prob 1. vector space๊ฐ ๋๋ฌด ์ปค์ก๋ค. (ํ๋๋ง 1, ๋๋จธ์ง๋ 0; ์ด๋ 0์ผ๋ก ์ฑ์์ง vector๋ฅผ sparse vector๋ผ ํ๋ค.)
Prob 2. sparse vector์ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ vector๊ฐ ์ฐ์ฐ ์ ๊ฒฐ๊ณผ๊ฐ์ด 0์ด ๋๋, orthogonalํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง๋ค.
- ์ฆ, ๋ค์ ๋งํ๋ฉด '๊ฐ์์ง', '๊ฐ'๋ผ๋ ๋จ์ด๋ ์ํธ์ ์ฌํ์ง๋ง ์ด ๋์ ์ฐ์ฐ ์ ๋์ ์ ์ฌ๋๊ฐ 0์ด ๋์ด๋ฒ๋ฆด ๊ฒ์ด๊ณ , ์ผ๋ฐํ์ ์ด๋ ค์์ ๊ฒช์ ์ ์๋ค.
- ์ด๋ Curse of Dimensionality์ ์ฐ๊ด๋๋๋ฐ, ์ฐจ์์ด ๋์์ง์๋ก ์ ๋ณด๋ฅผ ํํํ๋ ๊ฐ ์ (vector)๊ฐ ๋งค์ฐ ๋ฎ์ ๋ฐ๋๋ก sparseํ๊ฒ ํผ์ ธ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ ์ฐจ์์ ์ ์ฃผ๋ก๋ถํฐ ๋ฒ์ด๋๊ณ ์ ์ฐจ์์ ์ถ์ํ์ฌ ๋จ์ด๋ฅผ ํํํ ํ์์ฑ์ด ๋๋๋๋ค.
3. Thesaurus (์ดํ๋ถ๋ฅ์ฌ์ )
3.1 WordNet
Thesaurus(์ดํ๋ถ๋ฅ์ฌ์ )๋ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๋จ์ด์๋ฏธ๋ฅผ ์ ๋ถ์โ๋ถ๋ฅํด ๊ตฌ์ถ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก WordNet์ ๊ฐ์ฅ ๋ํ์ ์ธ ์์๋ฌ์ค์ ์ผ์ข ์ด๋ค.
WordNet์ ๋์์ด์งํฉ(Synset), ์์์ด, ํ์์ด ์ ๋ณด๊ฐ ํนํ ์ ํฅ๋น์ํ๊ทธ๋ํ(DAG)๋ก ์ ๊ตฌ์ถ๋์ด์๋ค๋ ์ฅ์ ์ด ์๋ค.
(ํธ๋ฆฌ๊ตฌ์กฐ๊ฐ ์๋: ํ๋์ ๋ ธ๋๊ฐ ์ฌ๋ฌ ์์๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ.)
WordNet์ ์๋๋ท ์น์ฌ์ดํธ์์ ๋ฐ๋ก ์ด์ฉํ ์๋ ์๋ค. (http://wordnetweb.princeton.edu/perl/webwn)์ด์ฒ๋ผ wordnet์ ๋จ์ด๋ณ ์ฌ๋ฌ ๊ฐ๋ฅํ ์๋ฏธ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ ๋ฒํธ๋ฅผ ๋งค๊ธฐ๊ณ , ๋์์ด๋ฅผ ๋งํฌํด ๋์์ด ์งํฉ์ ์ ๊ณตํ๋ค. ์๋ ์ฌ์ง์ ๋ณด๋ฉด ๋ช ์ฌ์ผ ๋ ์๋ฏธ 10๊ฐ, ๋์ฌ์ผ ๋ ์๋ฏธ 8๊ฐ๋ฅผ ์ ์ํ์์ผ๋ฉฐ ๋ช ์ฌ bank#2์ ๊ฒฝ์ฐ, ์ฌ๋ฌ ๋ค๋ฅธํํ(depository financial institution#1, banking concern#1)๋ค๋ ๊ฐ์ด ๊ฒ์๋์ด์๋ค. (์ด๊ฒ๋ค์ด ๋ฐ๋ก ๋์์ด ์งํฉ)
์ด๋ WSD์ ๋งค์ฐ ์ข์ label data๊ฐ ๋๋ฉฐ wordnet์ด ์ ๊ณตํ๋ ์ด data๋ค์ ๋ฐํ์ผ๋ก supervised learning์ ์งํํ๋ฉด ๋จ์ด์ค์์ฑํด์(WSD)๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
cf) ํ๊ตญ์ด wordnet๋ ์กด์ฌ
โ KorLex(http://korlex.pusan.ac.kr/)
โ KWN(http://wordnet.kaist.ac.kr/)
3.2 WordNet์ ํ์ฉํ ๋จ์ด๊ฐ ์ ์ฌ๋ ๋น๊ต
์ถ๊ฐ์ ์ผ๋ก NLTK์ wrapping๋์ด ํฌํจ๋๋ฏ๋ก importํ์ฌ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
from nltk.corpus import wordnet as wn def hypernyms(word): current_node = wn.synsets(word)[0] yield current_node while True: try: current_node = current_node.hypernyms()[0] yield current_node except IndexError: breakโ
์์ ์ฝ๋๋ wordnet์์ ํน์ ๋จ์ด์ ์ต์์ ๋ถ๋ชจ๋ ธ๋๊น์ง์ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ์ ์๊ณ ,
์ถ๊ฐ์ ์ผ๋ก ๋จ์ด๋ง๋ค ๋์ค๋ ์ซ์๋ก ๊ฐ ๋ ธ๋ ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ ์๋ค.์๋ฅผ ๋ค์ด, ์์ ๊ฒฝ์ฐ, 'student'์ 'fireman' ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ 5 ์์ ์ ์ ์๋ค.
์ด๋ฅผ ํตํด ๊ฐ ์ตํ๋จ ๋ ธ๋๊ฐ์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ ์๊ณ , ์ด๋ฅผ ์ ์ฌ๋๋ก ์นํํด ํ์ฉํ ์ ์๋ค.
์ด๋ฅผ ์ด์ฉํด ๊ณต์์ ์ ์ฉํด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
ํ๊ณ์ : ์ฌ์ ์ ๊ตฌ์ถํ๋๋ฐ ๋น์ฉ๊ณผ ์๊ฐ์ด ๋ง์ด ์์๋๊ณ ์ํ์์ด๊ฐ ์ ๋ฐ์๋ ์ฌ์ ์ด์ด์ผ๋ง ํด์
์ฌ์ ์ ๊ธฐ๋ฐํ ์ ์ฌ๋ ๊ตฌํ๊ธฐ ๋ฐฉ์์ ์ ํ์ฑ์ ๋์ผ๋ ํ๊ณ๊ฐ ๋๋ ทํ๋ค๋ ๋จ์ ์ด ์กด์ฌ.
4. Feature
4.1 Feature
์ง๊ธ๊น์ง๋ one-hot vector๋ฅผ ํตํด ๋จ์ด๋ฅผ ํํํ์ ๋, ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ์ค๋ช ํ์๋ค.
์ด๋ one-hot vector์ ํํ๋ฐฉ์์ด ํจ๊ณผ์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ๊ณผ์ ์ธ ์ ๋ณด ์ถ์ถ ๋ฐ ํ์ต์ ์ํด์๋ ๋์์ ํน์ง(feature)์ ์ ํํํด์ผํ๋ค.
์ด๋ฐ ํน์ง์ ์์น๋ก ํํ๋๋ฉฐ, ์ต๋ํ ๋ง์ samples๋ฅผ ์ค๋ช ํ ์ ์์ด์ผํ๊ธฐ์ samples๋ ์์น๊ฐ ์๋ก ๋ค๋ฅธ ๊ณตํต๋ ํน์ง์ ๊ฐ๊ณ ๋ค์ํ๊ฒ ํํ๋๋๊ฒ์ด ์ข๋ค.
์ฆ, ๊ฐ sample์ feature๋ง๋ค ์์น๋ฅผ ๊ฐ๊ฒํ์ฌ ์ด๋ฅผ ๋ชจ์ ๋ฒกํฐ๋ก ํํํ ๊ฒ์ feature vector๋ผ ํ๋ค.
4.2 ๋จ์ด์ feature vector ๊ตฌํ๊ธฐ ์ํ ๊ฐ์
โ ์๋ฏธ๊ฐ ๋น์ทํ ๋จ์ด → ์ฐ์์๊ฐ ๋น์ทํ ๊ฒ
โก ์ฐ์์๊ฐ ๋น์ท → ๋น์ทํ ๋ฌธ์ฅ์์์ ๋น์ทํ ์ญํ ๋ก ์ฌ์ฉ๋ ๊ฒ
โข ∴ ํจ๊ป ๋ํ๋๋ ๋จ์ด๋ค์ด ์ ์ฌํ ๊ฒ
5. Feature Extraction. &. Text Mining (TF-IDF)
ํน์ง๋ฒกํฐ๋ฅผ ๋ง๋ค๊ธฐ ์์ text mining์์ ์ค์ํ๊ฒ ์ฌ์ฉ๋๋ TF-IDF๋ฅผ ์ฌ์ฉํด ํน์ง์ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
5.1 TF-IDF (Term Frequency-Inverse Document Frequency)
TF-IDF: ์ถํ๋น๋๋ฅผ ์ฌ์ฉํด ์ด๋ค๋จ์ด w๊ฐ ๋ฌธ์ d ๋ด์์ ์ผ๋ง๋ ์ค์ํ์ง ๋ํ๋ด๋ ์์น์ด๋ค.
์ฆ, TF-IDF์ ๊ฐ์ด ๋์์๋ก w๋ d๋ฅผ ๋ํํ๋ ์ฑ์ง์ ๊ฐ์ง๋ค.
TF: ๋จ์ด์ ๋ฌธ์๋ด์ ์ถํํ ํ์
IDF: ๊ทธ ๋จ์ด๊ฐ ์ถํํ ๋ฌธ์์ ์ซ์(DF)์ ์ญ์
์๋ฅผ ๋ค์ด, 'the'์ ๊ฒฝ์ฐ, TF๊ฐ์ด ๋งค์ฐ ํด ๊ฒ์ด๋ค.
ํ์ง๋ง, 'the'๊ฐ ์ค์ํ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ ๊ฒ์ด๊ธฐ์ ์ด๋ฅผ ์ํด IDF๊ฐ ํ์ํ๋ค.
(IDF๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ 'the'์ ๊ฐ์ ๋จ์ด๋ค์ penalty๋ฅผ ์ค๋ค.)
∴ ์ต์ข ์ ์ผ๋ก ์ป๊ฒ๋๋ ์ซ์๋ "๋ค๋ฅธ ๋ฌธ์๋ค์์๋ ์ ๋ํ๋์ง ์์ง๋ง ํน์ ๋ฌธ์์์๋ง ์ ๋ํ๋๋ ๊ฒฝ์ฐ ํฐ ๊ฐ์ ๊ฐ์ง๋ฉฐ, ํน์ ๋ฌธ์์์ ์ผ๋ง๋ ์ค์ํ ์ญํ ์ ์ฐจ์งํ๋์ง ๋ํ๋ด๋ ์์น๊ฐ ๋ ์ ์๋ค."
5.2 TF-IDF ๊ตฌํ์์
โ 3๊ฐ์ ๋ ผ๋ฌธ์คํฌ๋ฆฝํธ๊ฐ ๋ด๊ธด ๋ฌธ์๋ค์ด doc1, doc2, doc3 ๋ณ์์ ๋ค์ด์๋ค ๊ฐ์ ํ์.
๐ TF ํจ์
def get_term_frequency(document, word_dict=None): if word_dict is None: word_dict = {} words = document.split() for w in words: word_dict[w] = 1 + (0 if word_dict.get(w) is None else word_dict[w]) return pd.Series(word_dict).sort_values(ascending=False)โ
๐ DF ํจ์
def get_document_frequency(documents): dicts = [] vocab = set([]) df = {} for d in documents: tf = get_term_frequency(d) dicts += [tf] vocab = vocab | set(tf.keys()) for v in list(vocab): df[v] = 0 for dict_d in dicts: if dict_d.get(v) is not None: df[v] += 1 return pd.Series(df).sort_values(ascending=False)โ
๐ TF-IDF ํจ์
def get_tfidf(docs): vocab = {} tfs = [] for d in docs: vocab = get_term_frequency(d, vocab) tfs += [get_term_frequency(d)] df = get_document_frequency(docs) from operator import itemgetter import numpy as np stats = [] for word, freq in vocab.items(): tfidfs = [] for idx in range(len(docs)): if tfs[idx].get(word) is not None: tfidfs += [tfs[idx][word] * np.log(len(docs) / df[word])] else: tfidfs += [0] stats.append((word, freq, *tfidfs, max(tfidfs))) return pd.DataFrame(stats, columns=('word', 'frequency', 'doc1', 'doc2', 'doc3', 'max')).sort_values('max', ascending=False) get_tfidf([doc1, doc2, doc3])โ
<์ถ๋ ฅ>
6. Feature Vector ์์ฑ
6.1 TF ํ๋ ฌ ๋ง๋ค๊ธฐ
TF ๋ํ ์ข์ ํน์ง์ด ๋๋๋ฐ, ์ถํํ ํ์๊ฐ ์ฐจ์๋ณ๋ก ๊ตฌ์ฑ๋๋ฉด ํ๋์ ํน์ง๋ฒกํฐ๋ฅผ ์ด๋ฃฐ ์ ์๋ค.
(๋ฌผ๋ก ๋ฌธ์๋ณ TF-IDF์์ฒด๋ฅผ ์ฌ์ฉํ๋๊ฒ๋ ์ข์.)
def get_tf(docs): vocab = {} tfs = [] for d in docs: vocab = get_term_frequency(d, vocab) tfs += [get_term_frequency(d)] from operator import itemgetter import numpy as np stats = [] for word, freq in vocab.items(): tf_v = [] for idx in range(len(docs)): if tfs[idx].get(word) is not None: tf_v += [tfs[idx][word]] else: tf_v += [0] stats.append((word, freq, *tf_v)) return pd.DataFrame(stats, columns=('word', 'frequency', 'doc1', 'doc2', 'doc3')).sort_values('frequency', ascending=False) get_tf([doc1, doc2, doc3])โ
<์ถ๋ ฅ>
์ด๋, ๊ฐ ์ด๋ค์ ์๋์ ๊ฐ๋ค.
frequency: TF(w)
doc1: TF(w, d1)
doc2: TF(w, d2)
doc3: TF(w, d3)
TF(w, d1), TF(w, d2), TF(w, d3)๋ ๋ฌธ์์ ๋ํ ๋จ์ด๋ณ ์ถํํ์๋ฅผ ํ์ฉํ ํน์ง๋ฒกํฐ๊ฐ ๋ ๊ฒ์ด๋ค.
์๋ฅผ๋ค์ด '์ฌ๋ฌ๋ถ'์ [5, 6, 1]์ด๋ผ๋ ํน์ง๋ฒกํฐ๋ฅผ ๊ฐ๋๋ค.
๋ฌธ์๊ฐ ๋ง๋ค๋ฉด ์ง๊ธ๋ณด๋ค ๋ ๋์ ํน์ง๋ฒกํฐ๋ฅผ ๊ตฌํ ์ ์๋ค.
๋ค๋ง, ๋ฌธ์๊ฐ ์ง๋์น๊ฒ ๋ง์ผ๋ฉด ๋ฒกํฐ์ ์ฐจ์ ์ญ์ ์ง๋์น๊ฒ ์ปค์ง ์ ์๋ค.
๋ฌธ์ ๊ฐ ๋๋ ์ด์ : ์ง๋์น๊ฒ ์ปค์ง ์ฐจ์์ ๋ฒกํฐ ๋๋ถ๋ถ์ ๊ฐ์ด 0์ผ๋ก ์ฑ์์ง๋ค๋ ๊ฒ.
์์ ํ์์ 3๊ฐ์ ๋ฌธ์ ์ค ์ผ๋ถ๋ง ์ถํํด TF๊ฐ 0์ธ ๊ฒฝ์ฐ๊ฐ ์๋นํ ์กด์ฌํ๋ค.
์ด๋ ๊ฒ ๋ฒกํฐ์ ๊ทนํ ์ผ๋ถ๋ถ๋ง ์๋ฏธ์๋ ๊ฐ์ผ๋ก ์ฑ์์ง ๋ฒกํฐ๋ฅผ ํฌ์๋ฒกํฐ๋ผ ํ๋ค.
ํฌ์๋ฒกํฐ์ ๊ฐ ์ฐจ์์ ์ฌ์ค ๋๋ถ๋ถ์ ๊ฒฝ์ฐ 0์ด๊ธฐ์ ์ ์๋ฏธํ ํน์ ํต๊ณ๋ฅผ ์ป๊ธฐ์ ๋ฐฉ์งํฑ์ด ๋ ์ ์๋ค.
์ฆ, ๋จ์ํ ๋ฌธ์์ถํํ์๋ก๋ง ํน์ง๋ฒกํฐ๋ฅผ ๊ตฌ์ฑํ๊ฒ๋๊ธฐ์ ๋ง์ ์ ๋ณด๊ฐ ์์ค๋์๋ค.
( โต ๋งค์ฐ ๋จ์ํ๋์๊ธฐ์ ์์ฃผ ์ ํํ ํน์ง๋ฒกํฐ๋ฅผ ๊ตฌ์ฑํ๋ค๊ธฐ์ ์ฌ์ ํ ๋ฌด๋ฆฌ๊ฐ ์๋ค.)
6.2 context window๋ก ํจ๊ป ์ถํํ ๋จ์ด๋ค์ ์ ๋ณด ํ์ฉํ๊ธฐ
์์ TF๋ก ํน์ง๋ฒกํฐ๋ฅผ ๊ตฌ์ฑํ ๋ฐฉ์๋ณด๋ค ๋ ์ ํํ๋ค.
context window: ํจ๊ป ๋ํ๋๋ ๋จ์ด๋ค์ ์กฐ์ฌํ๊ธฐ ์ํด windowing์ ์คํํ์ฌ ๊ทธ ์์ ์๋ unit๋ค์ ์ ๋ณด๋ฅผ ์ทจํฉํ๋ ๋ฐฉ๋ฒ์์ ์ฌ์ฉ๋๋ window๋ฅผ context window๋ผ ํ๋ค.
context window๋ window_size๋ผ๋ ํ๋์ hyper-parameter๊ฐ ์ถ๊ฐ๋๊ธฐ์ ์ฌ์ฉ์๊ฐ ๊ทธ ๊ฐ์ ์ง์ ํด์ค ์ ์๋ค.
โ window_size๊ฐ ์ง๋์น๊ฒ ํด ๋: ํ์ฌ ๋จ์ด์ ๊ด๊ณ์๋ ๋จ์ด๋ค๊น์ง TF๋ฅผ count
โ window_size๊ฐ ์ง๋์น๊ฒ ์์ ๋: ๊ด๊ณ๊ฐ ์๋ ๋จ์ด๋ค์ TF๋ฅผ count
[๋ฌธ์ฅ๋ค์ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ฃผ์ด์ง window_size๋ด์ ํจ๊ป ์ถํํ ๋จ์ด๋ค์ ๋น๋๋ฅผ ์ธ๋ ํจ์]
from collections import defaultdict import pandas as pd def get_context_counts(lines, w_size=2): co_dict = defaultdict(int) for line in lines: words = line.split() for i, w in enumerate(words): for c in words[i - w_size:i + w_size]: if w != c: co_dict[(w, c)] += 1 return pd.Series(co_dict)โ
[TF-IDF๋ฅผ ์ํด ์์ฑํ get_term_frequency()ํจ์๋ฅผ ํ์ฉํด ๋์๋ฐ์์ ๋ณด๋ฅผ ํตํด ๋ฒกํฐ๋ฅผ ๋ง๋๋ ์ฝ๋]
def co_occurrence(co_dict, vocab): data = [] for word1 in vocab: row = [] for word2 in vocab: try: count = co_dict[(word1, word2)] except KeyError: count = 0 row.append(count) data.append(row) return pd.DataFrame(data, index=vocab, columns=vocab)โ
<์ถ๋ ฅ>
์์ชฝ์ ์ถํ๋น๋๊ฐ ๋์ ๋จ์ด๋ค์ ๋๋ถ๋ถ์ ๊ฐ์ด ์ ์ฑ์์ ธ ์๋ ๊ฒ์ ์ ์ ์๋ค.
๋ค์ชฝ์ ์ถํ๋น๋๊ฐ ๋ฎ์ ๋จ์ด๋ค์ ๋๋ถ๋ถ์ ๊ฐ์ด 0์ผ๋ก ์ฑ์์ ธ ์์์ ์ ์ ์๋ค.
7. Vector Similarity (with Norm)
์์ ๊ตฌํ ํน์ง๋ฒกํฐ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์๊น? ํน์ง๋ฒกํฐ๋ ๋จ์ด๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ตฌํ ๋ ์์ฃผ ์ ์ฉํ๋ค.
๊ฐ์ฅ ๋จผ์ ์ธ๊ธํ WordNet์ ๊ทธ๋ํ๊ตฌ์กฐ์์ ๋จ์ด์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ , ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋จ์ด์ฌ์ด์ ์ ์ฌ๋๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋ค.
์ด๋ฒ์๋ ๋ฒกํฐ๊ฐ์ ์ ์ฌ๋ or ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ๋ค์ ๋ค๋ค๋ณผ ๊ฒ์ด๋ค.
7.1 L1 Distance (Manhattan Distance)
L1 Distance๋ L1 norm์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก Manhattan Distance๋ผ๊ณ ๋ ํ๋ค.
์ด ๋ฐฉ๋ฒ์ ๋ ๋ฒกํฐ์ ๊ฐ ์ฐจ์๋ณ ๊ฐ์ ์ฐจ์ด์ ์ ๋๊ฐ์ ๋ชจ๋ ํฉํ ๊ฐ์ด๋ค.
์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
def L1_distance(x1, x2): return ((x1-x2).abs()).sum()โ
7.2 L2 Distance (Euclidean Distance)
L2 Distance๋ L2 norm์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก Euclidean Distance๋ผ๊ณ ๋ ํ๋ค.
์ด ๋ฐฉ๋ฒ์ ๋ ๋ฒกํฐ์ ๊ฐ ์ฐจ์๋ณ ๊ฐ ์ฐจ์ด์ ์ ๊ณฑ์ ํฉ์ ๋ฃจํธ๋ฅผ ์ทจํ ๊ฐ์ด๋ค.
์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
def L2_distance(x1, x2): return ((x1 - x2)**2).sum()**.5โ
7.3 Infinity Norm
L∞ norm์ ์ฌ์ฉํ infinity distance๋ ์ฐจ์๋ณ ๊ฐ์ ์ฐจ์ด์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ํ๋ธ๋ค.
์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.def infinity_distance(x1, x2): return ((x1 - x2).abs()).max()โโ
7.4 Cosine Similarity
์ฝ์ฌ์ธ ์ ์ฌ๋ํจ์๋ ๋ ๋ฒกํฐ์ฌ์ด์ ๋ฐฉํฅ๊ณผ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ๋ ๋ฐฉ๋ฒ์ด๋ค.
ํนํ, ์์ฐ์ด์ฒ๋ฆฌ์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ์ ์ฌ๋์ธก์ ๋ฐฉ๋ฒ ์ด๋ค.
โ ์์์์ ๋ถ์๋ ๋ ๋ฒกํฐ๊ฐ์ ์์๊ณฑ(element-wise)์ ์ฌ์ฉํ๋ค.(= ๋ด์ ๊ณฑ)
- ์ฝ์ฌ์ธ ์ ์ฌ๋์ ๊ฒฐ๊ณผ๊ฐ 1์ ๊ฐ๊น์ธ์๋ก ๋ฐฉํฅ์ ์ผ์นํ๊ณ
- ์ฝ์ฌ์ธ ์ ์ฌ๋์ ๊ฒฐ๊ณผ๊ฐ 0์ ๊ฐ๊น์ธ์๋ก ์ง๊ต์ด๋ฉฐ
- ์ฝ์ฌ์ธ ์ ์ฌ๋์ ๊ฒฐ๊ณผ๊ฐ -1์ ๊ฐ๊น์ธ์๋ก ๋ฐฉํฅ์ ๋ฐ๋์ด๋ค.
์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.def cosine_similarity(x1, x2): return (x1 * x2).sum() / ((x1**2).sum()**.5 * (x2**2).sum()**.5)โ
[์ ์ํ ์ ]
๋ค๋ง, ๋ถ์์ ๋ฒกํฐ๊ณฑ์ฐ์ฐ์ด๋ ๋ถ์์ L2 norm ์ฐ์ฐ์ cost๊ฐ ๋์ ๋ฒกํฐ์ฐจ์์ด ์ปค์ง์๋ก ์ฐ์ฐ๋์ด ์ปค์ง๋ค.
์ด๋ ํฌ์๋ฒกํฐ์ผ ๊ฒฝ์ฐ, ๊ฐ์ฅ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, ํด๋น์ฐจ์์ด ์ง๊ตํ๋ฉด ๊ณฑ์ ๊ฐ์ด 0์ด๋๋ฏ๋ก ์ ํํ ์ ์ฌ๋ ๋ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ์ํ์ง ๋ชปํ๋ค.
7.5 Jarccard Similarity
jarccard similarity๋ ๋ ์งํฉ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
โ ์์์์ ๋ถ์๋ ๋ ์งํฉ์ ๊ต์งํฉํฌ๊ธฐ์ด๊ณ , ๋ถ๋ชจ๋ ๋ ์งํฉ์ ํฉ์งํฉ๋๋ค.
- ์ด๋, ํน์ง๋ฒกํฐ์ ๊ฐ ์ฐจ์์ด ์งํฉ์ ์์(element)์ด๋ค.
- ๋ค๋ง, ๊ฐ ์ฐจ์์์์ ๊ฐ์ด 0 or 0์ด ์๋ ๊ฐ์ด ์๋, ์์น ์์ฒด์ ๋ํด jarccard similarity๋ฅผ ๊ตฌํ๊ณ ์ ํ ๋๋, 2๋ฒ์งธ ์ค์ ์์์ฒ๋ผ ๋ ๋ฒกํฐ์ ๊ฐ ์ฐจ์์ ์ซ์์ ๋ํด min, max์ฐ์ฐ์ผ๋ก ๊ณ์ฐํ ์ ์๋ค.
์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
def get_jaccard_similarity(x1, x2): return torch.stack([x1, x2]).min(dim=0)[0].sum() / torch.stack([x1, x2]).max(dim=0)[0].sum()โ
7.6 ๋ฌธ์ ๊ฐ ์ ์ฌ๋ ๊ตฌํ๊ธฐ
๋ฌธ์ = ๋ฌธ์ฅ์ ์งํฉ ; ๋ฌธ์ฅ = ๋จ์ด๋ค์ ์งํฉ
์์ ์ค๋ช ํ 7์ ์ ๋ด์ฉ๋ค์ ๋จ์ด์ ๋ํ ํน์ง์ ์์ง, ์ ์ฌ๋๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ฐ๋ผ์ ๋ฌธ์์ ๋ํ ํน์ง์ ์ถ์ถํ์ฌ ๋ฌธ์๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ตฌํ ์ ์๋๋ฐ,
์๋ฅผ๋ค์ด, ๋ฌธ์ ๋ด์ ๋จ์ด๋ค์ ๋ํ TF๋ TF-IDF๋ฅผ ๊ตฌํด ๋ฒกํฐ๋ฅผ ๊ตฌ์ฑํ๊ณ , ์ด๋ฅผ ํ์ฉํด ๋ฒกํฐ๊ฐ์ ์ ์ฌ๋๋ฅผ ๊ตฌํ ์ ์๋ค.
๋ฌผ๋ก , ํ์ฌ ๋ฅ๋ฌ๋์์๋ ํจ์ฌ ๋ ์ ํํ ๋ฐฉ๋ฒ์ ํตํด ๋ฌธ์๊ฐ ๋๋ ๋ฌธ์ฅ๊ฐ ์ ์ฌ๋๋ฅผ ๊ตฌํ ์ ์๋ค.
8. ๋จ์ด ์ค์์ฑ ํด์ (WSD)
8.1 Lesk Algorithm (Thesaurus ๊ธฐ๋ฐ WSD)
Lesk ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ๊ฐ๋จํ ์ฌ์ ๊ธฐ๋ฐ ์ค์์ฑํด์๋ฐฉ๋ฒ์ด๋ค.
์ฃผ์ด์ง ๋ฌธ์ฅ์์ ํน์ ๋จ์ด์ ์๋ฏธ๋ฅผ ๋ช ํํ ํ ๋ ์ฌ์ฉํ ์ ์๋ค.
โ Lesk ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ : ๋ฌธ์ฅ๋ด ๊ฐ์ด ๋ฑ์ฅํ๋ ๋จ์ด๋ค์ ๊ณตํต ํ ํฝ์ ๊ณต์
Lesk Algorithm โ ์ค์์ฑ์ ํด์ํ๊ณ ์ํ๋ ๋จ์ด์ ๋ํด ์ฌ์ (wordnet)์ ์๋ฏธ๋ณ ์ค๋ช ์ ๊ตฌํจ โ ์ฃผ์ด์ง ๋ฌธ์ฅ ๋ด ๋ฑ์ฅ๋จ์ด์ ์ฌ์ ์์ ์๋ฏธ๋ณ ์ค๋ช ์ฌ์ด ์ ์ฌ๋๋ฅผ ๊ตฌํ๋ค. ์ฃผ๋ก ์ ์ฌ๋๋ฅผ ๊ตฌํ ๋, ๋จ์ด์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค. โ ๋ฌธ์ฅ ๋ด ๋จ์ด๋ค์ ์๋ฏธ๋ณ ์ค๋ช ๊ณผ ๊ฐ์ฅ ์ ์ฌ๋๊ฐ ๋์ ์๋ฏธ๋ฅผ ์ ํํ๋ค.โ
์ฝ๋๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.def lesk(sentence, word): from nltk.wsd import lesk best_synset = lesk(sentence.split(), word) print(best_synset, best_synset.definition())
<์์ >
In [26] ์ ๊น์ง๋ ์ ์๋ํ์ง๋ง, In [26]์ ์ ํ ๋ค๋ฅธ ์๋ฏธ๋ก ์์ธกํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
Lesk Algorithm์ ๋ช ํํ ์ฅ๋จ์ ์ ๊ฐ๋๋ค.
- ์ฅ์ ) WordNet๊ณผ ๊ฐ์ด ์ ๋ถ๋ฅ๋ ์ฌ์ ์ด ์๋ค๋ฉด, ์ฝ๊ณ ๋น ๋ฅด๊ฒ WSD(๋จ์ด ์ค์์ฑ ํด์)๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
- ๋จ์ ) ์ฌ์ ์ ๋จ์ด ๋ฐ ์๋ฏธ์ ๊ดํ ์ค๋ช ์ ํฌ๊ฒ ์์กดํ๊ฒ๋๊ณ , ์ค๋ช ์ด ๋ถ์คํ๊ฑฐ๋ ์ฃผ์ด์ง ๋ฌธ์ฅ์ ํฐ ํน์ง์ด ์๋ค๋ฉด WSD๋ฅ๋ ฅ์ด ํฌ๊ฒ ๋จ์ด์ง๋ค.
9. Selection Preference
์ ํ์ ํธ๋(Selection Preference): ๋ฌธ์ฅ์ ์ฌ๋ฌ ๋จ์ด์ ์ํ์ค๋ก ์ด๋ค์ง๋๋ฐ, ๋ฌธ์ฅ ๋ด ์ฃผ๋ณ ๋จ์ด๋ค์ ๋ฐ๋ผ ์๋ฏธ๊ฐ ์ ํด์ง๋ฉฐ ์ด๋ฅผ ๋ ์์นํํด ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฅผ ํตํด WSD๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
ex) '๋ง์๋ค'๋ผ๋ ๋์ฌ์ ๋ํ ๋ชฉ์ ์ด๋ก๋ '์๋ฃ'ํด๋์ค์ ์ํ๋ ๋จ์ด๊ฐ ์ฌ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ์ '์ฐจ'๋ผ๋ ๋จ์ด๊ฐ '์๋ฃ'์ผ์ง '์๊ฐ์ฉ'์ผ์ง ์ด๋์ ์ํ ์ง ์ฝ๊ฒ ์ ์ ์๋ค.
9.1 Selection Preference Strength
์ ํ์ ํธ๋๋ ๋จ์ด๊ฐ ๊ด๊ณ๊ฐ ์ข ๋ ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์์นํํด ๋ํ๋ด๋๋ฐ
๋จ์ด๊ฐ ๋ถํฌ์ ์ฐจ์ด๊ฐ ํด์๋ก ๋ ๊ฐ๋ ฅํ ์ ํ์ ํธ๋๋ฅผ ๊ฐ๋๋ค
(= ์ ํ ์ ํธ๋ ๊ฐ๋(strength)๊ฐ ๊ฐํ๋ค).
์ด๋ฅผ KLD(KL-Divergence)๋ฅผ ์ฌ์ฉํด ์ ์ํ์๋ค.์ ํ์ ํธ๋ ๊ฐ๋ SR(w)์ w๊ฐ ์ฃผ์ด์ก์ ๋, ๋ชฉํํด๋์ค C์ ๋ถํฌ P(C|w)์ ๊ทธ๋ฅ ํด๋น ํด๋์ค๋ค์ ์ฌ์ ๋ถํฌ P(C)์์ KLD๋ก ์ ์๋์ด ์์์ ์ ์ ์๋ค. (์ฆ, ํน์ ํด๋์ค๋ฅผ ์ผ๋ง๋ ์ ํ์ ์ผ๋ก ์ ํธํ๋์ง๋ฅผ ์ ์ ์๋ค.)
9.2 Selectional Association
์ ์ด์ ํน์ ํด๋์ค์ฌ์ด ์ ํ๊ด๋ จ๋๋ฅผ ์ดํด๋ณด์.์์ ์์์ ๋ฐ๋ฅด๋ฉด, ์ ํ์ ํธ๋๊ฐ๋๊ฐ ๋ฎ์ ์ ์ด์ ๋ํด ๋ถ์์ ๊ฐ์ด ํด ๊ฒฝ์ฐ, ์ ์ด์ ํด๋์ค์ฌ์ด ๋ ํฐ ์ ํ๊ด๋ จ๋๋ฅผ ๊ฐ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ฆ, ์ ํ์ ํธ๋๊ฐ๋๊ฐ ๋ฎ์ ํด๋น ์ ์ด๋ ํด๋์ค์ ๋ํ ์ ํ์ ์ ํธ๊ฐ๋๊ฐ ๋ฎ์ง๋ง,
ํน์ ํด๋์ค๋ง ์ ๋ ์ ์ด์ ์ํฅ์ ๋ฐ์ ๋ถ์๊ฐ ์ปค์ ธ ์ ํ๊ด๋ จ๋์ ์์น๊ฐ ์ปค์ง ์ ์์์ ๋ดํฌํ๋ค.
9.3 Selection Preference. &. WSD
์ด๋ฐ ์ ํ์ ํธ๋์ ํน์ง์ ์ด์ฉํ๋ฉด WSD์ ํ์ฉํ ์ ์๋ค.
ex) '๋ง์๋ค'๋ผ๋ ๋์ฌ์ '์น'๋ผ๋ ๋ชฉ์ ์ด๊ฐ ํจ๊ป ์์ ๋, '์๋ฃ'ํด๋์ค์ธ์ง '์๊ฐ์ฉ'ํด๋์ค์ธ์ง๋ง ์์๋ด๋ฉด ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์๋ corpus๋ค์ ๋จ์ด๋ก ํํ๋์ด ์์ ๋ฟ, ํด๋์ค๋ก ํํ๋์ด ์์ง ์๊ธฐ์
์ด๋ฅผ ์ํด ์ฌ์ ์ ์ ์๋ ์ง์์ด๋ dataset์ด ํ์ํ๋ค.
9.4 WordNet๊ธฐ๋ฐ Selection Preference
์ฌ๊ธฐ์ WordNet์ด ํฐ ์๋ ฅ์ ๋ฐํํ๋ค.
WordNet์ ์ด์ฉํ๋ฉด '์ฐจ(car)'์ ์์์ด๋ฅผ ์ ์ ์๊ณ ์ด๋ฅผ ํด๋์ค๋กํ์ฌ ํ์์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
์ ์ด์ ํด๋์ค์ฌ์ด ํ๋ฅ ๋ถํฌ๋ฅผ ์ ์ํ๋ ์ถํ๋น๋์ ๊ณ์ฐ์์์ ์๋์ ๊ฐ์ด ์ ์ํ ์ ์๋ค.
ํด๋์ค c์ ์ํ๋ ํ์ ์ด(headword), ์ฆ h๋ ์ค์ corpus๊ฐ ๋ํ๋ ๋จ์ด๋ก ์ ์ด(predicate) w์ ํจ๊ป ์ถํํ h์ ๋น๋๋ฅผ ์ธ๊ณ , h๊ฐ ์ํ๋ ํด๋์ค๋ค์ ์งํฉ์ ํฌ๊ธฐ์ธ |Classes(h)|๋ก ๋๋์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ํด๋์ค c์ ์ํ๋ ๋ชจ๋ ํ์ ์ด์ ๋ํด ์ํํ ํ ์ด๋ฅผ ํฉํ ๊ฐ์ CountR(w,c)๋ฅผ ๊ทผ์ฌํ๋ค.
์ด๋ฅผ ํตํด ์ ์ด w์ ํ์ ์ด h๊ฐ ์ฃผ์ด์ก์ ๋ h์ ํด๋์ค c๋ฅผ ์ถ์ ํ c_hat์ ๊ตฌํ ์ ์๋ค.
9.5 pseudo word๋ฅผ ํตํ Selection Preferenceํ๊ฐ
์ ์ฌ์ดํ(pseudo word)๊ฐ ๋ฐ๋ก ์ ๊ตํ testset์ค๊ณ๋ฅผ ์ํ ํ๋์ ํด๋ต์ด ๋ ์ ์๋ค.
์ ์ฌ์ดํ๋ 2๊ฐ์ ๋จ์ด๊ฐ ์ธ์์ ์ผ๋ก ํฉ์ฑ๋์ด ๋ง๋ค์ด์ง ๋จ์ด์ด๋ค.
9.6 Similarity Based Method[2007]
WordNet์ ๋ชจ๋ ์ธ์ด์ ์กด์ฌํ์ง ์๊ณ , ์๋กญ๊ฒ ์๊ฒจ๋๋ ์ ์กฐ์ด๋ค๋ ๋ฐ์๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
๋ฐ๋ผ์ wordnet๊ณผ thesaurus์ ์์กดํ์ง ์๊ณ ์ ํ์ ํธ๋๋ฅผ ๊ตฌํ ์ ์๋ค๋ฉด??
์ด๋ฅผ ์ํด thesaurus๋ thesaurus๊ธฐ๋ฐ Lesk์๊ณ ๋ฆฌ์ฆ์ ์์กดํ์ง ์๊ณ data๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ ํ์ ํธ๋๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
์ ์ด w, ํ์ ์ด h, ๋ ๋จ์ด ์ฌ์ด์ ๊ด๊ณ R์ด tuple๋ก ์ฃผ์ด์ง ๋, ์ ํ๊ด๋ จ๋๋ฅผ ์๋์ ๊ฐ์ด ์ ์ํ ์ ์๋ค.
์ด๋, ๊ฐ์ค์น ØR(w,h)๋ ๋์ผํ๊ฒ 1์ด๋ ์๋์ฒ๋ผ IDF๋ฅผ ์ฌ์ฉํด ์ ์ํ ์๋ ์๋ค.
๋ํ simํจ์๋ ์ผ์ ์ ์ฝ์ฌ์ธ์ ์ฌ๋๋ jarccard์ ์ฌ๋๋ฅผ ํฌํจ, ๋ค์ํ ์ ์ฌ๋ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ ์ฌ๋๋น๊ต๋ฅผ ์ํด SeenR(w)ํจ์๋ก ๋์๋จ์ด๋ฅผ ์ ์ ํ๊ธฐ์ corpus์ ๋ฐ๋ผ ์ ์ฌ๋๋ฅผ ๊ตฌํ ์ ์๋ ๋์์ด ๋ฌ๋ผ์ง๋ฉฐ ์ด๋ฅผ ํตํด thesaurus์์ด๋ ์ฝ๊ฒ ์ ํ์ ํธ๋๋ฅผ ๊ณ์ฐํ ์ ์๊ฒ ๋๋ค.
์ ์ฌ๋๊ธฐ๋ฐ ์ ํ์ ํธ๋ ์์
from konlpy.tag import Kkma
with open('ted.aligned.ko.refined.tok.random-10k.txt') as f:
lines = [l.strip() for l in f.read().splitlines() if l.strip()]
def count_seen_headwords(lines, predicate='VV', headword='NNG'):
tagger = Kkma()
seen_dict = {}
for line in lines:
pos_result = tagger.pos(line)
word_h = None
word_p = None
for word, pos in pos_result:
if pos == predicate or pos[:3] == predicate + '+':
word_p = word
break
if pos == headword:
word_h = word
if word_h is not None and word_p is not None:
seen_dict[word_p] = [word_h] + ([] if seen_dict.get(word_p) is None else seen_dict[word_p])
return seen_dict
def get_selectional_association(predicate, headword, lines, dataframe, metric):
v1 = torch.FloatTensor(dataframe.loc[headword].values)
seens = seen_headwords[predicate]
total = 0
for seen in seens:
try:
v2 = torch.FloatTensor(dataframe.loc[seen].values)
total += metric(v1, v2)
except:
pass
return total
def wsd(predicate, headwords):
selectional_associations = []
for h in headwords:
selectional_associations += [get_selectional_association(predicate, h, lines, co, get_cosine_similarity)]
print(selectional_associations)
'๊ฐ'๋ผ๋ ์กฐ์ฌ์ ๊ฐ์ฅ ์ ๋ง๋ ๋จ์ด๊ฐ 'ํ๊ต'์์ ์ ์์ธกํ๋ ๊ฒ์ ์ ์ ์๋ฐ.
๋ง์น๋ฉฐ...
๋จ์ด๋ ๋ณด๊ธฐ์๋ ๋ถ์ฐ์์ ์ธ ํํ์ด์ง๋ง ๋ด๋ถ์ ์ผ๋ก๋ ์ฐ์์ ์ธ '์๋ฏธ(sense)'๋ฅผ ๊ฐ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฐ ๋จ์ด์ ๊ฒ๋ชจ์์ด ๋ค๋ฅด๋๋ผ๋ ์๋ฏธ๊ฐ ์ ์ฌํ ์ ์์์ ์๊ณ ์์ผ๋ฉฐ,
๋จ์ด์ ์ ์ฌ๋๋ฅผ ๊ฑ์ฐํ ์ ์๋๋ผ๋ฉด corpus๋ก๋ถํฐ ๋ถํฌ๋ ํน์ง์ ํ๋ จ ์, ๋ ์ ํํ ํ๋ จ์ด ๊ฐ๋ฅํ๋ค.
WordNet์ด๋ผ๋ ์ฌ์ ์ ๋ฑ์ฅ์ผ๋ก ๋จ์ด์ฌ์ด ์ ์ฌ๋(๊ฑฐ๋ฆฌ)๋ฅผ ๊ณ์ฐํ ์ ์๊ฒ ๋์์ง๋ง
WordNet๊ณผ ๊ฐ์ Thesaurus ๊ตฌ์ถ์ ์์ฒญ๋ ์ผ์ด๊ธฐ์ ์ฌ์ ์์ด ์ ์ฌ๋๋ฅผ ๊ตฌํ๋ฉด ๋ ์ข์ ๊ฒ์ด๋ค.
์ฌ์ ์์ด corpus๋ง์ผ๋ก ํน์ง์ ์ถ์ถํด ๋จ์ด๋ฅผ ๋ฒกํฐ๋ก ๋ง๋ ๋ค๋ฉด, WordNet๋ณด๋ค ์ ๊ตํ์ง๋ ์์ง๋ง ๋ ๊ฐ๋จํ ์์ ์ด ๋ ๊ฒ์ด๋ค.
์ถ๊ฐ์ ์ผ๋ก corpus์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ์ถ์ถํ ํน์ง๋ค์ ์ ์ฐจ ์ ํํด์ง ๊ฒ์ด๊ณ , ํน์ง๋ฒกํฐ๋ ๋ ์ ํํด์ง ๊ฒ์ด๋ค.
ํน์ง๋ฒกํฐ๊ฐ ์ถ์ถ๋ ํ cosine์ ์ฌ๋, L2 Distance ๋ฑ์ Metric์ ํตํด ์ ์ฌ๋๋ฅผ ๊ณ์ฐํ ์ ์๋ค.
ํ์ง๋ง ์์ ์์ ํ๋ฏ, ๋จ์ด์ฌ์ ๋ด ๋จ์ด ์๊ฐ ๋ง์๋งํผ ํน์ง๋ฒกํฐ์ ์ฐจ์๋ ๋จ์ด์ฌ์ ํฌ๊ธฐ์ ๊ฐ๊ธฐ์
"๋จ์ด๋์ ๋ฌธ์"๋ฅผ ํน์ง์ผ๋ก ์ฌ์ฉํ๋๋ผ๋ ์ฃผ์ด์ง ๋ฌธ์์ ์ซ์๋งํผ ๋ฒกํฐ์ ์ฐจ์์ด ์์ฑ๋ ๊ฒ์ด๋ค.
๋ค๋ง ๋ ํฐ ๋ฌธ์ ๋ ๊ทธ ์ฐจ์์ ๋๋ถ๋ถ ๊ฐ์ด 0์ผ๋ก ์ฑ์์ง๋ "ํฌ์๋ฒกํฐ"๋ก
๋ฌด์์ธ๊ฐ ํ์ตํ๊ณ ์ ํ ๋, cosine์ ์ฌ๋์ ๊ฒฝ์ฐ ์ง๊ตํ์ฌ ์ ์ฌ๋๊ฐ์ 0์ผ๋ก ๋ง๋ค ์ ์๋ค.
์ฆ, ์ ํํ ์ ์ฌ๋๋ฅผ ๊ตฌํ๊ธฐ ์ด๋ ค์ ์ง ์ ์๋ค.
์ด๋ฐ ํฌ์์ฑ๋ฌธ์ ๋ NLP์ ๋๋๋ฌ์ง ํน์ง์ผ๋ก ๋จ์ด๊ฐ ๋ถ์ฐ์์ ์ฌ๋ณผ๋ก ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ ํต์ ์ธ NLP๋ ์ด๋ฐ ํฌ์์ฑ๋ฌธ์ ์ ํฐ ์ด๋ ค์์ ๊ฒช์๋ค.
ํ์ง๋ง ์ต์ ๋ฅ๋ฌ๋์์๋ ๋จ์ด์ ํน์ง๋ฒกํฐ๋ฅผ ์ด๋ฐ ํฌ์๋ฒกํฐ๋ก ๋ง๋ค๊ธฐ๋ณด๋ค๋
"word embedding"๊ธฐ๋ฒ์ผ๋ก 0์ด ์ ์กด์ฌํ์ง ์๋ dense ๋ฒกํฐ๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋ค.
ex) word2vec, GloVe, ... (https://chan4im.tistory.com/197)