Character-level Convolutional Networks for Text Classification∗

Character-level Convolutional Networks for Text Classification
(GitHubPaper)

1. 개요

Word2Vec 방법론은 자연어를 해석하는데 있어서 매우큰 변화를 가지고 왔다. 하지만 기본적으로 형태소 분석후에 단어를 Vector 로 Embedding 하기 때문에 형태소 분석기의 성능에 따라 전체의 결과에 큰 영향을 주는 단점이 있다. 이러한 문제를 해결하기 위한 접근 방법으로 최근 Char Embedding 기법에 대해서 생각을 해보고자 한다. 

결론부터 이야기 하자면 모든 케이스에 항상 최고인 방법은 없다가 되겠지만, Char 단위로만 Embedding 해서 과연 좋은 모델이 나올까라는 의문에 대해서는 어느정도 의문을 해소할 수 있는 결과를 보여주고 있다고 생각한다. 위의 비교 결과는 영문에 대한것으로 한글의 경우 Char 단위가 더 많은 의미(자음, 모음 조합 등)을 가지고 있기 때문에 통상적으로 한글에 있어서는 Char Embedding 이 훨씬더 좋은 성능을 보여준다고 한다.

2. 접근방법 

우선 신경망 아키택쳐를 한번 살펴 보도록 하자, 전체적으로 Word 단위로 Char Embedding 을 하는 아키택쳐와 엄청나게 다른 것은 없다.

Figure 1 만 보면 구현 관점에서 잘 이해가 가지 않을 수 있기 때문에 세부적인 아키택쳐 요소들을 간단하게 그려 보았다.

몇 가지 중요한 Factor 들을 하나씩 살펴 보도록 하자 .

(1) Input Layer 
가장 핵심적인 개념이 Word 단위가 아닌 Char 단위로 CNN 에 적용하겠다라는 것이 였으므로, 당연히 Char 단위를 Vector 화 시키기 위한 방법이 필요한데, 색다른 방법을 적용하는 것은 아니고 그냥 One-Hot Encoding 을 활용한다. Char 표현수 가 정해지면 해당 축은 고정이 되고, 나머지 하나의 축 또한 우리가 정해야 하는 변수로 Sequence Length 로 이 또한 고정 값이 되겠다.  그외에 영어의 경우 대/소문자 구분여부, 모르는 단어(Unknown) 에 대한 치환은 Zero Vector 처리 등 기준을 정하면 Input Vector 를 구성하는 부분은 별다른 것이 없어 보인다.

(2) Convolution  & Pooling Layer  
Convolution Layer 의 구조는 Yoon Kim 의 Multi Channel Char CNN 과는 다르게 6 Layer Depth 로 구성된다는 점에서, 조금 더 높은 비선형성을 설명할 수 있다고 생각된다. 필터의 사이즈는 일반적인 이미지 분석과는 다르게 Input 의 Sequence Length 방향으로 큰 필터, 작은 필터 두가지를 적용하며, Char Representation 방향으로는 Char Representation 과 같은 사이즈의 필터를 사용한다. Sequnece Length 의 필터 사이즈의 의미는 앞/뒤로 몇개의 캐릭터를 고려하여 결과를 판단할 것 인지에 대한 의미가 되는 것으로 큰 필터는 앞/뒤 많은 캐릭터를 고려하는 것이고 작은 필터는 적은 범위만 보고 판단한다는 의미가 되겠다. 필터는 하나의 Layer 에서 복수 사이즈의 Filter 를 적용하는 것이 아닌 Depth 에 따라 다른 필터를 적용하는 형태로 생각하며 된다. Pooling 은 조금 특이하게도 Sequence Length 축으로만 축소를 시키는데 그 이유는 각각의 필터가 Char 를 Representation 하는 길이 방향은 동일하게 유지해 주기 위함으로 보인다.

(3) Fully Connected Layer  
여기서는 FC 레이어를 3단으로 구성하고, 각각의 레이어 사이에 Drop Out 을 적용하여 Overfitting 을 방지하고자하는 노력을 보여주고 있다. 그 외에 특이 사항은 없어 보인다.

3. 결론 

Text 분류를 위한 모델링을 하다보면 항상 어려운 부분이 형태소 분석기의 부정확성이다. Char Level 로 CNN 을 사용하는 방법을 통해 형태소 분석기의 부정확성에 따른 악영향을 최소화 할 수 있다는 점에서 굉장히 의미가 있는 접근 방법이라고 생각된다. 구지 단어 단위의 해석이 필요한 NER, SRL 과 같은 Task 가 아니라면 단순 텍스트 분류(영역, 감정 등) 및 Contents 의 from ~ to 위치가 중요한 MRC 같은 경우에도 적용이 가능하며, 실제로 많이 사용하고 있다 .

번거로운 Task 형태소 분석 및 Word Embedding 모델 (W2V, Glove, Fastext) 등 고민 없이 바로 더 유사하거나 더 좋은 결과를 볼 수 있다는 점에서 큰 의미가 있으며, char 단위 Embedding 의 장점인 오타 등에 대한 처리도 장점이 된다고 생각한다. 추가적으로 필요하다면 Word 단위의 정보와 Concat 을 통해서 성능을 올리는 방법도 고민해 볼 수 있지 않을까?

끝.

Leave a Reply

Your email address will not be published. Required fields are marked *