자연어 처리 개요
1. 단어 표현
단어 표현 Word Representation 은 텍스트를 자연어 처리를 위한 모델에 적용할 수 있게 언어적 특성을 반영해서 단어를 수치화하는 방법을 찾는 것이다. 단얼르 수치화할 때 단어를 주로 벡터로 표현한다.
따라서 단어 표현은 단어 임베딩, 단어 벡터로 표현한다. 가장 기본적인 방법은 원-핫 인코딩 방식이다. 문제점은 단어 벡터의 크기가 너무 크고 값이 희소다하는 문제와 단어 벡터가 단어의 의미나 특성을 전혀 표현할 수 없다는 문제가 발생,
다른 방법으로 벡터의 크기가 작으면서도 벡터가 단어의 의미를 표현할 수 있는 방법으로 분포 가설 Distributed hypothesis를 기반으로 한다. 분포 가설이란 같은 문맥의 단어, 즉 비슷한 위치에 나오는 단어는 비슷한 의미를 가진다 어떤 글에서 비슷한 위치에 존재하는 단어는 단어 간의 유사도가 높다고 판단하는 방법 두 가지 방법으로 나뉜다.
특정 문맥 안에서 단어들이 동시에 등장하는 횟수를 직접 세는 방식인 카운트 기반방법과 신경망 등을 통해 문맥 안의 단어들을 예측하는 방법인 예측 방법으로 나뉜다.
카운트 기반 방법
어떤 글의 문맥 안에 단어가 동시에 등장하는 횟수를 세는 방법, 동시 출현 혹은 공기라고 부르고 Co-occurrence 라고 한다. 기본적으로 동시 등장 횟수를 하나의 행렬로 나타낸 뒤 그 행렬을 수치화해서 단어 벡터로 만드는 방법을 사용하는 방식
- 특이값 분해 Singular Value Decomposition, SVD
- 잠재 의미 분석 Latent Semantic Analysis, LSA
- Hyperspace Analogue to Language
- Hellinger PCA
모두 동시 출현 행렬을 만들고, 그 행렬들을 변형하는 방식
예측 방법
신경망 구조를 사용해 특정 문맥에서 어떤 단어가 나올지를 예측하면서 단어를 벡터로 만드는 방식,
- Word2vec
- NNLM Neural Network Language Model
- RNNLM Recurrnet Neural Network Language Model
Word2vec 은 CBOW Continuous Bag of Words 와 Skip-Gram의 두가지 모델로 나뉜다. 두 모델은 서로 반대되는 개념으로 CBOW는 어떤 단어를 문맥 안의 주변 단어들을 통해 예측하는 방법, Skip-Gram 의 경우 어떤 단어를 가지고 주변 단어들을 예측하는 방법
CBOW의 학습 순서
- 각 주변 단어들을 원-핫 벡터로 만들어 입력값으로 사용한다.
- 가중치 행렬을 각 원-핫 벡터에 곱해서 n-차원 벡터를 만든다.
- 만들어진 n-차원 벡터를 모두 더한 후 개수로 나눠 평균 n-차원 벡터를 만든다.
- n-차원 벡터에 다시 가중치 행렬을 곱해서 원-핫 벡터와 같은 차원의 벡터로 만든다.
- 만들어진 벡터를 실제 예측하려고 하는 단어의 원-핫 벡터와 비교해서 학습한다.
Skip-Gram 의 학습 방법
- 하나의 단어를 원-핫 벡터로 만들어서 입력값으로 사용
- 가중치 행렬을 원-핫 벡터에 곱해서 n-차원 벡터를 만든다.
- n-차원 벡터에 다시 가중치 행렬을 곱해서 원-핫 벡터와 같은 차원의 벡터로 만든다.
- 만들어진 벡터를 실제 예측하려는 주변 단어들 가각의 원-핫 벡터와 비교해서 학습한다.
CBOW 에서는 입력값으로 여러 개의 단어를 사용하고, 학습을 위해 하나의 단어와 비교한다.
Skip-Gram 에서는 입력값이 하나의 단어를 사용하고, 학습을 위해 주변의 여러 단어와 비교한다.
가중치 행렬의 각 행을 단어 벡터로 사용한다.
일반적으로 예측 기반 방법의 Skip-Gram 을 사용