David의 개발 이야기!

[논문 정리] CharCNN 알아보기 - Character-level Convolutional Networks for Text Classification 본문

인공지능 논문 리뷰

[논문 정리] CharCNN 알아보기 - Character-level Convolutional Networks for Text Classification

david.kim2028 2023. 8. 9. 22:52
반응형

https://arxiv.org/abs/1509.01626

 

Character-level Convolutional Networks for Text Classification

This article offers an empirical exploration on the use of character-level convolutional networks (ConvNets) for text classification. We constructed several large-scale datasets to show that character-level convolutional networks could achieve state-of-the

arxiv.org

원본 논문은 여기에서 볼 수 있다!

 


CharCNN 논문은, 텍스트분류에 문자 수준의 CNN 을 사용하는 방법에 관한 논문이다. 보통 단어를 기준으로 분류하나, 해당 논문은 문자수준에서 정보를 처리하므로, 언어에 독립적이며, 단어 수준의 모델보다 더 세밀한 패턴을 찾아낼 수 있다. 

 

해당 논문의 주요 내용은 다음과 같다.

 

1. 문자수준의 모델 - 단어의 내부구조를 분석할 수도 있으며, 오타나 다양한 형태의 단어에서도 가능하다.

2. 합성곱 신경망 사용 

3. 언어에 독립적인 모델 - 다양한 언어의 문법이나 구조에 의존하지 않는다.

4. 효율성 - 단어수준 보다 더 적은 양의 데이터로 훈련가능하다.

 

Abstract

이 논문은 문자수준 합성곱 네트워크(ConvNets)의 텍스트 분류에 대해 Bag of Words(BoW), n-gram 및 TFIDF 변형과 같은 전통적인 모델과, 단어 기반의 ConvNets, 순환신경망과 같은 딥러닝 모델과 비교했다.

 

[기본적으로 알아야할 지식]

BoW 개념 : 2023.08.09 - [인공지능공부] - Bag of Words(BoW)에 대해 알아보자

DTM 개념 : 2023.08.09 - [인공지능공부] - DTM 에 대해 알아보자 - Document-Term Matrix

TF-IDF 개념 : 2023.08.09 - [인공지능공부] - TF-IDF 에 대해 알아보자 - Term Frequency-Inverse Document Frequency

n-gram 개념 : 2023.08.09 - [자연어처리] - N-gram 언어모델에 대해 알아보자 - N-gram Language Model

 

1. Introduction

이 논문에서는 텍스트를 문자 수준의 원시 신호로 취급하고, 그것에 시간적(일차원) ConvNets를 적용하는 것을 탐구한다. 이 논문에서는 ConvNets의 텍스트 이해 능력을 예시로 들기 위해 분류 작업만 사용했으며 ConvNets가 언어의 구문 또는 의미 구조에 대한 지식 없이 분산  또는 이산 단어 임베딩에 직접 적용될 수 있음을 증명하며, 이러한 접근법은 전통적인 모델과 경쟁력이 있음이 입증한다.

 

이 논문은 문자만을 대상으로 ConvNets를 적용하는 최초의 작업으로, 대규모 데이터셋에서 훈련될 때, 깊은 ConvNets는 단어의 지식이 필요하지 않으며, ConvNets가 언어의 구문 또는 의미 구조에 대한 지식이 필요하지 않다는 것을 보여준다. 

 

이러한 단순화는 문자가 단어로의 분할이 가능한지 여부와 관계없이 항상 필요한 구성 요소이기 때문에, 다른 언어에 대해 작동할 수 있음을 보여주며, 문자만을 대상으로 작업하는 것은 또한 철자 오류와 이모티콘과 같은 비정상 문자 조합이 자연스럽게 학습될 수 있다는 것 또한 보여준다.

 

2. Character-level Convolutional Networks

 

Input 에 대한 설명

Character-level ConvNet 이라는 이름처럼, 본 모델은 Input 값으로 문자로 구성된 시퀀스를 사용한다. 

 

하나의 문자 시퀀스(문장)은 l0 의 길이를 갖는 고정길이 벡터이다. 따라서 시퀀스 길이가 l0 를 초과하는 것은 고려하지 않으며, 시퀀스가 l0보다 짧아 미달되거나, 존재하지 않을 경우, zero-vector 로 처리한다. 

 

m은 사전에 정의된 값으로, 본 논문에서는 70개의 문자를 사용하여 모델링 하였다. 26개의 영어문자, 10개의 숫자, 33개의 기타문자 그리고 1개의 space 문자를 포함한다. 

 

대,소문자를 따로 구분하지 않았으며, 논문에서는 대-소문자의 구분이 주는 영향 또한 이후에 진행했다. 

 

 

Character quantization

"Character quantization"은 문자 데이터를 일정한 수준 또는 단위로 양자화하는 과정을 나타냅니다. 이 문맥에서 "quantization"은 연속적인 값 또는 복잡한 구조를 더 단순한 형태나 제한된 수의 값으로 변환하는 과정을 의미합니다.

따라서 "Character quantization"은 한국어로 "문자 양자화" 또는 "문자 단위 양자화"로 번역할 수 있습니다. 이는 문자 정보를 처리하거나 표현하는 데 사용되는 기술로, 특정 알고리즘 또는 모델에 적합한 형태로 문자 데이터를 변환하는 데 사용될 수 있습니다.
- ChatGPT 

-> 이 부분 덕분에 윗 그림에서 m = 70인 거다

Data Augmentaion using Thesaurus

Data Augmentation 은 모델의 일반화 성능을 끌어올릴수 있는 효과적인 방법이나, 이미지 데이터셋에 적용하는 augmentation 방법은 잘 맞지 않는다. ( 정확한 순서가 엄격한 구문적 및 의미론적 의미를 형성할 수 있기 때문에 타당하지 않다. ) 따라서, 데이터 증강을 하기 위해서는 인간이 다시 적용하는 것이었으나, 큰 데이터 샘플 특성상 비용적인 한계가 있었고, 단어나 구문을 동의어 (Thesaurus)로 교체해 사용하는 것이다. 

 

논문에서는, 교체할 단어의 수를 결정하기 위해 주어진 텍스트에서 모든 교체 가능한 단어를 추출하고 그 중 무작위로 r개를 교체하도록 선택 했다. 숫자 r의 확률은 매개변수 p를 가진 기하 분포에 의해 결정되며, P[r] ∼ pr 이다. 주어진 단어에 대해 선택된 동의어의 인덱스 s 역시 P[s] ∼ qs인 다른 기하 분포에 의해 결정된다. 이렇게 하면 동의어가 가장 자주 볼 수 있는 의미로부터 멀어질수록 선택될 확률이 작아진다. 

 

Model architecture

원문

위 그림이 너무 이해가 안되서 나름 정리해보았다.

 

 

[기본적으로 알아야할 지식]

1D convoltion : 2023.08.09 - [자연어처리] - 자연어처리를 위한 1D CNN 이해하기 - 1D Convolutional Neural Networks

 

본 모델의 가장 핵심적인 부분은 temporal convolutional module 이다. 

temporal convolution model 은 시퀀스를 다룰때 많이 사용하는 CNN의 일종이며, 일반적으로 이미지처리를 위해 수행되는 convolution 연산이 2개의 축을 따라 움직이는 것과는 다르게, 시퀀스를 다루기 위한 convolution은 시퀀스의 흐름에 따라 축으로만 이동하며, 1-D convolution 계산을 수행한다. 

 

g(x) 는 g(x) = [1,  l] -> R 인 input function을 

f(x) 는 f(x) = [1, k] -> R인 kernel function 을

c = k - d + 1 인 offset constant(그냥 상수)을 의미한다. 

 

일반적인 CNN과 같이, temporal convolution module 또한 이러한 kernel 들의 집합을 가중치로 갖으며, 

input g(x) 에 대한 output h(x) 의 계산을 위해 사용되는 가중치는 다음과 같이 표현 가능하다. 

 

 

따라서, h(y) 는 g(x)와 f(i,j) 사이의 convolution 연산을 통해 계산된다고 볼 수 있다.

 

이어지는 temporal max-pooling 또한 1-D 버전의 max-pooling 을 의미하며, 마찬가지로, 아래와 같이 수식으로 표현할 수 있다.

 

g(x)는 g(x) = [1, l] -> R 인 input function 을 의미하며, 1D max-pooling function인 h(y) 의 output은

h(y) = [1, [(l - k) / d] + 1] 가 된다. ( d는 Stride ) 

( -x 인 이유 : input data를 reverse해서 집어 넣는다고 논문에 적혀있다. )

 

max-pooling 은 어려움을 겪던 6-layer 이상의 ConvNet을 본 모델이 구성할 수 있도록 도움을 주었다. 

 

모델에서 사용된 비선형성은 h(x) = max{0, x}, 이로 인해 합성곱 계층이 ReLUs와 유사하게 만들어집니다. 사용된 알고리즘은 크기 128 미니배치를 사용한 확률적 경사 하강법(SGD)으로, 모멘텀은 0.9 초기 학습률은 0.01이며, 이는 10번에 걸쳐 3 에포크마다 절반으로 줄어든다.  에포크는 클래스 간에 균일하게 샘플링된 임의의 훈련 샘플의 고정된 수를 취한다.

 

입력은 문자 양자화 방법으로 인해 특징의 수가 70개이며(m값), 입력 특징의 길이는 1014입니다. 1014 문자로 이미 관심 있는 대부분의 텍스트를 포착할 수 있는 것 같다(<- 진짜 논문에 이렇게 써있음 : It seems that 1014 characters could already capture most of the texts of interest. ). 또한 정규화를 위해 3개의 완전 연결 계층 사이에 2개의 드롭아웃 모듈을 삽입했고 드롭아웃 확률은 0.5이다.

 

표 1은 합성곱 계층의 구성을 나열하고, 표 2는 완전 연결(선형) 계층의 구성을 보여준다.

최종적으로 fully-connected layer 의 classification 을 위한 output node 수는 task 에 맞게 설정되며, 세부 구조는 아래 이미지와 같다. 

 

표1

 

표2

본 표에서 Large Feature 과 Small Feature 가 있는데, 왜 이러냐면,  애초에 ConvNet을 2개 만들었기 때문이다. 

One Large and One Small Feature

+ 23.08.14) 모델에 대한 설명 추가

 

kernel(==filter 같은 뜻임)

kernel size = 7 이고, kernel 개수는 1024개

 

Convolution Layer

 

Threshold function 

 

Max Pooling

 

Flattening

 

Drop Out

 

출력 (Soft Max)

 

 

 

위 표 그림 밑에 마지막 문단에 이런 내용이 있었는데, l6 = (l0 - 96)/27 인 이유가 도저히 이해가 안되서 몇시간동안 사투를 벌였다.

 

사투의 흔적..

 

다른 문제들에 대해서는 입력 길이가 다를 수 있으며(예를 들어, 우리의 경우 l0 = 1014), 프레임 길이도 마찬가지다. 우리 모델의 설계로부터, 주어진 입력 길이 l0에 대해 마지막 합성곱 계층 후(하지만 완전 연결 계층 중 어느 것도 이전에) 출력 프레임 길이는 l6 = (l0 − 96)/27이라는 것을 쉽게 알 수 있다. 이 숫자에 계층 6에서의 프레임 크기를 곱하면 첫 번째 완전 연결 계층이 받아들이는 입력 차원이 된다.

 

3. Comparison Models

비교를 위해 해당 논문에서는 다음과 같은 모델을 사용했습니다.

 

3.1 Traditional Models 

1) Bag-of-words  & TF-IDF

2) Bag-of-ngrams & TF-IDF

3) Bag-of-means word embedding

 

3.2 Deep Learning Methods

1) Word-based ConvNets 

-> pretrained 된 word2vec 임베딩과 룩업테이블을 사용해 비교 : 임베딩 크기는 300으로 고정

 

2) LSTM

-> pretrained 된 word2vec 임베딩 사용 

-> 모델은 모든 LSTM 셀 출력의 평균을 취해 특징벡터를 형성, 이 특징 벡터에 대해 다항로지스틱 회귀를 사용해 형성

-> 출력차원은 512

-> gradient clipping 사용 & 이 때 gradient norm = 5 

"Gradient clipping"은 신경망 학습 중에 발생할 수 있는 기울기 폭발(gradient explosion) 문제를 방지하기 위한 기술입니다.
기울기 폭발은 신경망의 파라미터가 너무 빠르게 커지면서 발생하는 현상으로, 이로 인해 학습이 불안정해지고 종종 발산하게 됩니다. 기울기 폭발은 특히 순환 신경망(Recurrent Neural Networks, RNN)과 같은 네트워크에서 문제가 될 수 있습니다.
기울기 클리핑은 기울기의 크기가 특정 임계값을 초과하면 그 크기를 제한함으로써 이 문제를 완화합니다. 예를 들어, 임계값을 5로 설정하면, 기울기의 노름이 5를 초과하면 그 기울기를 잘라내어 5로 만듭니다. - ChatGPT

 

3.3 Choice of Alphabet

영어 알파벳의 경우, 대소문자 구분을 진행했을때, 일반적으로 더 나쁜 결과가 나온다는 것을 관찰했음.

 

 

4. Large-scale Datasets and Results

본 논문에서는 텍스트 분류를 위한 공개 데이트셋이 작아서, 수십만개에서 수백만개의 샘플에 이르는 다양한 대규모 데이터셋을 구축했다고 밝혔다.

 

1) AG's News

AG의 뉴스 말뭉치.

이 말뭉치는 2000개 이상의 뉴스 출처로부터 496,835개의 분류된 뉴스 기사를 포함

이 말뭉치에서 4개의 가장 큰 클래스를 선택하여 데이터셋을 구성하며, 제목과 설명 필드만 사용

각 클래스의 훈련 샘플 수는 30,000개이고 테스트는 1900개

 

2) Sogou 뉴스 말뭉치  - 중국어 dataset 

Sogou 뉴스 말뭉치. 이 데이터셋은 SogouCA와 SogouCS 뉴스 말뭉치 의 조합

총 2,909,551개의 다양한 주제 채널의 뉴스 기사를 포함

 각 뉴스 조각을 URL을 사용하여 레이블링하고, 도메인 이름을 수동으로 분류 -> 카테고리로 레이블링된 대규모 뉴스 기사 말뭉치가 생김. "스포츠", "금융", "엔터테인먼트", "자동차" 및 "기술" 5개의 카테고리를 선택

각 클래스별로 선택된 훈련 샘플 수는 90,000개이고 테스트는 12,000개입니다.

중국어 데이터셋이지만, pypinyin 패키지와 jieba 중국어 분할 시스템을 결합하여 중국어의 음역 로마자화인 Pinyin을 생성

영어 모델도 이 데이터셋에 변경 없이 적용할 수 있음

사용된 필드는 제목과 내용.

 

3) DBPedia ontology dataset

DBpedia는 위키백과로부터의 정보

DBpedia 2014에서 14개의 중복되지 않는 클래스를 선택하여 구성.

이 14개의 온톨로지 클래스 각각에서 40,000개의 훈련 샘플과 5,000개의 테스트 샘플을 무작위로 선택

이 데이터셋에 사용한 필드에는 각 위키백과 기사의 제목과 요약이 포함

 

4) Yelp 리뷰  - 별점 dataset 

Yelp 리뷰 데이터셋은 2015년 Yelp 데이터셋 챌린지에서 획득

이 데이터셋은 리뷰 텍스트가 있는 1,569,264개의 샘플을 포함.

이 데이터셋에서 두 가지 분류 작업이 구성되었습니다 – 하나는 사용자가 부여한 별의 전체 수를 예측하고, 다른 하나는 별 1과 2를 부정적으로, 3과 4를 긍정적으로 간주하여 극성 레이블을 예측.

전체 데이터셋은 각 별마다 130,000개의 훈련 샘플과 10,000개의 테스트 샘플을 가지며, 극성 데이터셋은 각 극성별로 280,000개의 훈련 샘플과 19,000개의 테스트 샘플을 가짐

 

5) Yahoo! 답변 데이터셋

Yahoo! Webscope 프로그램을 통해 Yahoo! Answers Comprehensive Questions and Answers 버전 1.0 데이터셋을 획득

말뭉치는 4,483,032개의 질문과 그에 대한 답변을 포함

이 말뭉치를 사용하여 10개의 가장 큰 주요 카테고리로 주제 분류 데이터셋을 구성

각 클래스는 140,000개의 훈련 샘플과 5,000개의 테스트 샘플을 포함

사용한 필드에는 질문 제목, 질문 내용, 그리고 최고의 답변이 포함

 

6) Amazon 리뷰 - 긍/부정 분류

Stanford Network Analysis Project(SNAP)로부터 Amazon 리뷰 데이터셋을 획득했으며, 이는 18년 동안 6,643,669명의 사용자로부터 2,441,053개의 제품에 대한 34,686,770개의 리뷰를 포함 Yelp 리뷰 데이터셋과 유사하게, 우리는 또한 2개의 데이터셋을 구성

하나는 전체 점수 예측과 다른 하나는 극성 예측

전체 데이터셋은 각 클래스별로 600,000개의 훈련 샘플과 130,000개의 테스트 샘플을 포함하며, 극성 데이터셋은 각 극성 감정별로 1,800,000개의 훈련 샘플과 200,000개의 테스트 샘플을 포함. 사용된 필드는 리뷰 제목과 리뷰 내용.

(극성 감성 - Polarity Sentiment 란 : 텍스트 내용이 긍정인지 부정인지 분류하는 것)

 

※ 중국어 유의사항이 없어, Sogou 뉴스 데이터셋은, 증강하지 못함.

 

 

Testing error 를 정리한 결과표이다. 

Lg == Large

Sm == Small

Full == 대소문자 구분한 모델 

LK == LookUp 테이블

 

즉, 아래에서 4개가 본 논문 저자들이 만든 Character-level ConvNet임

5. Discussion

 

비교모델과 Large Character-level ConvNet with thesaurus 상대적차이를 보여주는 그래프!

 

 

 

1. Character-level ConvNet is an effective method.

단어 없이, 텍스트분류를 할 수 있음을 보여주었고, 이것은, 언어가 신호(Signal)와 다르지 않게 생각될 수 있는 indication이다.

 

2. Data size forms a dichotomy between traditional and ConvNets models

데이터셋이 수백만 규모로 커질때, Character-level ConvNets 가 더 나은 성능을 냄을 figure3 을 통해 볼 수 있다.

 

3. ConvNets may work well for user-generated data

백만 규모 데이터셋에서 Amazon 리뷰는 대부분 원시 사용자 입력인 반면, Yahoo! Answers에서 사용자들은 글쓰기에 더 신중할 수 있다. 단어 기반 딥 모델을 비교하는 플롯(그림 3c, 3d, 3e)은 문자 수준 ConvNets가 덜 정리된 사용자 생성 텍스트에 더 잘 작동한다는 것을 보여준다. 이 속성은 ConvNets가 현실 세계 시나리오에 더 나은 적용 가능성을 가질 수 있음을 나타낸다. 그러나 ConvNets가 정말로 철자 오류와 이모티콘과 같은 이색 문자 조합을 식별하는 데 뛰어나다는 가설을 검증하기 위해서는 추가 분석이 필요하며, 우리의 실험만으로는 명확한 증거를 보이지 않는다.

 

4. Choice of alphabet makes a difference

 

5. Semantics of tasks may not matter

분류작업에 따른 성능차이는 크지 않았다. (별점 또는 감정분석 / 주제분류)

 

6. Bag of means is a misuse of word2vec

Word2Vec 기반의 k-means 클러스터링을 진행하여 임베딩하였을 때, 오히려 결과가 좋지 못했다.

 

7. There is no free lunch

모든 종류의 데이터셋에 작동하는 완벽한 단일한 모델이 없다는 것을 보여준다. 

 

6. Conclusion and Outlook

우리는 여러 대규모 데이트셋을 사용해 많은 수의 전통적인 모델과 딥러닝 모델을 비교했으며, Character-level ConvNet이 효과적인 방법임을 보여준다. 해당 모델이 얼마나 잘 수행되는지는 데이터셋의 크기, 텍스트 전처리여부, 알파벳 선택등 다양한 요소의 의해 결정된다.

 

앞으로 더 복잡한 결과값을 내어야할때, Character-level ConvNet이 더 넓은 분야에 적용되길 희망한다.

반응형
Comments