CS224n: Deep Learning for NLP - 시작

 

스탠포드 대학의 ‘CS224n: Deep Learning for NLP’ 정리하기

독학 한 번 해 보자.

CS224n?

스탠포드의 대표적인 자연어처리 강의

누가 그랬는데 이미지 프로세싱은 CS231n을, 자연어처리는 CS224n를 공부하라고 한다.

CS231n 내용은 지난 학기 머신러닝 수업에서 충분히 다뤘으니 CS224n를 공부해보겠다.

구글링할 때 CS224d로 검색해야 자료가 많이 나오는데, 이는 과목명칭이 2017년에 CS224d -> CS224n 으로 바뀌었기 때문.

참고자료

공식 링크

강의 공식 사이트(http://web.stanford.edu/class/cs224n/)

유투브 강의 영상(https://www.youtube.com/playlist?list=PL3FW7Lu3i5Jsnh1rnUwq_TcylNr7EkRe6)

실라버스(http://web.stanford.edu/class/cs224n/syllabus.html)

CS224d lecture note(http://cs224d.stanford.edu/lecture_notes/)

타 블로그 링크

http://solarisailab.com/archives/818

http://deephaja.blogspot.kr/2017/03/cs224d-lecture-note-1.html

http://sacko.tistory.com/2?category=631408

Lecture Note 1

핵심어구들(Keyphrases): Natural Language processing, Word Vectors, Singular Value Decomposition, Skip-gram, Continuous Bag of Words(CBOW), Negative Sampling, Hierarchical Softmax, Word2Vec

이 노트는 자연어 처리(Natural Language Processing(NLP))의 컨셉(concept)과 현재 관심있게 논의되고 있는 NLP문제들을 소개한다. 그 다음에, 단어들(words)을 수치적인 벡터들(numerical vectors)로 나타내는 컨셉에 대해 논의할 것이다. 마지막으로, 단어 벡터들(word vectors)을 디자인하는 일반적인 방법론들에 대해 논의할 것이다.

Introduction to Natural Language Processing

NLP란 무엇인가.

What is so special about NLP?

자연어(인간의 언어)의 어떤점이 그렇게 특별한가? 인간의 언어는 어떤 종류의 물리적인 표시를 위해서가 아니라, 의미를 전달하기 위해서 고안된 시스템이다. 따라서, 비전(vision)이나 다른 머신 러닝 문제들(task)과는 매우 다르다.

대부분의 단어들이 언어학적인 실체(linguistic entity)와 관련 없는 단순한 상징(symbol)이다. 단어는 기의-시니피에-(아이디어나 어떤 의미)에 기표-시니피앙-를 맵핑(map)한 것이다.

예를 들어, “rocket”이란 단어는 로켓의 컨셉을 지칭하고, 이를 확장하여 로켓의 실체를 가리킨다. 하지만, 몇가지 예외들도 있다. 예를 들어, 우리가 감탄을 나타내는 단어와 문자로써 “Whooompaa” 같은 표현을 사용할 때. 게다가, 언어의 상징들(symbols)은 여러 가지 양식(modalities)으로 부호화(encoded) 될 수 있다. (음성, 몸짓, 쓰기 등) 이런 양식들은 연속적인 신호들(continuous signals)로 뇌에 전달된다. 따라서, 연속적인 형태로 부호화 된다. (인간 언어와 언어학에 대해 개념화하고 의미와 참조로부터 단어를 구별짓는 많은 철학적 작업들이 있다. 그 중에서도 특히, 비트겐슈타인, 프레게, 러셀, 밀의 작업들을 참조하라.)

Examples of tasks

음성처리(speech processing)부터 의미 해석(sematic interpretation), 담화분석(discourse processing) 등의 다양한 난이도(level)의 NLP 문제들이 있다. NLP의 목적은 컴퓨터가 어떤 작업을 수행하기 위해서 자연어를 “이해”하는 알고리즘을 디자인 하는 것이다. 예제들은 난이도에 따라 분류될 수 있다.

쉬운 문제들(Easy)

  • 철자 검사(Spell Checking)
  • 키워드 검색(Keyword Search)
  • 동의어 찾기(Finding Synoonyms)

중간 난이도 문제들(Medium)

  • 웹사이트, 문서 등으로부터 정보 추출(Parsing information from websites, documents, etc.)

어려운 문제들(Hard)

  • 기계 번역(Machine Translation)-e.g. 중국어를 영어로 번역-
  • 의미 분석(Sematic Analysis)-질문의 의미가 무엇인가?-
  • 동일 지시어(Coreference)-e.g. 문서에서 “he”나 “it”이 지시하는 바가 무엇인가?-
  • 질의 응답(Question Answering)-e.g. 제퍼디 퀴즈쇼 질문에 답하기-

이것만 보면 되게 재미있겠다.

How to represent words?

거의 틀림없이 모든 NLP 문제들을 통틀어서 가장 중요한 공통 분모는 입력으로 들어오는 단어들을 다른 모델로 어떻게 나타낼 것인에가에 관한 문제이다. 대부분의 초기 NLP 연구들-우리는 다루지 않을 것이다.-은 단어들을 원자 기호들(atomic symbols)로 나타내었다. NLP 문제들을 잘 풀기 위해서는, 첫째로 단어들간의 유사성과 차이에 대한 개념(notion)이 있어야만 한다. word vector들을 통해서, 우리는 벡터 그자체를 이용해서 이런 특징을 손쉽게 가져갈 수 있다. (Jaccard, Cosine, Euclidean 등의 distance measure를 이용하면 된다.)

학교 수업듣고 공부해서 이건 할 필요가 없어졌습니다.