뉴욕대 조경현 교수님의 '딥러닝을 이용한 자연어 처리' 를 읽고 정리한 것입니다.
문장을 표현하는 방법
•
문장이란 길이가 정해지지 않은 토큰들의 Sequence이다.
•
토큰은 Vocabulary 집합 의 원소 이다.
◦
토큰이라고 하는 이유는 글자, 형태소, Space, 어절, 숫자 등 다양한 단위로 나누기 위함.
•
문장을 인코딩하면 문장은 정수 인덱스의 모음으로 바뀌게 된다.
토큰을 표현하는 방법
•
토큰은 Integer Indices이다.
•
언어라는 것은 인위적이고, Integer Indices도 인위적으로 만들어낸 것이다.
◦
One Hot Encoding을 통해서 토큰을 벡터로 바꿀 수 있다.
▪
장점 : 모든 토큰 간의 Distance가 1이다.
▪
단점 : 토큰간의 Distance가 달라져야 단어간의 유사도나 관계를 판단할 수 있다.
•
NN이 토큰의 의미를 잡아낼 수 있도록 하려면 어떻게 해야 할까?
◦
One Hot Vector는 Descrete한 Space기 때문에 Metric을 모른다.
◦
각 토큰을 Continous Vector Space로 투영시킨다. == Embedding
▪
Table Look Up : One hot Code와 Weight Matrix를 곱하는 것은 Weight Matrix의 한 Column이나 Row를 꺼내는 것과 같고, 이를 통해 토큰은 연속적이고 높은 차원의 벡터를 가진다.
◦
위와 같은 과정을 통해 첫번째 Node가 지나고 나면 문장은 Sequence of Vector가 된다.
•
문장은 가변 길이이기 때문에 Classification등을 하려면 가변 길이의 문장은 Representation 할 수 있는 고정 길의의 무언가로 만들어야 한다.
CBoW
•
단어가 represent된 vector 들의 집합이다.
•
문장은 CBoW 안에 있는 vector들의 평균 벡터가 문장의 representation이 된다.
•
N-Gram 등을 활용해서 Generalize한다.
◦
N-Gram이란 BoW를 개선하기 위한 방법으로 여러개의 Token을 합쳐서 하나의 Gram으로 만들고, 이를 사용하는 것이다.
◦
BoW는 단어간의 순서를 고려하지 않는 집합이므로, N-Gram의 경우 어느 정도는 순서를 고려할 수 있게 된다.
•
성능이 매우 좋기 때문에 Baseline Model로 삼아야 한다.
◦
Facebook의 FastText가 진짜 좋다.
CBoW를 이용한 Classifier
•
Backprop, SGD등으로 학습시키면 된다.
Relation Network
•
Token들의 Pair를 이용해서 학습하는 방법이다.
•
만들 수 있는 모든 Pair들의 Representation의 Average가 문장의 Representation이 된다.
•
장점 : 여러 단어로 된 표현을 탐지할 수 있다.
•
단점 : 모든 단어간의 관계를 보기 때문에 연관이 없는 단어도 보게된다.
RN을 이용한 Classifier
•
문장 안에 있는 모든 토큰 쌍(pair, nC2개 있겠지)을 만든다.
•
각 pair에 대해서 NN을 만들고, Pair의 Representation을 만든다.
적당히 잘 섞어 주면 된다. 이는 전체 RN의 Subgraph이다. (아래에서 확인)
•
만들어진 Representation Pair Vector들을 Average 하고 똑같이 학습시키면 된다.
Convolutional Neural Network
•
Local한 어떤 Structure가 있을때 그것을 뽑고자 하면 주로 사용하는게 CNN
•
Text에서는 1-D CONV를 사용함
•
k-Gram을 Convolution하는 Layer를 Hierachically하게 쌓는다.
•
Token - 여러 단어 - 표현 - 구 - 문장 등으로 우리가 생각하는 어떤 직관과 잘 부합하게 된다.
•
단점 : 엄청 먼 거리에 Dependency가 있으면 파악할 수 없다.
최근의 발전
•
Multi Width Convolutional Layer
•
Dilated Convolutional Layer
•
Gated Convolutional Layer
•
?
Self Attention
RN, CNN과의 비교
•
RN
◦
모든 관계를 전부 따짐 → 가중치가 전부 1
•
CNN
◦
Stride에 있는 친구들은 따지는데 다른 친구들은 안따짐 → RN에서 주변 친구들은 가중치가 1, 다른 친구들은 가중치가 0이라고 생각할 수 있음
•
그렇다면 가중치를 학습시킬 수 있다면 멀리 있는 Token과의 관계도 중요하게 따질 수 있지 않을까?
개요
•
•
는 RN에다가 두개를 넣은 값을 Softmax 등으로 씌운것 등을 사용할 수 있음
•
장점 : 계산이 복잡함
•
단점 : Counting 같은 것이 쉽지 않다.
Recurrent Neural Network
•
토큰을 읽을 때마다 현재까지 읽은 토큰들의 정보를 저장해서 활용할 수 있다.
•
단점 : 문장이 길어질수록 Information loss가 생김. 순차적으로 계산하기 때문에 다른 네트워크보다 느리다.
•
Bidirectional Network나 LSTM, GRU 같은 것을 사용한다.