본문 바로가기

활용/NLP

Natural Language Processing

반응형

기초 개념

Language understanding

NLU (Neural Language Understanding)는 작성된 텍스트의 의미를 이해하는 것입니다. 즉, 텍스트를 의미 형태로 변환하는 것입니다. named-entity recognition, question answering, sentiment analysis 등이 있습니다.

NLG (Neural Language Generating)은 특정한 입력을 조건으로 해서 텍스트를 생성하는 것입니다. 즉 의미 형태로 되어 있는 vector 등을 텍스트로 변환합니다. machine translation, conversational response generation 등이 있습니다.

Language Model

Language Model은 단어 시퀀스에 대한 확률 분포를 의미합니다. 즉, k개의 단어 배열이 나왔을 때, 실제로 그런 배열이 나올 확률을 의미합니다.

  • $P(I, am, a, boy) = 0.001$
  • $P(I, a, boy, am) = 0.00000001$

동시 확률 $P(w_1, ..., w_m)$ 은 사후 확률을 이용하여 분해하면,

$P(w_1, ..., w_m) = P(w_m | w_1, ..., w_(m-1)P(w_(m-1)|w_1, ..., w_(m-2)) ... P(w_3|w_1, w_2)P(w_2|w_1)P(w_1)$

Language Model은, 동시에 바라보는 단어 개수에 따라 unigram model과 n-gram model로 나눌 수 있습니다. unigram model은 단어 시퀀스의 확률을 계산할 때 단순히 각각의 단어가 나올 확률을 곱해서 계산합니다. n-gram model은 단어 시퀀스 확률을 계산할 때, 앞에 n-1개의 단어 시퀀스가 나올 때 그 다음에 나온 단어가 나올 확률의 곱으로 계산합니다.

language model은 문장의 자연스러움을 숫자로 나타낼 수 있기 때문에, 기계 번역이나 음성 인식, 새로운 문장 생성 등에 활용할 수 있습니다. 음성 인식을 예로 들면, 여러 개 후보 문장에서 language model을 이용해 가장 자연스러운 문장을 선택할 수 있습니다.

일반적으로 unigram model이나 2-gram model을 사용합니다. n-gram model에서 한 번에 바라보는 단어 개수가 늘어나면 데이터의 양이 지수적으로 증가하기 때문입니다. 경우의 수가 너무 많아져서 model이 학습하지 못한 단어의 쌍도 나오게 됩니다.

TF-IDF

TF-IDF(Term Frequency-Inverse Document Frequency)는, 문서 내에서 가장 비중있는 단어가 무엇인지 나타내는 지표입니다. 특정 term이 한 문서에서 많이 나오지만, 그 term이 나오는 문서 수는 적을수록 값이 큽니다. 여러 문서에서 골고루 나오는 단어(예: 있습니다, 입니다)는 별 의미가 없다고 보고, 한 문서에서만 많이 나오는 단어(예: 키워드, 전문 용어, 고유 명사 등)는 의미가 많다고 봅니다.

TF-IDF는 TF(Term Frequency)와 IDF(Inverse Frequency)의 곱으로 나타냅니다.

  • TF (Term Frequency): 문서 내에 특정 단어가 나오는 빈도수. 빈도수가 클수록 값이 커집니다.
  • IDF(Inverse Frequency): 특정 단어가 나온 문서 개수의 역수. 특정 단어가 나온 문서 수가 적을수록 값이 작아집니다.

TF-IDF 값이 큰 단어는 그 문서에서 중요한 단어라고 볼 수 있습니다.

Naive Bayes Classifier

Bayes Theorem은 아래와 같이 사전 확률과 사후 확률을 서로 바꿨을 때 확률을 계산하는 공식입니다.

$P(A|B) = P(B|A)P(A) / P(B)$

 

텍스트 분석 모델

 

TextCNN

Seq2CNN

SyntaxNet

논문 링크: https://arxiv.org/abs/1603.06042

자연어를 컴퓨터가 이해할 수 있게 하는 것을 목표로, 문장을 파싱하여 단어 간의 관계를 트리 형태로 내놓는 모델입니다. 2016년에 Google이 만들었습니다.

Attention Mechanism

응용

문장 분류

 

기계 번역

기계 번역에서 원본 언어를 "입력 문장"으로, 번역된 언어를 "대답 문장"으로 대응하여 학습을 시키면 간단한 챗봇을 만들 수 있습니다.

*[Deep Learning] seq2seq 를 이용한 챗봇 (Neural Machine Chatbot): tensorflow/nmt를 기반으로 챗봇을 만든 예제

한국어 자연어 처리

  • 한국어 문법 짚고 넘어가기: link

주의점

영어와 달리 한국어는 같은 어근을 여러 형태로 나타낼 수 있어, 형태소 분석이 필요할 수 있습니다. (예: 바꾸다, 바꾸니, 바꿔, 바꿉니다, ...) TextCNN 같은 경우 형태소 분석 결과를 이용하기도 하나, BERT 이후에는 통계 기반의 Tokenizer도 사용하기도 합니다.

형태소 분석기 종류는 아래와 같다.

한국어 말뭉치

한국어 말뭉치란 한국어로 된 말이나 글을 모아, 문장, 어절, 형태소 별로 분석한 데이터를 의미합니다. 자연어 처리의 기본이 되는 데이터이다. 주요 말뭉치로는 아래와 같은 것이 있습니다.

문자 단위 인코딩

사용하면 좋은 경우

  • 문법적인 의미를 추출할 때
    • 개체명 인식, 품사 분석 등
    • 문법적인 의미는 단어 전체가 일치하지 않더라도 일부 글자만 일치해도 추출할 수 있음
      • 예) '공부한다'가 '무엇을 하는 것'이라는 의미를 담고 있다면, '학습한다' 등 '한다'가 공통될 경우 모두 '무엇을 하는 것'이라는 것을 유추할 수 있음.
  • 모르는 단어를 벡터로 인코딩해야 할 때

참고자료

반응형

'활용 > NLP' 카테고리의 다른 글

TextCNN  (0) 2020.04.12
Word2vec 만들어보기  (0) 2020.04.12
Word2vec  (0) 2020.04.12
Text Embedding  (0) 2020.04.12