Natural Language Processing - BD-SEARCH/MLtutorial GitHub Wiki
๊ธฐ์ด ๊ฐ๋
Language understanding
- NLU : ์์ฑ๋ ํ
์คํธ์ ์๋ฏธ๋ฅผ ์ดํด (text -> meaning)
- ex) named-entity recognition, question answering, sentiment analysis
- NLG : ํน์ ํ ์
๋ ฅ์ ์กฐ๊ฑด์ผ๋ก ํ
์คํธ ์์ฑ (meaning -> text)
- ex) machine translation, conversational response generation
Language Model
- Language Model: ๋จ์ด ์ํ์ค์ ๋ํ ํ๋ฅ ๋ถํฌ. k๊ฐ์ ๋จ์ด ๋ฐฐ์ด์ด ๋์์ ๋ ์ค์ ๋ก ๊ทธ๋ฐ ๋ฐฐ์ด์ด ๋์ฌ ํ๋ฅ ์ ์๋ฏธํ๋ค.
- example: P(I am a boy) = 0.001, P(I a boy am) = 0.000000000001
- ๋ชจ๋ธ์ ํ์ตํ ๋ ์ฌ์ฉํ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ๋ค๋ฅธ language model์ด ๋์จ๋ค.
Language Model์๋ unigram model๊ณผ n-gram model์ด ์๋ค. unigram model์ ๋จ์ด ์ํ์ค์ ํ๋ฅ ์ ๊ณ์ฐํ ๋ ๋จ์ํ ๊ฐ๊ฐ์ ๋จ์ด๊ฐ ๋์ฌ ํ๋ฅ ์ ๊ณฑํด์ ๊ณ์ฐํ๋ค. n-gram model์ ๋จ์ด ์ํ์ค ํ๋ฅ ์ ๊ณ์ฐํ ๋, ์์ n-1๊ฐ์ ๋จ์ด ์ํ์ค๊ฐ ๋์ฌ ๋ ๊ทธ ๋ค์์ ๋์จ ๋จ์ด๊ฐ ๋์ฌ ํ๋ฅ ์ ๊ณฑ์ผ๋ก ๊ณ์ฐํ๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ๋ธ๋ก๊ทธ์ ์ค๋ช ์ด ๋์ด ์๋ค.
๋ชจ๋ธ์ ๋ง๋ค ๋ ์ฌ์ฉํ ๋ฌธ์์ ๋ฐ๋ผ ํ๋ฅ ๊ฐ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง๋ ์ ์ ์ด์ฉํ์ฌ, ๋ฌธ์ ๋ถ๋ฅ์๋ ์ฌ์ฉํ ์ ์๋ค. IT ๋ฌธ์๋ก ๋ง๋ language model, ์ฐ์ ๋ฌธ์๋ก ๋ง๋ language model ๋ฑ ๋ฌธ์ ์ฃผ์ ๋ณ๋ก ๊ฐ๊ฐ language model์ ๋ง๋ ๋ค. ์ฃผ์ ๋ณ language model๋ก ๊ฐ๊ฐ ๋จ์ด ์ํ์ค๊ฐ ๋์ฌ ํ๋ฅ ์ ๊ณ์ฐํ๋ฉด, ๊ฐ์ฅ ํฐ ๊ฐ์ ๋ฐํํ language model์ ์ฃผ์ ๊ฐ ๊ธ์ ์ฃผ์ ๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ์ด๋ค.
ํ์ค์ ์ผ๋ก unigram model์ด๋ 2-gram model์ ์ฌ์ฉํ๋ ๊ฒ์ด ํ๊ณ์ด๋ค. ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ n ๊ฐ์ด ๋๋ฌด ํฌ๋ฉด ๋ชจ๋ธ์ ์ ์ฅํ๋ ๊ฒ๋ ๋ฌธ์ ์ด๊ณ , ๊ฒฝ์ฐ์ ์๊ฐ ๋๋ฌด ๋ง์์ model์ด ํ์ตํ์ง ๋ชปํ ๋จ์ด์ ์๋ ๋ง์ด ๋์ค๊ฒ ๋๋ค. ๋ฐ์ดํฐ์ ์์ด ์์ฃผ ๋ง์ง ์๋ค๋ฉด 2-gram model๋ ์ ๋์ํ์ง ์์์ unigram model์ ์ฌ์ฉํด์ผ ํ๋ค.
TF-IDF
TF-IDF(Term Frequency-Inverse Document Frequency)
- ๋ฌธ์ ๋ด์์ ๊ฐ์ฅ ๋น์ค์๊ฒ ๋ค๋ฃจ๋ ๋จ์ด๊ฐ ๋ฌด์์ธ์ง ๋ํ๋ด๋ ์งํ์ด๋ค.
- ํน์ ๋จ์ด๊ฐ ๋ฌธ์์์ ๋์ค๋ ๋น๋๊ฐ ๋์ผ๋ฉด์, ๋์ค๋ ๋ฌธ์ ์๊ฐ ์ ์์๋ก ๊ฐ์ด ํฌ๋ค.
- ์ฌ๋ฌ ๋ฌธ์์์ ๊ณจ๊ณ ๋ฃจ ๋์ค๋ ๋จ์ด(์์ต๋๋ค, ์ ๋๋ค ๋ฑ)๋ ๋ณ ์๋ฏธ๊ฐ ์๋ค๊ณ ๊ฐ์ฃผํ๋ค.
- ํ ๋ฌธ์์์๋ง ์์ฃผ ๋์ค๋ ๋จ์ด(ํค์๋, ์ ๋ฌธ ์ฉ์ด, ๊ณ ์ ๋ช ์ฌ ๋ฑ)๋ ๋ง์ ์๋ฏธ๊ฐ ์๋ค๊ณ ๊ฐ์ฃผํ๋ค.
TF-IDF๋ TF(Term Frequency)์ IDF(Inverse Frequency)์ ๊ณฑ์ผ๋ก ๋ํ๋ธ๋ค.
- TF (Term Frequency): ๋ฌธ์ ๋ด์ ํน์ ๋จ์ด๊ฐ ๋์ค๋ ๋น๋์. ๋น๋์๊ฐ ํด์๋ก ๊ฐ์ด ์ปค์ง๋ค.
- IDF(Inverse Frequency): ํน์ ๋จ์ด๊ฐ ๋์จ ๋ฌธ์ ๊ฐ์์ ์ญ์. ํน์ ๋จ์ด๊ฐ ๋์จ ๋ฌธ์ ์๊ฐ ์ ์์๋ก ๊ฐ์ด ์์์ง๋ค.
TF-IDF ๊ฐ์ด ํฐ ๋จ์ด๋ ๊ทธ ๋ฌธ์์์ ์ค์ํ ๋จ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ์ฐธ๊ณ ๋งํฌ์์ ํ์ธํ ์ ์๋ค.
- ์ธ๋ก ์ฌ๊ฐ ์์์ผ ํ ์๊ณ ๋ฆฌ์ฆโข TF-IDF
- TFIDF โ Term Frequency Inverse Document Frequency: tf-idf ๊ฐ๋ ์ ์ค๋ช ํ๋ ํ๊ธ ๋ฌธ์.
- TF-IDF์ ๋ํ ์ดํด - TFIDF ์ ์ฌ๋ ๊ตฌํ๊ธฐ
Naive Bayes Classifier
Bayes Theorem์ ์๋์ ๊ฐ์ด ์ฌ์ ํ๋ฅ ๊ณผ ์ฌํ ํ๋ฅ ์ ์๋ก ๋ฐ๊ฟจ์ ๋ ํ๋ฅ ์ ๊ณ์ฐํ๋ ๊ณต์์ด๋ค.
P(A|B) = P(B|A)P(A)/P(B)
์ด ๊ณต์์ ์คํธ ํํฐ๋ฅผ ๋ง๋ค ๋ ๋ง์ด ์ฌ์ฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ด์ฐฐํ ์ ์๋ ๊ฐ์ธ "์คํธ ๋ฌธ์์์ ์ด๋ ๋จ์ด๊ฐ ๋์ฌ ํ๋ฅ "์ ํตํด "์ด๋ ๋จ์ด๊ฐ ๋์์ ๋ ์คํธ ๋ฌธ์์ผ ํ๋ฅ "์ ์ ๋ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋์ด๋ธ ๋ฒ ์ด์ฆ ๋ถ๋ฅ๊ธฐ (ratsgo's blog)
- ๋์ด๋ธ ๋ฒ ์ด์ฆ ๋ถ๋ฅ๊ธฐ (Bool)
- ๋ฒ ์ด์ง์ธ ๋ฃฐ์ ์ด์ฉํ ์คํธ ํํฐ ๊ตฌํ, ์คํธ ํํฐ ๊ฐ์ ํ๊ธฐ
Embedding
ํ ์คํธ ๋ถ์ ๋ชจ๋ธ
ํ ์คํธ๋ Sequence๊ฐ ์๋ ๋ฐ์ดํฐ๋ผ์ ๋ถ์ํ ๋ RNN์ด๋ CNN์ด ๋ง์ด ์ฐ์ธ๋ค.
TextCNN
Seq2CNN
- ๋ ผ๋ฌธ ๋งํฌ: https://arxiv.org/abs/1805.07745
SyntaxNet
๋ ผ๋ฌธ ๋งํฌ: https://arxiv.org/abs/1603.06042
์์ฐ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๊ฒ ํ๋ ๊ฒ์ ๋ชฉํ๋ก, ๋ฌธ์ฅ์ ํ์ฑํ์ฌ ๋จ์ด ๊ฐ์ ๊ด๊ณ๋ฅผ ํธ๋ฆฌ ํํ๋ก ๋ด๋๋ ๋ชจ๋ธ์ด๋ค. 2016๋ ์ Google์ด ๋ง๋ค์๋ค.
Attention Mechanism
์์ฉ
๋ฌธ์ฅ ๋ถ๋ฅ
๋ฌธ์ฅ์ ํน์ ํ ์นดํ ๊ณ ๋ฆฌ๋ก ๋ถ๋ฅํ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด ์คํธ ๋ฌธ์ ๋ถ๋ฅ๋ผ๋๊ฐ, ๋ฆฌ๋ทฐ์ ๊ธ๋ถ์ ๋ถ๋ฅ, ๊ธ์ ์ฃผ์ ๋ถ๋ฅ ๋ฑ์ ํ ์ ์๋ค. ๋ฌธ์ฅ์ ๋ถ๋ฅํ ์ ์์ผ๋ฉด ๊ฐ์ ์๋ฆฌ๋ก ๋ฌธ๋จ์ด๋ ๊ธ๋ ๋ถ๋ฅํ ์ ์๋ค.
- ๋ค์ด๋ฒ ์ํ ๋ฆฌ๋ทฐ ๊ฐ์ ๋ถ์: gensim ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ Doc2Vec + CNN์ผ๋ก ์ํ ๋ฆฌ๋ทฐ๊ฐ ๊ธ์ ์ ์ธ์ง ๋ถ์ ์ ์ธ์ง ํ๋จํ๋ ์์
- hoho0443/classify_comment_emotion: Naive Bayes Classifier๋ Doc2Vec์ ์ด์ฉํ์ฌ ๋ฆฌ๋ทฐ๋ฅผ ๊ธ์ , ๋ถ์ ์ผ๋ก ๋ถ๋ฅํ๋ ์์ (ํ๊ตญ์ด)
- ํ๊ตญ์ด์ NLTK, Gensim์ ๋ง๋จ - PyCon KR 2015: nltk, gensim ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋จ์ด๋ฅผ vectorํํ๊ณ ๋ฌธ์ฅ์ ๋ถ๋ฅ/๊ตฐ์งํ ํ๋ ์์
- ์ถ์ฒ์์คํ ์ด word2vec์ ๋ง๋ฌ์๋ - PyCon KR 2015: word2vec ๋ฑ์ผ๋ก ์ํ ์ถ์ฒ ์์คํ ์ ๋ง๋๋ ์์
๊ธฐ๊ณ ๋ฒ์ญ
seq2seq๋ฅผ ํ์ฉํด ๊ธฐ๊ณ ํ์ต ์์คํ ์ tensorflow๋ฅผ ์ด์ฉํด ๋ง๋ค ์ ์๋ค. ์์ธํ ๋ฐฉ๋ฒ์ ์๋ ๋งํฌ์ ๋์ ์๋ค.
- tensorflow/nmt:TensorFlow Neural Machine Translation Tutorial
์ด ๊ฒ์ ์ด์ฉํด์ ์ฑ๋ด(Chatbot)๋ ๋ง๋ค ์ ์๋ค. ๊ธฐ๊ณ ๋ฒ์ญ์์ ์๋ณธ ์ธ์ด๋ฅผ "์ ๋ ฅ ๋ฌธ์ฅ"์ผ๋ก, ๋ฒ์ญ๋ ์ธ์ด๋ฅผ "๋๋ต ๋ฌธ์ฅ"์ผ๋ก ๋์ํ์ฌ ํ์ต์ ์ํค๋ฉด ๊ฐ๋จํ ์ฑ๋ด์ด ์์ฑ๋๋ค.
*[Deep Learning] seq2seq ๋ฅผ ์ด์ฉํ ์ฑ๋ด (Neural Machine Chatbot): tensorflow/nmt๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฑ๋ด์ ๋ง๋ ์์
ํ๊ตญ์ด ์์ฐ์ด ์ฒ๋ฆฌ
- ํ๊ตญ์ด ๋ฌธ๋ฒ ์ง๊ณ ๋์ด๊ฐ๊ธฐ: link
์ฃผ์์
์์ด์ ๋ฌ๋ฆฌ ํ๊ตญ์ด๋ ๊ฐ์ ์ด๊ทผ์ ์ฌ๋ฌ ํํ๋ก ๋ํ๋ผ ์ ์์ด, ํํ์ ๋ถ์์ด ํ์ํ ์ ์๋ค. (์: ๋ฐ๊พธ๋ค, ๋ฐ๊พธ๋, ๋ฐ๊ฟ, ๋ฐ๊ฟ๋๋ค, ...) TextCNN ๊ฐ์ ๊ฒฝ์ฐ ํํ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํ๊ธฐ๋ ํ๋, BERT์ ๊ฐ์ด ํต๊ณ ๊ธฐ๋ฐ์ Tokenizer๋ฅผ ์ด์ฉํ๋ ๋ชจ๋ธ๋ ์๋ค.
ํํ์ ๋ถ์๊ธฐ ์ข ๋ฅ๋ ์๋์ ๊ฐ๋ค.
- KoNLPy (Python): Java๋ก ๋ ํํ์ ๋ถ์๊ธฐ๋ฅผ Python์์ ์ธ ์ ์๋๋ก wrapping
- ๊ผฌ๊ผฌ๋ง ํ๊ธ ํํ์ ๋ถ์๊ธฐ (Java)
ํ๊ตญ์ด ๋ง๋ญ์น
ํ๊ตญ์ด ๋ง๋ญ์น๋ ํ๊ตญ์ด๋ก ๋ ๋ง์ด๋ ๊ธ์ ๋ชจ์, ๋ฌธ์ฅ, ์ด์ , ํํ์ ๋ณ๋ก ๋ถ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค. ์์ฐ์ด ์ฒ๋ฆฌ์ ๊ธฐ๋ณธ์ด ๋๋ ๋ฐ์ดํฐ์ด๋ค. ์ฃผ์ ๋ง๋ญ์น๋ก๋ ์๋์ ๊ฐ์ ๊ฒ์ด ์๋ค.
- ๊ตญ๋ฆฝ๊ตญ์ด์ ๋ง๋ญ์น: ๊ตญ๋ฆฝ๊ตญ์ด์์์ ์ ๊ณตํ๋ ํ๊ตญ์ด ๋ง๋ญ์น. ๋ค์ด๋ก๋(๋ด๋ ค๋ฐ๊ธฐ)๋ฅผ ํ๋ ค๋ฉด ๋ก๊ทธ์ธ(๋ค์ด๊ฐ๊ธฐ)์ด ํ์ํ๋ค.
๋ฌธ์ ๋จ์ ์ธ์ฝ๋ฉ
์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ
- ๋ฌธ๋ฒ์ ์ธ ์๋ฏธ๋ฅผ ์ถ์ถํ ๋
- ๊ฐ์ฒด๋ช ์ธ์, ํ์ฌ ๋ถ์ ๋ฑ
- ๋ฌธ๋ฒ์ ์ธ ์๋ฏธ๋ ๋จ์ด ์ ์ฒด๊ฐ ์ผ์นํ์ง ์๋๋ผ๋ ์ผ๋ถ ๊ธ์๋ง ์ผ์นํด๋ ์ถ์ถํ ์ ์์
- ์) '๊ณต๋ถํ๋ค'๊ฐ '๋ฌด์์ ํ๋ ๊ฒ'์ด๋ผ๋ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ค๋ฉด, 'ํ์ตํ๋ค' ๋ฑ 'ํ๋ค'๊ฐ ๊ณตํต๋ ๊ฒฝ์ฐ ๋ชจ๋ '๋ฌด์์ ํ๋ ๊ฒ'์ด๋ผ๋ ๊ฒ์ ์ ์ถํ ์ ์์.
- ๋ชจ๋ฅด๋ ๋จ์ด๋ฅผ ๋ฒกํฐ๋ก ์ธ์ฝ๋ฉํด์ผ ํ ๋
์ฐธ๊ณ ์๋ฃ
- ์ธ๊ณต์ง๋ฅ ์จ์ ํ๊ธ ๋ง๋ญ์น, 2007๋ ๋ฉ์ถฐ์ ๊น๋ญ: ๋ง๋ญ์น ๊ฐ๋ ์๊ฐ