크크루쿠쿠

NLP 01.Text Classification 본문

DeepLearning/공부

NLP 01.Text Classification

JH_KIM 2021. 1. 21. 00:15

Text Classification

  • Input : natural language sentence/paragraph
  • Output: category → text가 어디에 속해있는가?

ex) spam, gmail categorization, election

하지만 언어 자체는 arbitrary 함!

→ 어떻게 하지 그럼?

Token

token은 그냥 아무렇게나 sentence를 쪼개놓은것

단어들을 찾아서 indexing 해줌

→ integer index로 바뀜

Table Lookup

하지만 이것도 arbitrary 하다.

우리는 neural net 이 의미를 capture할 수 있도록 해야함

→ 각 토큰마다 continuous 한 vector를 줌

one hot vector와 weight matrix를 곱해줌

이를 Table Lookup이라고 하고 Embedding이라고도 함

이건 token에 대한 의미를 찾는다 보면 됨

이 첫번째 노드를 지나면 sentence가 sequence of vector가 된다.

이를 이용해 계산 후 최종 벡터를 softmax를 사용해 distribution을 구해 category를 정해줌.

하지만 sentence의 경우 fixed-size가 아닌데 어떻게 하나?

CBoW

Continuous bag-of-words

token의 순서는 무시하겠다!

token vector의 평균을 구함.

Generalizable to bag of N tokens

따로 보면 의미가 덜한것들 여러개 묶어서 가능

ex) New York University

이러한 CBow 방법은 매우 잘 작동함.

FastText tool 써서 하면 편함

과정

→ automatic하게 backpropagation 하고 SGD를 이용하여 학습.

하지만 이건 단어 순서를 보지않고 하기 때문에 정확도는 높지않음

RN

Skip Bigrams

문장이 주어졌을 때 모든 token pair를 생각해봄

각 페어의 NN를 만들어서 모든 페어의 representation을 찾아줌

generalized to triplet 가능하나 computational efficient 안좋음

pair-wise 이기 때문에 CBoW보다는 괜찮지만 왜 모든 단어를..?

CNN

Convolutional Networks

text에서는 1-D convolutional layer

계층적으로 가까운거 끼리 묶어서 RN 해주는 느낌

CNN은 많이 쓰이기 때문에 operation node에 넣을 것들이 매우 많음.

Self-Attention

CNN 단점 → 먼 거리에 중요한 dependency가 있다면 layer를 많이 쌓아야함.

RN과 반대인데 이 두가지를 합칠수 없을까..?

→ self-attention

weight를 0과 1이 아닌 다르게 그리고 자동으로 계산하게끔 해보자.

이 알파 function을 이용해서 0과 1사이로 weight sum 해줌.

장점

모든 pair에 대해 알파 값을 구함 → 중요한가 아닌가?

이를 RN과 곱해 불필요한 pair는 지우고 해줌.

CNN과 RN의 장점 모두 가짐.

단점

computational complexity가 너무 높음.

counting같은 것들은 힘듦

RNN

Online으로 계속 가능하게끔

구조 자체가 modern하지는 않음.

training 시 시간이 걸림

LSTM이나 GRU 쓰자.

Summary

위 방법들은 다 exclusive 한것들이 아니라 잘 섞어쓰면 더 좋은 결과를 낸다.



Comments