티스토리 뷰

본 포스팅은 『텐서플로2와 머신러닝으로 시작하는 자연어처리』를 참고하여 만들어졌습니다.
https://wikibook.co.kr/nlp-tf2/

 

자연어 처리의 경우 크게 어떤 문제를 해결하려고 하느냐에 따라 분류되는데, 이떤 문제가 있고 각 문제에 대한 자세한 내용을 먼저 알아보자. 자연어 처리에는 크게 4가지의 문제가 있다. 4가지의 문제란 텍스트 분류, 텍스트 유사도, 텍스트 생성, 기계 이해로서 자연어 처리의 핵심 문제에 해당한다. 

앞의 4가지 문제에 대해 알아보기 전에 단어 표현이라는 분야에 대해 먼저 알아본다. 단어 표현은 모든 자연어 처리 문제의 기본 바탕이 되는 개념이다. 자연어를 어떻게 표현할지 정하는 것이 각 문제를 해결하기 위한 출발점이다. 따라서 먼저 단어를 표현하는 방법에 대해 배운 후 각 문제를 알아보자.


 

자연어 처리는 컴퓨터가 인간의 언어를 이해하고 분석하는 모든 분야를 말한다. 따라서 자연어 처리의 가장 기본적인 문제는 '어떻게 자연어를 컴퓨터에게 인식시킬 수 있을까?'이다. 컴퓨터는 기본적이로 아스키코드, 유니코드 등의 방법을 통하여 0과 1로만 구성된 값으로 텍스트를 이진화하여 인식하고 있다.

하지만 자연어 처리에 이러한 방식을 그대로 사용하기에는 문제가 있다. 이진화된 값의 경우 자연어의 언어적인 특성이 모두 사라지기 때문이다. 자연어의 특성이 전혀 없이 컴퓨터가 문자를 인식하게 되면 자연어 처리를 위해 만드는 모델에 적용하기 부적합하다. 그럼 어떤 방식으로 텍스트를 표현해야 자연어 처리 모델에 적용할 수 있을까?

이러한 질문의 답을 찾는 것이 "단어 표현(Word Representation)"분야이다. 텍스트를 자연어 처리를 위한 모델에 적용할 수 있게 언어적인 특성을 반영해서 단어를 수치화하는 방법을 찾는 것이다. 그리고 이렇게 단어를 수치화할 때는 단어를 주로 벡터로 표현한다. 따라서 단어 표현은 "단어 임베딩(word embedding)" 또는 "단어 벡터(word vector)"로 표현하기도 한다. 단어 표현에는 다양한 방법이 있고 계속해서 연구되는 분야이기 때문에 하나의 정답이 있는 것이 아니지만 이 책에서는 많이 사용하는 방법 위주로 하나씩 알아보자.

 

1. 원-핫 인코딩(one-hot encoding)

단어를 표현하는 가장 기본적인 방법은 원-핫 인코딩(one-hot encoding) 방식이다. 단어를 하나의 벡터로 표현하는 방법인가, 각 값이 0혹은 1만 갖는다. 즉, 각 단어는 0과 1값만 가지는 벡터로 표현되는데, 이름에서 알 수 있 듯, 벡터 값 가운데 하나만 1이라는 값을 가지고 나머지는 모두 0값을 가지는 방삭이다. 여기서 1이 되는 것은 각 단어가 어떤 단어인지 알려주는 인덱스가 된다.

원-핫 인코딩 방식은 각 단어의 인덱스를 정한 후 각 단어의 벡터에서 그 단어에 해당하는 인덱스의 값을 1로 표현하는 방식이다. 방법 자체가 매우 간단하고 이해하기도 쉽다는 장점이 있다. 하지만 이 방식에는 결정적인 두 가지 문제점이 있다. 첫 번째 문제는 큰 공간에 비해 실제 사용하는 값은 1이 되는 값 하나뿐이므로 매우 비효율적이다.(희소성 문제) 또 다른 문제점은 이러한 표현 방식은 단순히 단어가 뭔지만 알려 줄 수 있고 벡터 값 자체에는 단어의 의미나 특성 같은 것들이 전혀 표현되지 않는다는 것이다.

 

 

이러한 문제를 해결하기 위해 다른 인코딩 방법들이 제안됐다. 다른 인코딩 방법들의 고민은 벡터의 크기가 작으면서도 벡터가 단어의 의미를 표현 할 수 있는 방법을 찾는 것이다. 이러한 방법들은 '분포 가설(Distributed hypothesis)'을 기반으로 한다. 분포가설이란 "같은 문맥의 단어, 즉 비슷한 위치에 나오는 단어는 비슷한 의미를 가진다"라는 개념이다. 따라서 어떤 글에서 비슷한 위치에 존재하는 단어는 단어 간의 유사도가 높다고 반단하는 방법인데 크게, 카운트 기반(Count-base) 방법과 예측(predictive)방법으로 나뉜다.

 

Distributional semantics - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Distributional semantics is a research area that develops and studies theories and methods for quantifying and categorizing semantic similarities between linguistic items based on thei

en.wikipedia.org

 

2. 카운트 기반 방법(Count Based Method)

 

앞서 설명했듯이 카운트 기반 방법으로 단어를 표현한다는 것은 어떤 글의 문맥 안에 단어가 동시에 등장하는 횟수를 세는 방법이다. 여기서 동시에 등장하는 횟수를 동시 출현 혹은 공기(Co-occurrence)라고 한다. 카운트 기반 방법은 기본적으로 동시 등장 횟수를 하나의 행렬로 나타낸 뒤 그 행렬을 수치화해서 단어벡터로 만드는 방법을 사용하는 방식인데 다음과 같은 방법들이 있다.

 

  • 특이값 분해(Singular Value Decomposition, SVD)
  • 잠재의미분석(Latent Semantic Analysis, LSA)
  • Hyperspace Analogue to Language(HAL)
  • Hellinger PCA(Principal Component Analysis)

위의 방법은 모두 동시 출현 행렬(Co-occurrence Matrix)을 만들고 그 행렬들을 변형하는 방식이다. 

 

카운트 기반의 방법의 장점은 우선 빠르다는 점이다. 여기서 말하는 빠르다는 것은 우리가 만들어야 할 단어 벡터가 많아질수록 사용하는 방법에 따라 시간이 많이 소요되는데, 이러한 방식의 장점은 적은 시간으로 단어 벡터를 만들 수 있다는 것이다. 그리고 이러한 방식은 예측 방법에 비해 좀 더 이전에 만들어진 방법이지만 데이터가 많을 경우에는 단어가 잘 표현되고 효율적이여서 아직까지도 많이 사용하는 방법이다.

 

3. 예측 방법(Prediction Method)

 

예측 기반 방법이란 신경망의 구조 혹은 어떠한 모델을 사용해 특정 문맥에서 어떤 단어가 나올지를 예측하면서 단어를 벡터로 만드는 방식이다. 예측 방법에는 다음과 같은 것이 있다.

  • Word2vec
  • NNLM(Neural Network Language Model)
  • RNNLM(Recurrent Neural Network Language)

여러 예측 기반 방법 중에서 단어 표현 방법으로 가장 많이 사용되는 Word2vec에 대해 자세히 알아보자. Word2vec은 CBOW(Continuous Bag of words)와 Skip-Gram이라는 두 가지 모델로 나뉜다. 두 모델은 각각 서로 반대되는 개념으로 생각하면 되는데, CBOW의 경우 어떤 단어를 문맥 안의 주변 단어들을 통해 예측하는 방법이다. 반대로 Skip-Gram의 경우에는 어떤 단어를 가지고 특정 문맥 안의 주변 단어들을 예측하는 방법이다.

https://arxiv.org/pdf/1301.3781.pdf

CBOW의 학습 방법

  1. 각 주변 단어들을 원-핫 벡터로 만들어 입력값으로 사용한다.(입력층 벡터)
  2. 가중치 행렬(weight matrix)을 각 원-핫 벡터에 곱해서 n-차원 벡터를 만든다.(N-차원 은닉층)
  3. 만들어진 n-차원 벡터를 모두 더한 후 개수로 나눠 평균 n-차원 벡터를 만든다.(출력층 벡터)
  4. n-차원 벡터에 다시 가중치 행렬을 곱해서 원-핫 벡터와 같은 차원의 벡터로 만든다.
  5. 만들어진 벡터를 실제 예측하려고 하는 단어의 원-핫 벡터와 비교해서 학습한다.

Skip-Gram의 학습 방법

  1. 하나의 단어를 원-핫 벡터로 만들어서 입력값으로 사용한다.(입력층 벡터)
  2. 가중치 행렬을 원-핫 벡터에 곱해서 n-차원 벡터를 만든다.(N-차원 은닉층)
  3. n-차원 벡터에 다시 가중치 행렬을 곱해서 원-핫 벡터와 같은 차원의 벡터로 만든다.(출력층 벡터)
  4. 만들어진 벡터를 실제 예측하려는 주변 단어들 각각의 원-핫 벡터와 비교해서 학습한다.

두 모델의 학습 과정이 비슷해 보이지만 확실한 차이점이 있다. COBW에서는 입력값으로 여러 개의 단어를 사용하고, 학습을 위해 하나의 단어와 비교한다. Skip-Gram에서는 입력값이 하나의 단어를 사용하고, 학습을 위해 주변의 여러 단어와 비교한다.

위의 학습 과정을 모두 끝낸 후 가중치 행렬의 각 행을 단어 벡터로 사용한다. 이처럼 Word2vec의 두 모델은 여러 가지 장점이 있다. 기존 카운트 기반 방법으로 만든 단어 벡터보다 단어 간의 유사도를 잘 특장한다. 또 한 가지 장점은 단어들의 복잡한 특징까지도 잘 잡아낸다는 점이다. 마지막으로 이렇게 만들어진 단어 벡터는 서로에게 유의미한 관계를 측정할 수 있다는 점이다. 

Word2vec의 CBOW와 Skip-Gram 모델 중에서는 보통 Skip-Gram이 성능이 좋아 일반적인 경우 Skip-Gram을 사용한다. 하지만 절대적으로 항상 좋은 것은 아니니 두 가지 모두 고려할 만 하다.

 

이처럼 카운트 기반 방법과 예측 기반 방법을 통해 단어 벡터를 표현하는데, 보통의 경우 예측 기반 방법의 성능이 좋아서 주로 예측 기반 방법을 사용한다. 그리고 두 가지 방법을 모두 포함하는 "Glove"라는 단어 표현 방법 또한 자주 사용된다.

 

단어 표현은 모든 자연어 처리 문제를 해결하는 데 기반이 되는 가장 근본적인 내용이므로 정확하게 이해해야 한다. 그리고 항상 가장 좋은 성능을 내는 유일한 방법이 있는 것이 아니라서 각 방법 간에 어떤 차이점이 있는지 항상 염두에 두고 상황에 맞게 사용하는 것이 중요하다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함