자연어처리(NLP) 3일차
19.06.02
Text Classification & Sentence Representation
How to represent sentence & token?
- 문장은 일련의 토큰(token)으로 구성되어 있습니다. 텍스트 토큰은 주관적, 임의적(arbitrary)인 성격을 띄고 있습니다.
- 토큰을 나누는 기준은 다양합니다.
공백(White space)
형태소(Morphs)
어절
비트숫자
- 컴퓨터에게 단어를 숫자로 표현하기 위해서, 단어장(Vocabulary)을 만들고, 중복되지 않는 인덱스(index)로 바꿉니다.
- 궁극적으로 모든 문장을 일련의 정수로 바꿔줍니다. 이를 인코딩(Encoding)이라고 합니다.
- 하지만 관계없는 숫자의 나열로 인코딩하는 것은 우리가 원하는 것은 아닙니다. 여전히 주관적인 숫자들 뿐입니다.
- 우리는 비슷한 의미의 단어는 같이 있고, 아니면 멀리 떨어져있는 관계를 만들고 싶습니다. 그렇다면 어떻게 관계를 만들어줘야 할까요?
- 한 가지 방법으로 “One hot Encoding”이 있을 수 있습니다.
길이가 단어장의 총 길이(│V│)인 벡터에서, 단어의 index 위치에 있는 값은 1, 나머지는 0으로 구성합니다.
x=[0,0,0,⋯,0,1,0,⋯,0,0]∈{0,1}∣V∣
단점 : 모든 토큰 간에 거리가 같습니다. 하지만 모든 단어의 뜻이 같지 않기 때문에 거리가 달라져야 저희가 원하는 단어간의 관계가 성립됩니다.
- 어떻게 신경망이 토큰의 의미를 잡아낼 수 있을까요?
결론은 각 토큰을 연속 벡터 공간(Countinous vector space)에 투영하는 방법입니다. 이를 임베딩(Embeding)이라고도 합니다.
Table Look Up : 각 one hot encoding된 토큰에게 벡터를 부여하는 과정입니다. 실질적으로 one hot encoding 벡터(x)와 연속 벡터 공간(W)을 내적한 것입니다.
Table Look Up 과정을 거친 후 모든 문장 토큰은 연속적이고 높은 차원의 벡터로 변환합니다.
X=(e1,e2,⋯,eT)where et∈Rd
CBoW & RN & CNN
- 문장표현(Sentence representation)의 의미 : 어떤 과제를 풀기에 적합하고 숫자로 나타낸 문장의 표현입니다.
2. CBoW(Continous bag-of-words):
- 단어장을 단어 주머니로 보게 되고, 이에 따라 단어의 순서는 무시합니다.
- 문장에 대한 표현은 단어 벡터들을 평균시킨 벡터로 구합니다.
- 효과가 좋기 때문에 제일 먼저 시도해봐야합니다. (Baseline 모델)
- 공간상에서 가까우면 비슷한 의미, 아니며 멀리 떨어져 있을 것입니다.
3. Relation Network(Skip-Bigram):
- 문장안에 있는 모든 토큰 쌍(pairs)을 보고, 각 쌍에 대해서 신경망을 만들어서 문장표현을 찾습니다.
- 장점 : 여러 단어로 된 표현을 탐지 할 수 있습니다.
- 단점 : 모든 단어간의 관계를 보기 때문에, 전혀 연관이 없는 단어도 보게 됩니다. (계산 복잡도 올라감)
4. Convolution Neural Network (CNN):
- 특징:
(1) k-gram을 계층적으로 (hierachically) 보게 됩니다.
(2) Layer를 쌓을 때 마다, 점진적으로 넓은 범위를 보기 때문에, “단어>다중 단어 표현 > 구절 > 문장”순으로 보는 인간의 인식과도 알맞습니다.
(3) 1차원의 Convolution Network입니다.
- 장점 : 좁은 지역간 단어의 관계를 볼 수 있습니다.
Self Attention & RNN
- RN :
- 모든 다른 토큰의 관계를 봅니다. 모든 단어간의 관계를 봐서 효율적이지 못합니다.
- ht=f(xt,x1)+⋯+f(xt,xt−1)+f(xt,xt+1)+⋯+f(xt,xT)
2. CNN :
- 작은 범위의 토큰의 관계를 봅니다. 따라서 더 먼 거리의 단어간의 관계가 있을 경우 탐지할 수 없거나 더 많은 convolution 층을 쌓아야합니다.
- ht=f(xt,xt−k)+⋯+f(xt,xt)+⋯+f(xt,xt+k)
3. 하지만 CNN 방식을 가중치가 부여된 RN의 일종으로 볼 수도 있습니다.
- ht=∑t′=1TI(∣t′−t∣≤k)f(xt,xt′) where I(S)=1 if S is True & 0 otherwise
4. 그렇다면 가중치가 0과 1이 아닌 그 사이의 값으로 계산할 수 있다면 어떨까요?
5. Self Attention
- ht=∑t′=1Tα(xt,xt′)f(xt,xt′)
- α(xt,xt′)=exp(β(xt,xt′)) / ∑t′=1Texp(β(xt,xt′))
where β(xt,xt′)=RN(xt,xt′)
- 장점 :
Long range & short range dependency 를 극복할 수 있습니다. (RN과 CNN의 단점 극복)
관계가 낮은 토큰은 억제하고 관계가 높은 토큰은 강조할 수 있습니다.
- 단점 :
계산 복잡도가 높고 counting 같은 특정 연산이 쉽지 않습니다.
6. Recurrent Neural Network(RNN) :
- 메모리를 가지고 있어서 현재까지 읽는 정보를 저장할 수 있습니다.
- 문장의 정보를 시간의 순서에 따라 압축할 수 있습니다.
- 단점:
문장이 많이 길어질 수록 고정된 메모리에 압축된 정보를 담아야 하기 때문에, 앞에서 학습한 정보를 잊습니다. 이는 곧 정보의 손실을 뜻합니다.
토큰을 순차적으로 하나씩 읽어야 하기 때문에, 훈련 할때 속도가 기타 네트워크 보다 느립니다.
- Long Term Dependency 해결방법 :
bidirectional network를 쓰게 됩니다.
LSTM, GRU 등 RNN의 변형을 사용합니다.