CNN for NLP

( 참고 : “딥러닝을 이용한 자연어 처리 입문” (https://wikidocs.net/book/2155) )


1. Introduction

우리에게 CNN은 image 처리로만 익숙하다. 하지만 CNN은 nlp에서도 사용될 수 있다.

이번 포스트에서는, nlp에서 1D CNN이 어떻게 사용되는지 살펴볼 것이다.


우선, 아래와 같은 행렬을 생각해보자.

  • $n$은 문장의 길이
  • $k$는 embedding 차원

.


2. 1D CNN for NLP

CNN의 kernel 너비는, embedding 차원인 $k$와 동일하게 설정된다. (따라서, 일반적으로 kernel의 “높이”를 kernel size라고 부른다. )

  • ex) kernel size=2

    .


아래의 그림을 통해, 어떠한 과정으로 convolution이 이루어지는지를 쉽게 이해할 수 있다.

.


어떻게 적용이 되는지는 쉽게 이해가 갈 것이다. 그렇다면, kernel size가 가지는 의미는 무엇일까?

이는, “참고하는 단어의 범위”로 생각할 수 있다. 즉, n-gram의 “n”으로 생각하면 된다.

아래의 그림은, kernel size가 3인 CNN으로, tri-gram이라고 생각할 수 있다.

.


3. Max-Pooling

CNN에서의 Maxpooling과 동일하다.

아래의 그림은, 2개의 kernel ( 각각 kernel-size=2 , kernel-size=3 )로 부터 생성된 vector에서 Maxpooling을 한 결과다.

.


4. Architecture

위의 1D CNN과 Maxpooling을 결합하여 생성된 최종적인 Neural Net를 도식화 하면 아래와 같다.

.