본문 바로가기

머신러닝/[딥러닝을 이용한 자연어 처리]

CBoW & RN & CNN

학습목표

문장을 표현하는 방법중 CBoW, RN, CNN에 대해서 알아봅니다.

핵심키워드

  • Sentence representation
  • Continuous bag-of-words
  • Relation Network
  • Convolution Neural Network

학습하기

 문장을 Representation하는 첫번째 방법이 Continuous Bag of Words, CBoW입니다. 이건 문장 속 토큰들의 순서를 고려하지 않아요. 그냥 어떤 가방에 해당 토큰에 해당하는 벡터를 막 넣어서, 그것들의 평균값(벡터)를 문장의 Representation으로 쓰자는 거죠. 같은 방식으로 Bag of n-gram도 가능하겠죠? 재밌는건, 이게 문장 속 토큰들의 순서를 무시하는 방법론인데도 불구하고, Text classification에서 굉장히 잘되요. 그래서 실전 Text classification 문제에서는 CBoW 개선인 FastText를 우선 고려해보실만 합니다.

Representation이라는 말을 계속할텐데, 한 번 정리해 볼게요. ML을 통해서 문제를 해결할 때, 저희의 첫번째 과제가 아마, 어떤 데이터에 대한 좋은 Representation을 찾는 걸텐데요. 사실 Universial한 Representation은 뭐 몰라요. 우리는 그런거에 깊은 관심을 가지지 않아도 됩니다. 우리가 풀고자 하는 문제에 맞는 Representation을 찾는게 항상 우선과제에요. 그게 문장이든, 이미지든, 뭐든. 감정 분류를 하고싶으면 그에 맞는 Representation을, 카테고리 분류를 하고싶으면 그에 맞는 Representation을 만든다. 이게 굉장히 중요해요. 

 두번째는, Relation Network, RN에 대해 볼건데요. 사실 아이디어 자체는 Skip-bigram입니다. 그러니까, 어떤 문장에 많은 토큰1 토큰2 토큰3 ... 있으면 얘들을 Pair로 묶어서 볼거에요. (토큰1, 토큰2) (토큰1, 토큰3) ... 뭐 이런식으로요. 이것들을 이제 다시 Matrix multiplication하면 하나의 값으로 볼 수 있는 거고, 그럼 또 이 값들을 평균내서 사용하면 뭐.. CBoW랑 같은 행위만 거치면 되겠죠. 뭐 같은방식으로 3-gram, 4-gram 다 가능하겠지만, 계산 복잡도가 너무 증가하니까, 또 Bi-gram으로도 충분해서, Skip-bigram으로 보통 진행합니다. 그런데 의구심이 들죠. 굳이 모든 페어를 다 봐야하나? 근처에 있는 단어만 봐도 충분하지 않나?

 그래서 RN의 대안으로 생각할 수 있는게 CNN입니다. CNN자체가 전체데이터에서 지역적인 부분에서 어떤 Representation을 뽑아내는 목적이었으니까 이걸 1-D Conv layer를 생각해보면, 우리가 하고자했던 내용이 되는 거죠. 

게다가 CNN의 역사가 깊으니까 여러 프레임워크, 오픈소스에서 다 찾아볼 수 있어요. 사용하기가 굉장히 좋죠.

'머신러닝 > [딥러닝을 이용한 자연어 처리]' 카테고리의 다른 글

Summary  (0) 2020.04.09
Self Attention & RNN  (0) 2020.04.08
How to represent sentence & token?  (0) 2020.04.06
Overview  (0) 2020.04.05
시작에 앞서  (0) 2020.04.04