NLP를 위한 CNN

Effy_ee·2024년 10월 10일

8번째 주차

목록 보기
1/3

우선 CNN에 대해서 먼저 알아보도록 하자.

CNN

일반적인 cnn의 기본적인 구조는 아래와 같다.

Convolution Layer와 Sub-Sampling Layer들이 일정 수 만큼 나온 후 마지막에 Fully-Connected Layer가 나오는 구조이다.

Convolution

cnn은 이미지에 대해 convolution연산을 사용하는 layer들이 사용된 Neural Network를 말한다. 흔히 이미지에서 사용되는 2D convolution을 살펴보자.

  • 필터를 입력이미지의 왼쪽 상단부터 오른쪽 하단으로 이동시킨다.
  • 각 위치에서 필터와 이미지의 해당 부분을 요소별로 곱하고 그 결과를 모두 더한다.
  • 이 합을 출력 이미지의 해당 위치에 기록한다.
from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D
from tensorflow.keras.models import Model

input_tensor = Input(shape=(5, 5, 1))
x = Conv2D(filters=1, kernel_size=3, strides=1)(input_tensor)
print('x.shape:', x.shape)

#x.shape: (None,3,3,1)

NLP문제에서의 CNN의 활용

이 그림을 보며 이해해보자.

1. NLP에서의 입력 데이터 구조

NLP 문제에서 CNN을 사용할 때, 입력 데이터는 아래와 같이 표현된다.

  • 입력: 문장이나 전체 글을 행렬(matrix) 형태로 표현
  • 행렬의 각 행: 하나의 토큰(주로 단어, 때로는 개별 문자)
  • 각 행의 벡터: 단어 벡터 (주로 임베딩 벡터, 때로는 원-핫 벡터)

2. NLP에서의 CNN 필터 적용

NLP에서 CNN 필터는 다음과 같다.

  • 필터 너비: 단어 벡터의 전체 차원과 동일
  • 필터 높이: 보통 2-5개 단어를 커버 (n-gram과 유사)
  • 슬라이딩: 세로 방향으로만 이동

이렇게 적용된 필터는 n-gram과 유사한 기능을 수행하지만, 더 효율적으로 학습된다.

위의 예시에서는 3개의 단어를 커버하는 필터(3-gram)가 사용된다. 필터는 문장의 처음부터 끝까지 세로로 슬라이딩하면서 적용된다.



결과: 0.1 x 0.1 + (-0.1) x 0.2 + ... + 0.5 x 0.7 = 0.75

두 번째에는 like this movie에 적용될 것이다.
특징 맵: [0.75, 0.85, 0.95, 0.80]

3. 풀링 레이어

컨볼루션 연산 후에는 보통 풀링 레이어가 따라온다. pooling layer는 input 값을 subsample하는 것과 같다. 이미지에서는 최대 풀링(max pooling)이 사용되고 있다.

  • 최대 풀링: 각 필터에 의해 생성된 특징 맵에서 가장 큰 값을 선택한다.
  • 목적: 가장 중요한 특징을 추출하고 데이터의 차원을 줄인다.
    이 과정을 통해 문장의 가장 중요한 특징들이 추출되며, 이는 후속 처리 단계(예: 완전 연결 레이어)의 입력으로 사용된다.

최대 풀링
최대값 선택: 0.95

이 과정을 여러 필터에 반복하면 다양한 언어 패턴을 포착할 수 있게 된다.
필터1 (긍정 감정): 최대값 0.95
필터2 (부정 감정): 최대값 0.30
필터3 (중립 표현): 최대값 0.60

Pooling은 전체 matrix에 대해서 적용할 필요없이 window 크기를 정하고 해당 window에 대해서 pooling을 진행하면 된다. 아래 그림은 2x2 window로 max pooling을 하는 것을 보여준다.

원본 데이터의 크기가 1/4로 줄어들어 각 2x2 영역에서 가장 큰 값만 남았다.

풀링의 목적은 크게 3가지이다. 데이터의 크기를 줄이고 가장 중요한 특징을 추출하며 과적합을 방지하는 것이다.

이렇게 추출된 특징들은 후속 레이어의 입력으로 사용되어 최종적인 분류나 예측을 수행하게 된다. CNN 구조는 텍스트의 지역적 특징을 효과적으로 포착하면서도, 단어의 순서 정보를 유지할 수 있어 다양한 NLP 태스크에 성공적으로 적용될 수 있다.

0개의 댓글