본문 바로가기

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

How to represent sentence & token?

학습목표

문장을 어떻게 컴퓨터 언어로 표현할지 배웁니다.

핵심키워드

  • Tokens
  • Vocabulary
  • Encoding
  • Continuous vector space

학습하기

 자연어 처리에서 중요한건, 문장을 어떻게 처리할 것이냐 하는 거겠죠. 이미지나 신호 데이터와 자연어 데이터가 다른 점은, 이 토큰들이 굉장히 Arbitrary하다는 점입니다. 인간 언어라는게, 그렇습니다. 고양이는 Cat이고 개는 Dog인데 그게 왜 그렇게 이름이 붙었는지, 사실 뭐 모르죠. 개(Dog)랑 비슷한게 늑대(Wolf)인데 이름에서는 전혀 비슷함을 찾아볼 수가 없죠. 이렇게 단어들이 굉장히 Arbitrary한 Assignment를 갖다보니, 어떤 처리를 해야할지가 좀 막막합니다. 

 일단 Sentence만 생각해봅시다. 뭐 사실 단어, 문장, 단락, 기사, 책 뭐 결국 센텐스가 많아진거니까, 문장만 생각해도 충분합니다. Sentence를 어떤 토큰으로 구성된 Sequence data라고 생각해보죠. 그럼 이 Sequence data를 표현하는 방법은 당연히 여러가지가 있을 수 있겠죠. 공백을 기준으로 나누거나, 형태소로 나누거나, 한글자한글자 나누거나 그렇죠? 그 다음에, 우리는 그 하나하나의 토큰을 어떤 숫자에 매칭을 시킬 수가 있겠죠? 이건 뭐 기계한테 설명할 때 숫자가 훨씬 편하니까 그렇습니다. 

 그런데 그렇게 숫자로 매칭을 시켜도 이건 Arbitrary하다는 특성이 여전해요. 뭐 개가 1에 매칭이 됬고 늑대가 20에 매칭이 됬는데, 전혀 유사한게 안보이잖아요? 그리고 우린 그 Arbitrary한 특성을 아직은 뭐 어떻게 다룰 수가 없어요. 그래서 일단, One-hot encoding을 이용해서 처리를 해줍니다. 이렇게 하면 장점이, 어떤 두개의 토큰을 뽑아서 봐도, 거리가 같게 되겠죠. 물론 이렇게 하고 인코딩이 끝나지는 않습니다. 이거만 쓰는 사람은 없죠. 결국 우리가 텍스트 분류를 하든 뭘 하든 우리는 어떤 Sentence에서 Representation을 뽑아내야만합니다. 개나 늑대나 Integer index에서는, One-hot result에서는 서로 별개지만, 결국 이것들을 비슷하게 표현할 방법을 우리는 필요로 하겠죠.

 이거에 대한 방법이, NN을 이용해서 해당 토큰들을 연속적인 벡터로 바꾸는 거죠. 말이 좀 어려울 수 있는데, 자 우리가 문장을, 무슨 기준으로든 나누고, 해당 단어들에 정수를 할당하고, 원핫인코딩을 했잖아요? 여기에 어떤 가중치를 곱해주게되면, 우리가 설정한 목적성에 맞게, 각 단어를 나타내는 벡터들이 재조정되겠죠. TF의 Embedding layer같은 것들이 해주는 역활입니다.

  그래서 이제, NN입장에서는 첫번째 Layer를 거치고 나면, 문장이 sequnece of continuous, high-dimensional vectors가 되는거죠. 각 벡터는 각 토큰의 의미를 나타내구요. 문제는 그렇게 계산된 결과물이, 당연히 Input sentence의 길이에 따라 변화할텐데, 우리는 어떤 Fixed size vector가 필요하죠. 임의의 문장의 representation을 잘 나타내는 그 fixed size를 어떻게 찾아내야하나. 이런겁니다. 이걸 다음에 보겠습니다.

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

Summary  (0) 2020.04.09
Self Attention & RNN  (0) 2020.04.08
CBoW & RN & CNN  (0) 2020.04.07
Overview  (0) 2020.04.05
시작에 앞서  (0) 2020.04.04