본문 바로가기

모델/자연어처리

Text Classification Algorithms: A Survey (알고리즘 파트)

안녕하세요. 이번 시간엔 'Text Classification Algorithms: A Survey'라는 논문에 대한 리뷰를 하겠습니다. 2019년에 나온 아주 핫한 논문으로 자연어 처리의 기초를 공부하신다면 이 논문을 한 번 보셔도 좋을 것 같습니다. 저도 자연어 처리 기초를 공부하기 위해 이 논문을 봤는데 개괄적인 프로세스를 이해할 수 있어서 유용했습니다.

* 참고로 이번 리뷰에서는 자연어 처리의 개괄적인 부분을 공부하는 것이 목표라 알고리즘에 대한 자세한 설명은 쓰지 않습니다.

 

참고 자료는 다음과 같습니다.

 

○ 논문 : Kowsari, Kamran, et al. "Text classification algorithms: A survey." Information 10.4 (2019): 150.

 

○ Lemmatizing vs Stemming

m.blog.naver.com/PostView.nhn?blogId=vangarang&logNo=220963244354&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[파이썬을 이용한 NLP] 09. Lemmatizing VS Stemming

오늘은 Lemmatizing에 대해 알아봅시다. 지난 포스팅에서 stemming에 대해 알아봤었습니다. 기억이 안나신...

blog.naver.com

※ 기본적인 모델(KNN 등)에 대한 설명은 거의 없는데 이는 제가 다른 파트에서 다시 소개하도록 하겠습니다.

0. Introduction

○ 일반적으로 text classification system은 4개의 다른 범위의 단계가 포함됨

  ● Document level : full document level

  ● Paragraph level : Document의 한 부분인 single paragraph level

  ● Sentence level : paragraph의 한 부분인 single sentence level

  ● Sub-sentence level : sentence 내의 sub-expression level (단어, 구 등)

○ 분류 pipeline은 다음과 같음

  ● Feature Extraction

    - text는 일반적으로 비정형데이터이기 때문에 정형데이터로 바꿔야 함

    - 불필요한 단어와 문자 삭제

    - 정형화된 feature extraction method 적용

    - Term Frequency-Inverse Document Frequency (TF-IDF), Term Frequency(TF), Word2Vec, Global Vector for Word Representation(GloVe) 등이 있음

  ● Dimensionality Reduction 

    - text나 document data set은 많은 unique 단어를 포함하여 data 전처리 단계는 시간과 메모리 소요가 많아질 수 있음

      - 해결책 1 : 덜 비싼 알고리즘 사용

        - 문제점 : 몇몇 데이터에서는 이 알고리즘이 잘 되지 않음

      - 차원축소 2 : 시간과 메모리 복잡도 줄이며 해결책 1보다 선호됨

    - 방법 : PCA, LDA, NMF, random projection, autoencoders, t-SNE 등

  ● Classification Techniques

    - text 분류 모델 선정

    - Logistic Regression, Naive Bayes Classifier, K-nearest neighbor, Support Vector Machine, Deep learning 기반 모델 등

  ● Evaluation

    - 모델을 평가하는 방법

    - Accuracy : 가장 쉬운 방법이나 unbalaned data에서는 한계

    - $F_{\beta}$ Score, Matthews Correlation Coefficient, ROC, ROC curve 등

1. Text Preprocessing(Text 전처리) 및 feature extraction

○ data set을 전처리하여 암시적인 noise를 제거하고 중요한 featurization을 가져오는 작업

○ text feature extraction에서는 보통 2가지 방법이 있음

Text Cleaning, Pre-processing

○대부분 text와 document 들은 stopwords, misspell, slang 등의 불필요한 단어가 많아 이들을 처리하는 작업이 필요함

  ① Tokenization

    - text를 단어나 구, 의미있는 token 등으로 나누는 작업

    - sentence의 단어를 조사하는 작업

    ex) After sleeping for four hours, he decided to sleep for another four.

      -> { “After” “sleeping” “for” “four” “hours” “he” “decided” “to” “sleep” “for” “another” “four” }

  ② Stop Words

    - Text와 document 분류에서는 'a', 'about'와 같은 의미가 없는 단어가 포함됨

    - 이러한 단어들은 제거하는 것이 가장 일반적인 방법

  ③ Capitalization

    - Text, document data는 문장에서 다양한 대문자를 가짐

    - 가장 일반적인 처리방법은 소문자로 만드는 것

      - US와 같은 단어에는 'us'로 되기 때문에 문제 발생할 수 있음

    - Slang과 abbreviation(축약형 단어) converter가 이 문제 해결에 도움 줄 수 있음

  ④ Slang and Abbreviation

    - formal 단어로 바꾸는 방법을 주로 씀

  ⑤ Noise Removal 

    - 구두점, 특수 문자 등의 필요하지 않은 글자들이 text에 포함됨

    - 중요한 특수문자는 사람에게는 중요할 수 있으나 분류 알고리즘에게는 해가 될 수 있음

  ⑥ Spelling Correction

    - optional pre-processing step

    - 오타는 text와 document에서 공통적으로 존재하는 것임

    - hashing-based, context-sensitive spelling 교정 기술 등으로 해결

  ⑦ Stemming

    - 어근 추출 목적

    - 접미사를 다른 단어로 바꾸거나 제거함(부사 -> 형용사로 바꾸는 등)

    - Lemmatization과 달리 사전을 정의했을 때 사전에 없는 단어일 수 있음

  ⑧ Lemmatization

    - 어근 추출 목적

    - 접미사를 다른 단어로 바꾸거나 제거함(부사 -> 형용사로 바꾸는 등)

    - Stemming과 달리 사전을 정의된 단어로 바꿈

Syntactic word Representation

○ 단어 간의 구문 및 의미 관계를 찾아내는 작업

  ① N-Gram

    - 순서가 있는 n개 단어의 text set

      - text를 대표하는 feature로써 사용 가능

      - text를 vector로 표현할 수 있음

      - 2-gram, 3-gram이 1-gram보다 더 많은 정보를 추출 할 수 있음

  ② Syntactic N-Gram

    - 텍스트의 선형적 구조(순서에 따른(?)) 보다 의미적 의존성 또는 문장 구조를 tree로 정의했을 때의 n-gram 방식

Weighted Words

○ 기본적인 형태 : TF

  ● 단어를 등장 횟수를 가중치로 함

  ● 횟수를 logarithmically scaled 하기도 함

  ● 각 document는 각 단어가 등장한 횟수의 vector로 변환됨

  ● be동사와 같이 단순히 많이 사용되는 단어에 가중치가 많이 들어갈 수 있음

 

 Bag of Words(BoW)

  ● BoW model : 단어 빈도와 같은 특정한 기준으로 text나 document를 표현하는 모델

  ● NLP 등 여러 분야에서 사용됨

  ● 방법

    - text나 document, sentence는 bag of words로 간주됨

    - text, document 등 기준으로 삼은 것에 들어있는 단어 matrix, 리스트 등 생성

      - matrix 등에 안에 단어를 넣을 때 의미, 문법 등은 무시됨

    ex)

BoW의 한계점

  ● 모든 단어를 one-hot-encode 하여 각 문장 등을 표현함

    -> sparse vector 생성

  ● 단순히 빈도 기반의 vector임

 

Term Frequency-Inverse Doocument Frequency(TF-IDF)

  ● IDF : 빈도와 IDF가 결합. 이는 말뭉치(document 등)에서 공통된 단의 암시적 효과를 줄이기 위함

    -> be동사와 같은 류의 단어의 가중치 조정

  ● 식 : $W(d,t) = TF(d,t)*log(\frac{N}{df(t)})$

    - $N$ : document에서 단어 개수

    - $df(t)$ : 말뭉치에서 단어 t를 포함하는 문장의 개수

    - $TF(d,t)$는 단어 embedding의 recall 상승

    - $log(\frac{N}{df(t)})$는 단어 embedding의 precision 상승시킴

   단점

    - document 안의 단어 간 유사도 설명이 안됨

Word Embedding

○ 단어들 간 동의어 등의 관계가 있어도 모델이 이러한 단어의 의미 부분을 발견하지 못할 수 있음

  ● bag-of-word model : 'airplane', 'plane' 등의 단어가 동의어임에도 이를 반영하지 못함

    - one hot encoding에 의해 내적에선 직교한 단어로 나옴

  ● 단어 순서가 반영되지 않음

    - n-gram : 해결하지 못함

  * Skip-gram, continuous bag-of-words(CBOW) : 두 단어간 inner product를 통해 유사도를 구하여 이를 활용하는 모델

Word Embedding은 feature 학습 기술임

  ● 각 단어나 구 : N 차원의 실수 vector로 mapping 됨

  ● 모델 : Word2Vec, GloVe, FastText 등

○ Word Embedding 모델

  ① Word2Vec

    - 2개의 hidden layer를 가진 shallow neural network로 CBOW, Skip-gra model을 사용함

      - 각 단어를 높은 차원 vector로 만들기 위함

    - 목적 함수 : $arg \, max_{\theta}\prod_{w \in T}[\prod_{c \in c(w)}p(c|w;\Theta)]$

      - T : Text

      - $\Theta$ : parameter

    - hidden layer $h = W^{T}c = W_{k}^{T} := v_{wI}^{T}$

    - 말뭉치(text, corpus)에서 단어 사이의 유사도 뿐만 아니라 관계도 발견할 수 있게 함

      - 예 : big, bigger는 vector space에서 다른 단어보다 더 가깝게 표현됨

그림 1. CBOW와 Skip-gram 구조

    - Continuous Bag-of-Words Model

      - 여러 단어를 바탕으로 1개의 target을 만들어냄

      - 보통 window size는 4~5개

    - Continuous Skip-Gram Model

      - 1개의 단어로 전후 t개의 단어를 예측함

      - 문장의 의미구조, 동의어와 같은 의미 구조를 유지하는데 사용됨

  ② Global Vectors for Word Representation (GloVe)

    - Word2Vec과 매우 유사한 접근방식

      - 각 단어를 높은 차원에 만들고 큰 말뭉치에서 주변 단어를 기반으로 학습됨

    - 목적함수 : $f(w_{i} - w_{j},\tilde{w}_{k}) = \frac{P_{ik}}{P_{jk}}$

      - $w_{i}$ : i번째 단어의 word vector

      - $P_{ik}$ : 단어 i가 있는 text에서 단어 k가 나타날 확률

  ③ FastText

    - 각 단어 $w$는 character n-gram의 bag으로 됨

    ex) introduce와 n=3이라면 character tri-grams를 생성함

      - <in, int, ntr, tro, rod, odu, duc, uce, ce>

      - sequence <int>와 tri-gram의 'int'는 다른 것임

    - scoring function은 다음과 같음 

      : $s(w,c) = \sum_{g \in g_{w}} z_{g}^{T}v_{c}$

        - $G$ : n-gram dictionary의 size

        - $w$ : 단어 

        - $z_{g}$ : n-gram $g$에서 단어 vector

        - $g_{w} \, \in \, \{1,2,...,G\}$

    - Facebook은 pre-trained 된 단어 vector를 294개 국어에 대해 출시함

  ④ Contextualized Word Representations

    - context2vec에 기초한 word embedding 기술

    - bidirectional long short-term moemory (LSTM) 사용

    - deep contextualized word representation 기술

    - 다음과 같은 word 표현의 main feature를 가짐

      - 동의어와 같은 복합적 단어 사용의 특성 반영

      - 언어적 맥락에 따른 차이 반영

    - 이 word embedding의 main idea : bidirectional language model (biLM)에 의해 학습됨

      - forward와 backward LM으로 구성

 한계점

  ● 일관된 문장의 완전한 의미를 유지하기 어려움

  ● 아래 그림을 보면 알 수 있음

    - Document를 문장 단위로 쪼개서 학습시, 마지막 문장의 'She'라는 단어는 첫 번째 문장의 'She'라는 것을 의마하나 이를 문장단위로 학습하므로 모델이 학습이 어려움

2. dimensionality Reduction(차원 축소)

○ Text sequence는 많은 feature로 구성됨

  ● 시간 복잡도와 메모리 소비가 너무 큰 문제

이를 해결하기 위해, feature space를 축소시키는 기술 연구

Component Analysis  

○ 모델

  ① Principal Component Analysis(PCA)

    - 다변량 분석과 차원 축소에서 사용에서 가장 자주 사용되는 방법

    - 상관되지 않고 분산이 극대화 된 새로운 변수를 찾아냄

      - 가능한 분산을 유지함

    - 분류 model 돌리기전에 쓸 수 있음

    - kernel principal component analysis (KPCA) : kernel method를 사용해 nonlinear case를 만드는 PCA

  ② Independent Component Analysis (ICA) 

    - 통계적 모델 방법

    - 관찰된 데이터는 linear transform된 형태로 표현됨

    - 4n linear mixtures ($x_1, x_2, ...,, x_n$)이 독립적인 component라 가정함

      - $x_j = a_{j1}s_{1} + a_{j2}s_{2} + ... + a_{jn}s_{n} \, \forall j$

    - vector-matrix 표현은 다음과 같음

      - $X = As$

    - $a_{i}로 정의할 때, 모델은 다음과 같이 바뀌어 쓰임

      - $X = \sum_{i=1}^{n} a_{i}s_{i}$

Linear Discriminant Analysis (LDA)

○ 데이터 분류와 차원 추곳에서 주로 사용되는 방법

 같은 class 내에서 빈도가 불균등하고 무작위로 생성 된 테스트 데이터에서 성능이 평가 된 경우 성능이 좋음

Non-Negative Matrix Factorization (NMF)

 text나 sequence 분석과 같은 매우 높은 차원의 데이터에서 효과적인 기술

 차원축소에서도 유망한 방법

Random Projection

○ 많은 data set 또는 text와 같이 feature가 많은 데이터에서 가장 사용되는 새로운 차원 축소 기법

  ① Random Kitchen Sinks

    - monte carlo integration을 통해 sampling

      - 차원 축소의 부분을 kernel에 근사화 시킴

    - 이 기술은 shift-invariant kernel에서만 동작함

      - $k(x,x^{\prime}) = < \phi(x),\phi(x^{\prime}) > \approx K(x-x^{\prime})$

  ② Johnson Lindenstrauss Lemma

    - William B. Johnson과 Joram Lindenstrauss : 모든 n개 점에 대해 Euclidean 공간은 $k = O(\frac{log \, n}{\epsilon^{2}})$ 안에 있음을 증명함

Autoencoder

○ neural network의 타입으로 input과 output을 같게 만드는 hidden layer 학습 모델

○ 차원축소에서 좋은 성능 발휘함

  ① 일반적인 구조

    - 아래 그림과 같이 input과 output layer는 n개의 neuron(unit)을 가짐

    - hidden layer Z는 p개의 unit으로 구성됨 (p<n)

    - encoder 표현 : 모든 단어들의 표현의 합

      - $a(x) = c + \sum_{i=1}^{|x|}W_{.,}x_{i},\phi(x) = h(a(x))$

        - $h(.)$ : element-wise non-linearity (sigmoid 등 activation function)

  ② Convoentional Autoencoder Architecture : convolutional neural network (CNN)-based autoencoder를 말함

  ③ Recurrent Autoencoder Architecture : RNN 계열의 Autoencoer를 말함

T-distributed Stochastic Neighbor embedding(t-SNE)

○ nonlinear 차원 축소 방법

  ● visualization에서 주로 사용됨

  ● 높은 차원의 Euclidean 거리를 조건부 확률값으로 변형시킴

    - 조건부 확률값 : 유사도를 표현함

3. 분류 모델

Rocchio Classification

 full-text database를 query하는 연관성 feedback 사용

 각 정보 단어에 대해 TF-IDF weights 사용

 train set으로 각 class에 대한 prototype vector 생성

  ● prototype vector : 어떤 class에 속하는 training document의 vector에 대한 average vector

 test set에 대해 prototype vector와 제일 유사한 class 번호 할당

 한계점

  ● user는 모델을 사용해 약간의 관련된 document만 찾을 수 있음

  ● 의미를 고려하여 설명(?)

Boosting and Bagging

○ document와 text data set classification에서 성공적으로 발달하고 있는 기술

○ 한계점

  ● 계산 복잡도와 해석력이 떨어짐

logistic regression

○ 초기 classification 방법 중 1개

기본 구조는 Y의 값이 1일 확률을 찾는 것임(binary)

○ 나중에 Multinomial Logistic Regression이 나와 binary에서 multiple 분류 문제로 바뀜

○ 한계점

  ● 모든 데이터 point가 독립이라고 가정함

    - 선형회귀 가정

Naive Bayes Classifier

○ Bayes 이론을 기반으로 함

○ 한계점

  ● data 분포의 모양을 가정함

  NBC는 또한 기능 공간에서 가능한 값이있는 데이터 희소성에 의해 제한

K-Nearest Neighbor(KNN)

○ non-parametric 기술

 한계점

  ● 데이터가 크면 오래 걸림

  ● 의미있는 거리 function에 성능이 좌우됨

Support vector machine(SVM)

○ 원래는 binary classication을 위해 고안됨

○ 데이터 feature space를 확장하여 분류를 용이하게 함

○ 한계점

  ● 높은 차원으로 인한 해석의 어려움

Decision Tree

○ 많은 다양한 분야의 classification에서 활용

○ hierarchical decomposition하여 data space를 쪼갬

○ 한계점

  ● 데이터의 작으 변화에 민감함

  ● overfitting 되기 쉬움

    - pruning, vadlidation set을 활용하여 해결할 수 있긴 함

  ● test하려는 데이터가 train set에 없으면 예측이 어려움

Random Forest

○ Decision Tree를 ensemble한 learning 방법

○ 한계점

  ● tree 개수에 비례하여 학습 속도 시간 오래 걸림

Conditional Random Field(CRF)

○ CRF : undirected graphical model

분류와 graphical modeling의 장점을 결합한 모델

○ 한계점

  ● 학습 과정에서 계산 복잡도가 높음

    - 특히 text data가 feature space 차원이 크기 때문

  ● train에 없던 단어에 대해서는 예측하지 않음

deep learning

○ Deep Neural Networks, Recurrent Neural Network(RNN), Long Short-Term Memory(LSTM), Gated Recurrent Unit(GRU) 등 layer를 깊게 쌓는 neural 모델 활용

○ 한계점

  ● 결과에 대한 해석이 어려움

  ● 학습 메커니즘에 대한 설명이 어려움

    - 모델 발전에 대한 제안이 어려움

Semi-Supervised Learning for Text Classification

○ label된 데이터와 unlabel된 데이턱 있을 때 label된 데이터를 활용해 unlabel된 데이터에 label을 붙임

 

여기까지가 논문에서 자연어 처리에 대한 개괄적인 프로세스였습니다.

질문있으시거나 잘못된 부분 있으시면 말씀해주세요!

 

'모델 > 자연어처리' 카테고리의 다른 글

word2vec (2)  (0) 2020.08.13
word2vec (1)  (2) 2020.08.07