본문 바로가기
Data Science/NLP with Deep Learning

딥러닝으로 NLP 하자 (1) - NLP와 Deep learning 기초

by 싸코 2017. 9. 19.

※ 본 포스팅은 스탠포드 대학의 "CS224n: Natural Language Processing with Deep Learning"[각주:1] 강의를 수강하며 배운 것을 정리하기 위해 작성되었습니다. 모든 원문은 다음 링크에서 확인하실 수 있습니다. http://web.stanford.edu/class/cs224n/


Prerequisites for this course

- Proficiency in Python

- Multivariate Calculus, Linear Algebra

- Basic Probability and Statistics

- Fundamentals of Machine Learning(loss functions, taking simple derivatives, performing optimization with gradient descent)



Introduction to NLP and Deep Learning



1. 자연어처리 (NLP)

Natural Language Processing은 다음의 영역의 교집합이라고 할 수 있음


  • 컴퓨터 과학
  • 인공지능
  • 언어학


NLP의 목표

유용한 업무 수행을 위해서 Natural Language자연 언어(사람의 언어)를 컴퓨터가 처리하고 이해할 수 있도록 하는 것임

예를 들면, 업무 수행, 예약하기, 물건 구매, 질문답변 등이 위에서 말한 유용한 업무수행이다.


speech 또는 text로부터 형태소를 분석해 syntactic analysis(의미적 분석)을 하고 그 의미를 해석할 수 있도록 하는 것이 전체적인 NLP 방향이라고 할 수 있다.



NLP의 응용분야

스펠링 및 맞춤법 검사, 키워드 검색, 동의어 발견 등이 있을 수 있고 웹사이트로부터 정보를 추출하거나 문서를 분류하는 등에도 활용될 수 있다. 그 외에 기계번역, 복잡한 질문에 대한 답변 등이 있을 수 있다.


NLP 산업

검색, 온라인 광고 매칭, 자동번역, 마케팅/금융에서의 감성분석, Speech Recognition, 챗봇 등에서 NLP가 활용된다.



Natural Language (인간의 언어에서 특별한 것은 무엇인가)

Natural Language인간의 언어는 일종의 신호 시스템이다. (discrete/symbolic/categorical)
다시 말해 언어는 사람(speaker/writer)이 자신이 말하고 하는 바를 상세하기 전달하기 위한 신호체계 같은 것이다.
상징적으로 무언가를 표현한다고 해석할 수 있음

종종 minor한 예외도 있다. ex. I loooooove it, 우리나라 말로는 조오오아 가 되려나..

소리(Sound), 제스처(Gesture), 글자(Images)를 신호화하여 커뮤니케이션을 한다.
그 상징(symbol)은 서로 다른 방법으로 신호화(encoding)하여도 그 의미가 변하지 않는다.

인간의 언어가 상징적/분류적 신호체계라고 하지만, 인간의 뇌에서 신호화는 activation의 연속적인 패턴으로 보인다. 그리고 상징은 소리 혹은 시각적으로 연속된 신호 형태로 변환된다. 너무나 많은 단어, 단어의 상징적 신호화는 기계학습에서 sparsity 문제를 야기한다.




2. 딥러닝(Deep Learning)

딥러닝은 기계학습의 하위분야이다. 대부분의 기계학습 방법은 human-designed representations와 input features 덕분에 잘 작동한다. (계속 공부하면서 이 부분 보충) 기계학습은 최종 예측을 하기위해 최적화된 가중치(weights)를 만들어내는 수준이 되었다. 
*features는 같은 의미를 분야마다 다르게 표현한다. 우리가 아는 independent variable, explanatory variable, input variable, predictor variable이 같은 의미로 사용된다.

Machine Learning in Practice
  = Describing data with features a computer can understand + Learning algorithm
  = 도메인 전문성 + features의 가중치 최적화 작업

Representation learning은 좋은 features 또는 representations를 자동적으로 학습하는 방법이다.

Deep learning 알고리즘은 (여러 단계로) representation과 output을 학습하는 방법이다. 보통 우리가 알고 있는 다층 layer를 생각하면 될 듯 하다.

둘다 "raw" data를 input으로 하지는 않는다. ex. 소리, 문자, 단어 등



딥러닝의 역사

다양한 신경망 모형(neural networks) 중에서도 딥 러닝이 주요 모델이다. NLP 문제를 잘 해결해줄 수 있는 딥러닝 기법과 관련하여 역사적으로 접근할 예정이다. 딥러닝은 굉장히 오래된 학습 모델이다. 수동적으로 고안된 features는 종종 과적합(over-specified) 또는 불완전(incomplete)하며 모델을 설계하고 검증할 때 오랜 시간이 걸린지만, 학습된 Features들은 쉽게 적용되고(adapt) 빠르게 학습한다.

딥러닝은 세상과, visual, 언어 정보를 대표하는 아주 유연한(flexible), 일반적(universal) , 학습이 가능한 프레임워크를 제공한다.(?)
Deep learning provides a very flexible, universal, learnable framework for representing world, visual and linguistic information.
딥러닝은 raw text로부터 비지도학습(unsupervised)이 가능하며 지도학습(supervised) 둘다 가능하다.

최근 10년, 딥러닝 기술은 다른 기계학습 알고리즘을 능가하는 것으로 각광받고 있다. 그 이유는 다음과 같다
  • 많은 양의 학습 데이터
  • 빠른 컴퓨팅 성능 (CPU/GPU)
  • 새로운 모델, 알고리즘, 아이디어의 등장

위와 같은 시대적 변화와 함께 딥러닝은 재조명받아 현재 가장 인기있는 기계학습 방법이 되었으며 처음에는 speech와 video에서 향상된 성능 입증했지만 이제는 NLP로 그 영역이 확장되었다.



딥러닝 for Speech

딥러닝의 첫번째 시도는 음성인식(Speech Recognition)으로부터 생성된 대량의 데이터셋을 딥러닝한 것이었다.

Image result for Context-Dependent Pre-trained Deep Neural Networks for Large Vocabulary Speech Recognition
그림. Context-Dependent Pre-trained Deep Neural Networks for Large Vocabulary Speech Recognition [각주:2]


딥러닝 for Computer Vision

대부분의 딥러닝 그룹은 컴퓨터 비전에 집중했다. 

Image result for ImageNet Classification with Deep Convolutional Neural Networks




NLP는 다음과 같은 이유로 어려운 분야이다.

  • 복잡하다 (representing, learning & using linguistic/situational/world/visual knowledge)
  • 애매하다 (인간의 언어는 프로그래밍과 다른 formal 언어와는 다르다)
  • 의존적임 (인간의 언어를 해석하기 위해서는 실제 세상과 상식, 문맥정보 등이 필요하다)

Deep Learning으로 NLP 문제를 해결하는 것이 목표이다.



최근 NLP와 관련하여 큰 개선이 있었다.

  • Levels: speech, words, syntax, semantics
  • Tools: parts-of-speech, entities, parsing
  • Applications: machine translation, sentiment analysis, dialogue agents, question answering


 

과거

딥러닝(현재)

Levels

(Morphology)

언어는 형태소(morphemes)로 구성되어 있다

Unkindness => Prefix + Root + Suffix

모든 형태소는 하나의 벡터이다. 신경망(neural network(은 두개의 벡터를 하나의 벡터로 합치는 것이다

unfortunately = unfortunate + ly

= (un + fortunate) + ly

Levels

(Semantics)

Lambda Calculus

모든 단어와 모든 구문(phrase), 모든 논리적표현은 하나의 벡터이다.

Tools

(Parsing sentence structure)

 

신경망은 정확하게 문장의 구조를 이해하고 해석을 돕는다

Applications

(Sentiment Anlaysis)

다른 말뭉치(bag-of-words)와 결합된 감성사전 또는 직접 만든 negation features를 사용하여 감성분석

단어의 순서를 무시하고 모든 것을 파악하지는 못하는 문제있음

RecursiveNN을 통해 morphology, syntax, logical semantics 학습 가능


*원문에서 나머지 Applications 내용과 이해를 돕는 그림을 통해 좀더 쉽게 이해할 수 있음



출처: https://myndbook.com/view/4914






한줄 개인적인 요약

딥러닝은 신경망 모형의 각 하나의 벡터에 하나의 단어/구문... 레벨을 대응해서 학습하는 방식인듯 함.


그림. Deep Learning으로 Sentimental Analysis(감성분석) 하기[각주:3]

  1. Stanford Edu. CS224n: Natural Language Processing with Deep Learning. http://web.stanford.edu/class/cs224n [본문으로]
  2. Dahl, George E. et al. “Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition.” IEEE Transactions on Audio, Speech, and Language Processing 20 (2012): 30-42. [본문으로]
  3. CS224d: Deep Learning for Natural Language Processing. http://cs224d.stanford.edu/ [본문으로]

댓글