-
13. CNN을 이용한 text 분류general ML, DL, NLP/딥러닝 2022. 6. 28. 23:23
*본 게시물은 22-1학기 연세대학교 일반대학원 딥러닝을이용한비정형데이터분석(이상엽 교수님) 수업 내용을 정리한 것입니다.
이미지 처리에 사용했던 CNN도 text 분류를 위해 사용할 수 있습니다. 이를 위해서는 text를 이미지와 유사하게 처리할 수 있는 몇 가지 과정이 필요합니다.
1. 문서를 이미지 형태인 3D 형태(n, m, c)로 표현
n은 문서를 표현할 때 사용하는 최대 단어 수입니다. 즉 문서의 길이입니다.
- 특히 CNN을 사용하여 텍스트 분류를 할 때에는 모든 문장들에 대해 n을 동일하게 맞춰주어야 합니다.
- 패딩을 하거나 잘라냅니다.
m은 한 단어를 표현하는 임베딩 벡터의 차원,
c는 이미지 데이터의 채널로, text 데이터에서는 1로 간주합니다.예로 n=8, m=5, c=1인 형태에 text 데이터를 맞추어야 한다고 가정합니다.
text 데이터는 The movie was interesting and enjoyable (6단어) 입니다.
문서 길이(n)는 일괄적으로 모든 텍스트에 대해 8로 설정했으므로 6단어인 text에 제로패딩을 더해 길이를 맞추어 주었습니다. 차원(m)이 5이므로 각 단어를 5차원의 임베딩 벡터로 표현하였으며 text이므로 채널수는 1입니다. 이미지는 공간 정보를 나타내기 위해 필터를 사용하였으나, 문서에서는 다행히 정사각 필터를 사용할 필요가 없습니다 ^^;
2. 합성곱 필터를 적용하여 필터와 문서 간 합성곱 시행
텍스트에 대해서는 n*m*c 형태 문서에 대해 k*m*c의 필터를 적용합니다. 필터 개수는 데이터의 채널 수를 따르는데, text는 채널 수가 1이므로 필터도 1개를 사용합니다. 물론 당연히 여러개 필터를 적용할 수는 있습니다
(귀찮아서 그렇지).문서는 대부분 stride를 1로 설정합니다. 필터 크기 k는 m보다 작아야하며, 위의 예시에 대해 3*5*1을 사용해보겠습니다.
3*5*1의 필터입니다 :D 문서-필터간 합성곱 중입니다. 스칼라값을 나열하면 액티베이션 맵이 됩니다. 문서와 필터 간 합성곱의 결과는 하나의 스칼라입니다. 때문에 이를 나열하여 액티베이션 맵을 생성할 수 있습니다. 이전 CNN을 생각해보았을 때, 나오는 액티베이션 맵의 크기를 구하는 방법이 있었습니다. 문서에서는 (n-k+1) 크기의 1D array로 리턴됩니다. 여기서는 (8-3+1)이므로 (6,)임을 확인할 수 있습니다.
위에서 귀찮다고 한 필터 여러개는 (n-k+1)에 필터 개수를 곱해주면 됩니다. 만일 필터가 h개라면 (n-k+1)*h가 액티베이션 맵 크기입니다.
3. 이미지와 마찬가지로 pooling layer 추가
풀링은 max 풀링과 average 풀링이 존재했었습니다. 풀링은 풀링 필터를 적용함으로써 진행되며, 풀링 필터 크기와 스트라이드는 대부분 동일합니다.
4. flatten() -> Dense layer -> 출력층
여기서 CNN 모형을 다시 생각해 볼 필요가 있습니다. CNN 모형은 대부분 다음과 같이 2부분으로 구성됩니다.
합성곱(convolution)
pooling 레이어의 합성곱 층탑층(Dense; FC layer) 합성곱층에서 전달되는 결과물은 3D의 액티베이션 맵입니다. 그러나 탑층은 1차원을 받기에 이를 가래떡처럼 늘려주는 flatten()을 사용합니다. 그 이후에는 dense layer에 통과시키고, 출력층을 통과해 확률을 리턴합니다.
'general ML, DL, NLP > 딥러닝' 카테고리의 다른 글
15. Attention & Transformer (0) 2022.06.28 12. LSTM(Long Short-Term Memory) (0) 2022.06.28 11. RNN(Recurrent Neural Network) (0) 2022.06.28 10. 이미지 분류 사전학습모형 (0) 2022.04.21 9. CNN 코드 - cats & dogs (0) 2022.04.21