# (01강) Introduction to NLP, Bag-of-Words

> 다양한 자연어 처리 task, 그리고 최근 동향에 대해 소개합니다.\
> 자연어를 처리하는 가장 간단한 알고리즘 중 하나인 Bag-of-Words에 대해서 소개합니다.\
> Bag-of-Words를 이용한 문서 분류 모델을 소개합니다.

## 1. NLP의 활용

### 1.1. Low-level parsing

* **Token & Tokenization**\
  문장에서 각 단어를 Token이라하며, Token을 추출하는 과정을 Tokenization이라 한다.
* **Stemming**\
  단어는 어미가 다양하게 변하는데(맑다, 맑은, 맑고) 이런 다양성을 없애고 의미(어근)만을 추출하는 것

### 1.2. Word and phrase level

* **NER (Named Entity Recognition)**\
  고유명사 인식
* **POS (Part Of Speech)**\
  품사나 성분을 알아내는 Task
* **Noun-phrase chuking**
* **dependency parsing**
* **coreference resolution**

### 1.3. Sentence level

* **Sentiment Analysis (감정분석)**\
  긍정, 부정 감정 분석 Task
* **Machine Translation (기계번역)**\
  영한 번역시 단어변형과 어순 변형등을 고려한 Task

### 1.4. Multi-sentence and Paragraph level

* **Entailment Prediction**\
  두 문장간의 논리적인 내포 혹은 모순관계를 예측하는 Task\
  ex) 나는 밥을 먹었다. / 나는 오늘 하루종일 아무것도 먹지 못했다 => 모순
* **Question Answering**\
  질문에 대해 응답하는 Task. 구글 검색, siri 등
* **Dialog Systems**\
  챗봇과 같이 대화를 수행하는 자연어 기술
* **Summarization**\
  문장 요약

### 1.5. Text Mining

KDD, The WebConf(WWW), WSDM(CIKM, ICWSM)

* **트랜드 분석**
* **키워드 분석**

### 1.6. Information Retrieval

SIGIR, WSDM, CIKM, RecSys

* **추천시스템**\
  사용자가 좋아할 법한 데이터를 추천해주는 시스템으로 검색분야에서 등장한 새로운 Task

## 2. Trends of NLP

NLP는 꾸준한발전을 이루고 있다.

* Word2Vec or GloVe
* RNN-family models(LSTMs and GRUs)
* Attention modules and Transformer models
* Rule 기반의 번역에서 RNN기반의 번역을 통해 더 좋은 성능을 가져오게 되었다.

> &#x20;Transformer 이후, 각 Task 별로 모델을 구성하지 않고 Pre-Trained Model이 등장함으로써 Transfer Training이 가능해졌다. (BERT, GPT2, GPT3 ...)
>
> &#x20;단 사용되는 리소스가 매우 커서 대기업 위주로 활발하게 연구가 되고있다.

## 3. Bag-of-Words

리스트에 단어를 담는다는 느낌으로 Bag-of-Words 라는 명칭을 가지게 되었다.

### 3.1. Working Steps

* **Step1 : Constructing the vocabulary containing unique words**
  * "John really really loves this movie", "Jane really likes this song"
  * vocab : {"Jone", "really", "loves", "this", "movie", "Jane", "likes", "song"}
* **Step2 : Encoding unique words to one-hot vectors**

  * vocab : {"Jone", "really", "loves", "this", "movie", "Jane", "likes", "song"}
  * {\[1, 0, 0, 0, 0, 0, 0, 0], \[0, 1, 0, 0, 0, 0, 0, 0], ..., \[0, 0, 0, 0, 0, 0, 0, 1]}
  * For any pair of words, the distance is $$\sqrt{2}$$
  * For any pair of words, cosine similarity(내적값) is 0

  "John really really loves this movie" => \[1, 2, 1, 1, 1, 0, 0, 0]\
  "Jane really likes this song" => \[0, 1, 0, 1, 0, 1, 1, 1]

### 3.2. NaiveBayes Classifier for Document Classification

Bag of Words로 나타낸 문서의 분류를 처리하는 대표적인 방법이다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mjl8ETJqDW9bnHx30Bp%2F-MjlBYx6Df_thCDmbaG3%2Fimage.png?alt=media\&token=b6f0e21a-cde2-4e2e-b540-4f85cf797017)

* C: Class of Document (ex. sport, financial etc..)
* D : Document
* MAP : Maximum a posteriori = most likely class

Document "d" 가 주어졌을때, 각 Class "c"에 해당할 조건부 확률이 최대가 되도록 하는 값을 구하는 것.\
Line 2에서 Line 3으로 넘어가는 것은 d라는 문서를 고정하였기 때문에 P(d)를 상수로 볼 수 있어 제거가 가능하다.&#x20;

Document "d"에서 각 단어가 독립이라면 아래와 같이 나타낼 수 있다.

$$P(d \mid c) P(c) = P(w1, w\_2, \dots, w\_n \mid c) P(c) = P(c)  \prod\_{w\in W}P(w \mid c)$$

예를 들어 보도록 하자, \
각 Training Data와 Test Data가 아래와 같이 주어져있다면, 각 Test Data의 각 토큰 별 확률과 Test 문서 d=5가 cv, nlp일 확률을 구할 수 있다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-MjlDbpfmxys5SyW-4_p%2F-MjlEHwIDbMlmlTCwdL0%2Fimage.png?alt=media\&token=1ef920f4-fa69-4dfd-bd7c-9742662b3e82)

* $$P(c\_{cv} \mid d\_5) = P(c\_{cv})  \prod\_{w\in W}P(w \mid c\_{cv}) = \frac{1}{2} \times \frac{1}{14} \times \frac{1}{14} \times \frac{1}{14} \times \frac{1}{14}$$
* $$P(c\_{nlp} \mid d\_5) = P(c\_{nlp})  \prod\_{w\in W}P(w \mid c\_{nlp}) = \frac{1}{2} \times \frac{1}{10} \times  \frac{2}{10} \times \frac{1}{10} \times \frac{1}{10}$$

여기서 우리가 볼 수 있는 것은 만약 한 단어(토큰)이라도 Training 의 단어 집합에 속하지 않는다면 그 확률값은 0이 되어 해당 클래스로 분류되지 않게 된다는 것이다.

## 참고코드 Link

{% embed url="<https://drive.google.com/file/d/1GxAA-cXY1FRlMiu_PDdTZhE0lMDYPza4/view?usp=sharing>" %}
