Lecture 11 – Convolutional Networks for NLP

Tobig's 1415 Textseminar·2021년 5월 19일
3
post-thumbnail

작성자: 세종대학교 데이터사이언스학과 이정은

ConvNets for NLP

이번 강의에서는 CNN을 사용한 Text Classification에 대해 설명합니다.

1. Why CNN?

RNN의 단점

RNN단점
기존 RNN은 prefix context없이 phrase를 잡아낼 수 없고, 마지막 단어 벡터의 영향을 많이 받는 문제를 가지고 있었습니다.

CNN for text

CNNfortext
CNN을 텍스트 처리에 사용하고자 한 메인 아이디어는 "문장 내 가능한 모든 단어 subsequence의 representation을 계산하면 어떨까?"였습니다.
이 방법은 해당 구문이 문법적으로 옳은지 판단할 수 없고, linguistically하지 않은 것 같다는 단점이 있습니다.

2. 1D Convolution for text

일반적으로 CNN은 이미지 처리에서 주로 쓰이며 2D convolution을 사용하지만, 텍스트 처리에서는 filter가 위아래 한 방향으로만 이동하는 1D Convolution을 사용합니다.

1D Convolution 연산

1DConv
Input은 문장 내 각 단어를 나타내는 dense word vector입니다. (one-hot vector도 가능합니다.) Input의 크기는 단어 개수 x word vector의 차원, Filter의 크기는 한번에 보고자 하는 단어의 개수 x word vector의 차원입니다.

Filter

filter
Filter는 polite/non-polite, about food/non about food 등의 특징을 나타냅니다.
한 개의 Filter가 위에서 아래로 이동하며 내적을 진행하면 output은 single vector인 5x1이 됩니다. 3개의 filter를 사용하면 output의 크기는 5x3으로 filter의 개수만큼 늘어납니다.
이때, 문장 내 단어의 개수는 7개에서 5개로 줄어들어 문장이 shrunk됩니다. 이를 해결하기 위해 padding을 사용합니다.

Padding

padding
padding=1을 적용하면, input과 동일한 길이의 output을 얻을 수 있습니다.

Pooling

pooling
Pooling은 특징들을 요약하는 역할을 합니다. Pooling에는 최대값을 가져오는 Max pooling과 평균값을 사용하는 Average pooling이 있습니다. 더 많이 사용되는 것은 max pooling인데, 그 이유는 자연어 처리에서 특징이 나타나는 경우는 매우 sparse하기 때문입니다. 예를 들어, polite라는 특징은 접속사, 관사 등에서는 나타날 수 없고, 그 외의 특정 단어에서 polite함이 드러날 것 입니다. 이때 이 특징을 max pooling이 더 잘 포착할 수 있다고 합니다.

Stride, Local Max Pooling / K-Max Pooling

etc
Stride는 filter가 한번에 이동하는 거리를 나타냅니다. Stride=2와 Stride=2 & local max pooling은 둘 다 representation을 압축하여 생성하지만, 다른 결과값을 가집니다. 실제 텍스트 처리에서는 많이 사용되지 않습니다.
K-Max Pooling은 각 열에서 max값 k개를 선정하는 방법으로, 해당 값은 정렬 시키지 않고 위 열의 동일하게 가져옵니다.

Dilation

dilation
Dilation rate는 filter 사이의 간격을 의미합니다. 즉, dilation=2인 3x3 filter는 dilation만큼 건너 뛰어 연산을 진행합니다. NLP에서의 dilated convolution은 적은 parameter로 더 넓은 범위를 볼 수 있게 합니다.

이미지 처리에서의 Dilation
https://zzsza.github.io/data/2018/02/23/introduction-convolution/

문장 자체의 의미를 중점적으로 이해하고 싶다면, filter의 크기를 증가시키거나 dilated convolution을 사용하여 한번에 보는 범위를 늘릴 수 있습니다. 혹은 CNN의 depth를 증가시키면 됩니다.

3. Single Layer CNN for Sentence Classification

"Yoon Kim(2014): Convolutional Neural Networks for Sentence Classification. EMNLP 2014."

해당 논문의 목적은 Sentence classification입니다.

Model Architecture

single_model
Convolution 연산은 word vectors을 concatenate하여 진행합니다. 한 채널에 대한 연산 결과는 c_i로 나타낼 수 있고, feature map c는 n개의 단어와 window size=h일 때 n-h+1 차원을 가지게 됩니다.
single_model1
feature map c를 max pooling하여 각 channel마다 하나의 값을 얻습니다. max pooling을 하면 filter weight와 window size, 문장 길이의 변화에 강해집니다.
Max pooling 이후 나온 feature vector에 softmax를 취하여 클래스 분류를 진행합니다.

Experiments

single_experiment
실제 모델에서는 filter size=2,3,4인 filter를 feature map으로 각 100개씩 사용하였습니다. pre-trained word vector를 사용하여 초기화하고, fine-tuning과 frozen을 모두 사용했습니다. 그리고 Dropout과 각 클래스의 softmax weight를 L2 normalize했습니다.
해당 모델은 간단한 single layer CNN으로 유의미한 분류 결과를 낸 것에 의의가 있습니다.

4. Toolkits

Gates units used vertically

block

Residual Block과 Highway Block 모두 Shorcut connection의 개념으로 convolution layer를 지나 나온 결과에 x에 대한 정보를 더해줍니다. Highway Block에서의 T(x)는 Transform gate, C(x)는 Carry gate를 의미하는데, 이는 output이 input에 대하여 얼마나 변환되고 옮겨졌는지를 표현합니다.

Batch Normalization

Batch Normalization은 CNN에서 주로 사용며, 배치별로 평균=0, 분산=1로 정규화시키는 작업입니다. 이를 수행하면 Convolution block이 항상 같은 scale을 가지기 때문에 안정적인 학습이 가능해집니다. 또한, parameter initialization에 덜 예민해지고 learning rate tuning이 한결 쉬워집니다.

Batch Nomralization / Layer Normalization
https://yonghyuc.wordpress.com/2020/03/04/batch-norm-vs-layer-norm/

1 Convolution

1x1 크기의 filter로, 적은 parameter 개수로 channel의 수를 줄일 수 있습니다.

CNN Translation

translation
seq2seq 이전에 나온 translation 모델로, encode로 CNN & decoder로 RNN을 사용한 모델입니다.

5. Deep CNN for Text Classification

"Conneau, Schwenk, Lecun, Barrault(2017): Very Deep Convolutional Networks for Text Classification. EACL 2017."
해당 논문에서는 text classification을 위한 deep한 CNN 모델을 제안합니다.

VD-CNN architecture

deep_model
VD-CNN의 모델 구조는 다음과 같습니다. VGGnet, ResNet과 비슷한 구조를 가집니다.

Experiments

deep_experiment
실험에는 large text classification dataset들을 사용하였고, layer가 깊을수록 error값이 낮은 것을 확인할 수 있습니다. 해당 표에는 기재되어 있지 않지만 depth=47이 depth=29보다 낮은 성능을 보였다고 합니다. 즉, NLP 분야는 depth=34가 minimum인 이미지 분야처럼 deep한 모델을 사용하기는 어렵다는 것을 의미합니다.

6. Quasi-Recurrent Nueral Network

quasi
RNN은 parallelize가 어려워 느리다는 단점을 가집니다. 이를 개선하기 위해 parallelize가 쉬운 CNN과 결합한 모델이 Quasi-Recurrent Neural Network입니다. 두 모델의 장점만을 가져와 Convolution과 Pooling을 통해 sequencial data를 parell로 처리합니다. 해당 모델은Sentiment classification을 진행했을 때, LSTM과 비슷한 성능을 내지만 3배 빠른 속도를 보였다고 합니다.

Reference

https://www.youtube.com/watch?v=EAJoRA0KX7I&list=PLoROMvodv4rOhcuXMZkNm7j3fVwBBY42z&index=12
https://zzsza.github.io/data/2018/02/23/introduction-convolution/
https://velog.io/@tobigs-text1314/CS224n-Lecture-11-ConvNets-for-NLP
https://arxiv.org/pdf/1408.5882.pdf
https://ratsgo.github.io/deep%20learning/2017/10/09/CNNs/
https://yonghyuc.wordpress.com/2020/03/04/batch-norm-vs-layer-norm/
https://arxiv.org/pdf/1606.01781.pdf
https://arxiv.org/pdf/1611.01576.pdf

11개의 댓글

comment-user-thumbnail
2021년 5월 19일

투빅스 14기 정세영

Text classification에 적용되는 CNN의 개념을 맥락을 집어주시면서 설명해주셔서 이해하기 수월했습니다.

  • RNN은 prefix context 없이 phrase를 잡아내기 어렵고 마지막 hidden state 하나만을 가지고 예측하는 구조의 한계가 있다.
  • NLP에서는 1D convolution을 사용하고 pooling은 주로 max pooling이 사용된다.
  • dilation rate란 filter를 적용할 데이터 사이의 간격을 의미한다. 적은 parameter로 더 넓은 범위를 보기 위함이다.
  • 1 Convolution은 filter가 한 줄인 구조이다.
  • NLP 분야에서는 vision 분야만큼 deep한 모델을 사용하기엔 어렵다.
  • CNN을 사용하면 RNN에서 불가했던 병렬화가 가능해진다.
답글 달기
comment-user-thumbnail
2021년 5월 19일

투빅스 14기 한유진

  • RNN은 prefix context 없이 phrase를 잡아낼 수 없고, 마지막에 있는 단어의 영향을 많이 받는 다는 한계가 있어 CNN으로 text classification을 해보자는 내용이 등장하게 됩니다.
  • NLP에서는 filter가 한방향으로만 이동하는 1D Convolution를 사용합니다. Filter는 polite/non-polite, about food/non about food 등의 특징을 나타냅니다. 특징들을 요악하는 역할을 하는 Pooling에서는 max pooling을 많이 사용하는데, 그 이유는 NLP에서 특징이 나타나는 경우가 sparse하기 때문입니다.
  • VD-CNN : deep CNN모델, 실험결과 NLP에서는 이미지분야에서처럼 deep한 모델은 쓴다고 성능이 잘 나오는것이 아니라는 것을 알 수 있었습니다.
  • Quasi-Recurrent Neural Network : 느리다는 단점을 가진 RNN을 개선하기 위해 parallelize가 쉬운 CNN과 결합한 모델입니다. Convolution과 pooling을 통해 sequential data를 병렬처리하였습니다.

CNN을 사용하여 Text classification을 수행하는 과정, 흐름을 잘 설명해주셔서 좋았습니다. 또한, 이미지처리와 비교한 NLP에서의 CNN활용법도 알 수 있었습니다. 좋은 강의 감사합니다!

답글 달기
comment-user-thumbnail
2021년 5월 23일

투빅스 15기 조준혁

  • 기존 RNN의 단점은 prefix context가 없이 phrase를 잡아낼 수 없고 마지막 벡터에 영향을 많이 받습니다.
  • Dilation rate는 filter 사이의 간격을 의미하며 dilation가 2라면 3x3 filter는 2만큼 건너 뛰어 연산을 진행합니다.
  • Sentence Classification을 위한 Convolution 연산은 word vector들을 concat하여 진행합니다. 필터 연산을 진행하고 max pooling을 진행하여 channel 마다 하나의 값을 얻게되는데, 이를 통해 filter weight와 window size, 문장 길이의 변화에 강인해집니다. 이후 feature vector에 softmax를 취해 클래스를 분류합니다.
  • Text Classification을 위한 Deep CNN인 VD-CNN의 구조는 VGGnet, ResNet과 비슷한 구조를 가지고 있습니다.

CNN을 이용해 Text관련 Task를 수행하는 방법과 모델에 대한 이해를 할 수 있었던 강의였습니다.

답글 달기
comment-user-thumbnail
2021년 5월 24일

투빅스 15기 김동현

Filter / Padding / Pooling(Max pooling, Average pooling) / Stride / Dilation rate의 개념과 계산방법을 자세히 알아볼 수 있는 시간이었습니다.

  • Gates units used vertically은 Residual Block과 Highway Block 모두 Shorcut connection의 개념으로 convolution layer를 지나 나온 결과에 x에 대한 정보를 더해줍니다. Highway Block에서의 T(x)는 Transform gate, C(x)는 Carry gate를 의미하는데, 이는 output이 input에 대하여 얼마나 변환되고 옮겨졌는지를 표현합니다.

  • 두 모델의 장점만을 가져와 parallelize가 쉬운 CNN과 결합한 모델이 Quasi-Recurrent Neural Network은 Convolution과 Pooling을 통해 sequencial data를 parell로 처리합니다. 이를 통해 RNN이 parallelize가 어려워 느리다는 단점을 개선합니다.

답글 달기
comment-user-thumbnail
2021년 5월 25일

투빅스 14기 정재윤

  • RNN은 Prefix context없이는 Phrase를 잡기 힘들고 마지막 단어에 영향을 굉장히 많이 받는 단점을 가지고 있다. 그래서 "문장 내 가능한 모든 단어 subsequence의 representation을 계산하면 어떨까?"라는 생각을 바탕으로 텍스트 처리에 CNN을 적용하려고 시도했습니다.

  • 연산의 대부분은 CNN의 연산과 크게 차이가 없으나 dilation은 조금 생소한 개념이다. dilation이란 filter를 적용할 때 데이터 사이의 간격을 넓혀서 보는 것으로 적은 parameter로 더 넓은 범위를 볼 수 있게 된다.

  • 이러한 발전으로 VD-CNN이라는 구조가 만들어졌다. 그러나 vision분야와는 달리 NLP분야에서는 단순히 모델이 깊다는 이유만으로 성능이 개선되지는 않았다.

답글 달기

투빅스 15기 조효원

  • 시퀀셜 데이터를 다루는 대표적인 모델인 RNN은 prefix context없이 phrase를 잡아낼 수 없고, 마지막 단어 벡터의 영향을 많이 받는 문제가 있었기에, CNN을 이용하여 문장 내 가능한 모든 단어 subsequence의 representation을 계산하자는 제안이 등장했다.
  • 텍스트 처리를 위한 CNN은 filter가 한방향으로만 이동하는 1D Convolution을 이용한다. Filter는 polite/non-polite등의 텍스트의 특징을 나타냅니다. 특징들을 요악하는 역할을 하는 Pooling에서는 max pooling을 많이 사용하는데, 그 이유는 NLP에서 특징이 나타나는 경우가 sparse하기 때문이다. Dilation rate는 filter 사이의 간격을 의미하는데, 문장의 의미를 이해하는 것을 주목적으로 한다면, filter의 크기를 증가시키거나 dilated convolution을 사용하여 한번에 보는 범위를 늘리는 방식을 택할 수 있다.
  • 이미지 처리와 다르게 deep한 모델을 사용해도 성능이 크게 좋아지지 않았다.
  • RNN의 시퀀셜 데이터에 강하다는 장점과 CNN의 병렬화 가능하다는 장점을 가져와 합친 모델이 Quasi-Recurrent Neural Network이다. Convolution과 Pooling을 통해 sequencial data를 병렬적으로 처리한다.
답글 달기

투빅스 15기 조효원

  • 시퀀셜 데이터를 다루는 대표적인 모델인 RNN은 prefix context없이 phrase를 잡아낼 수 없고, 마지막 단어 벡터의 영향을 많이 받는 문제가 있었기에, CNN을 이용하여 문장 내 가능한 모든 단어 subsequence의 representation을 계산하자는 제안이 등장했다.
  • 텍스트 처리를 위한 CNN은 filter가 한방향으로만 이동하는 1D Convolution을 이용한다. Filter는 polite/non-polite등의 텍스트의 특징을 나타냅니다. 특징들을 요악하는 역할을 하는 Pooling에서는 max pooling을 많이 사용하는데, 그 이유는 NLP에서 특징이 나타나는 경우가 sparse하기 때문이다. Dilation rate는 filter 사이의 간격을 의미하는데, 문장의 의미를 이해하는 것을 주목적으로 한다면, filter의 크기를 증가시키거나 dilated convolution을 사용하여 한번에 보는 범위를 늘리는 방식을 택할 수 있다.
  • 이미지 처리와 다르게 deep한 모델을 사용해도 성능이 크게 좋아지지 않았다.
  • RNN의 시퀀셜 데이터에 강하다는 장점과 CNN의 병렬화 가능하다는 장점을 가져와 합친 모델이 Quasi-Recurrent Neural Network이다. Convolution과 Pooling을 통해 sequencial data를 병렬적으로 처리한다.
답글 달기
comment-user-thumbnail
2021년 5월 25일

투빅스 15기 이윤정

  • RNN은 prefix context 없이 phrase를 잡아낼 수 없으며 위치의 영향을 많이 받는다는 한계점을 지닌다. 이러한 한계점을 보완하기 위해 CNN을 통해 문장 내 모든 단어 subsequence의 representation을 계산하자는 대안이 등장하였다.
  • 이미지 처리에서는 2D Convolution이 사용되는 반면, 자연어 처리에서는 위아래 한방향으로만 이동하는 1D Convolution이 사용된다. Filter/Padding/Pooling/Stride 등 대부분의 개념이 2D Convolution과 유사하지만, Dilation이라고 하는 filter 사이의 간격을 의미하는 생소한 개념이 등장한다. (물론 이미지 처리에서도 사용된다.) Dilation Convolution을 통해 적은 parameter로 넓은 범위를 볼 수 있다.
  • VD-CNN의 경우 VGGnet, ResNet과 유사한 구조를 지니며 Quasi-Recurrent Neural Network의 경우 RNN과 CNN을 결합하여 병렬 처리를 통해 RNN의 느린 속도를 보완한다.
답글 달기
comment-user-thumbnail
2021년 5월 25일

투빅스 15기 이수민

  • 기존 RNN 모델은 prefix context 없이 phrase를 잡아낼 수 없고, 마지막 단어 벡터의 영향을 많이 받는 문제점이 있다.
  • CNN을 text classification 에 사용하면 단어의 등장 순서나 문맥과 같은 정보를 보존할 수 있지만, 문법적으로 혹은 언어학적으로 맞는지 판단을 내릴 수 없다.
  • 일반적으로 텍스트 처리를 위한 CNN에서는 1D convolution을 이용하여 계산을 진행하고, 정보가 sparse하게 존재하기 때문에 주로 max pooling을 사용한다.
  • Dilation rate는 filter 사이의 간격을 의미한다.
  • Sentence classification을 위한 CNN에서는 convolution 연산이 word vector를 concat하여 진행된다.
  • Text classification을 위한 deep CNN 모델로는 VD-CNN 구조가 있으며, VGGnet과 ResNet과 비슷한 구조를 가진다.
  • Quasi-Recurrent Neural Network: 병렬화가 어렵운 RNN의 단점을 개선한 모델로, sentiment classification 진행 시에 LSTM보다 3배 더 빠른 속도를 보인다.
답글 달기
comment-user-thumbnail
2021년 5월 25일

투빅스 15기 김재희

  • RNN 기반의 모델들은 마지막 시점에 가까운 입력값에 영향을 많이 받게 되고, 접두어 등의 맥락이 없이는 제대로 phrase를 잡지 못했습니다.
  • CNN을 1d로 이용하면 필터, 패딩, max pooling over time 등 여러가지 트릭들을 통해 자연어에 이용할 수 있었습니다.
  • 이외에도 깊은 NN을 구성하기 위해 Batch Norm, 1x1 Conv, Residual Connection 등의 방법들이 발표되었습니다.
  • 이를 이용해 이미지 분야에서는 깊은 네트워크를 구성할 수 있었지만, 자연어에서는 깊은 네트워크가 유의미하지 않아 일정 깊이 이상 깊어질 수 없었습니다.
  • Quasi-Recurrent Nueral Network 등에서 CNN을 활용하여 병렬처리를 시도했습니다.
답글 달기
comment-user-thumbnail
2021년 5월 25일

투빅스 14기 박준영

  • CNN을 사용한 Text classification은 마지막 단어 벡터의 영향을 많이 받는 RNN 문제를 극복하고자 연구되었습니다.
  • 텍스트 처리에서는 filter가 위아래 한방향으로 이동하는 1D Convolution을 사용한다. input은 문장에 각 단어를 나타내는 dense word vector이며, Filter는 단어들의 특징을 나타낸다. padding을 사용하여 input과 동일한 output 길이를 얻는다. pooling은 특징을 요약하는 역할을 한다.
  • single Layer CNN for sentence classification 논문의 목적은 sentence Classification이다. word vectors를 concatenate하여 convolution연산을 한다. 간단한 single layer cnn으로 유의미한 분류 결과를 도출해냈습니다.
  • Deep CNN for Text Classification은 text classification을 위한 deep cnn을 제안한다.

CNN을 text에 적용하는 방법과 관련 모델들을 배울 수 있었던 유익했던 강의였습니다. 감사합니다!!

답글 달기