-
Word EmbeddingAI 2020. 12. 29. 18:48
Word Embedding
- 자연어를 컴퓨터가 이해하고, 이를 효율적으로 처리하게 하기 위해 적절한 형태(벡터)로 변환할 필요가 있다.
- 워드 임베딩은 단어를 적절한 차원의 벡터로 표현하는 방법을 의미한다.
- 워드 임베딩의 발전은 자연어 처리 분야의 발전에 있어 큰 기여를 하였다고 평가된다. 그 만큼 자연어 처리 분야에 있어 중요하다.
- 표현
- 희소 표현 (Sparse Representation)
- 단어를 표현하는 벡터 값의 대부분이 0으로 표현되는 방법을 희소 표현이라 한다.
- 대표적인 예시로는 One-Hot Encoding, BoW(Bag of Words), TF-IDF 등이 있다.
- 문제점
- 단어의 개수가 늘어나면 벡터의 차원이 한없이 커지게 된다. 만약 10,000개의 단어를 표현하고자 한다면 벡터의 차원은 10,000이 되어야 한다.
- 뿐만 아니라, 해당 단어의 인덱스에 해당하는 부분을 제외한 나머지 값은 모두 0을 갖기 때문에 이는 공간적 낭비를 야기한다.
- 밀집 표현 (Dense Representation)
- 밀집 표현은 각각의 속성을 독립적인 차원으로 나타내지 않는다. 따라서 단어의 개수에 따라 벡터의 차원이 상정되지 않는다.
- 벡터의 대부분 값이 0인 희소 표현과 달리 밀집 표현은 모든 차원이 값을 갖고 있으며, 하나의 정보가 여러 차원에 분산되어 표현되기 때문에 "Distributed Representation"이라고도 불린다.
- 밀집 표현의 벡터는 하나의 차원이 여러 속성들이 조합된 정보를 갖고 있으며, 속성들은 여러 차원들이 조합되어 표현된다.
- 위에서 말했듯이 워드 임베딩은 자연어를 컴퓨터가 이해하도록 바꾼 표현이기 때문에 특정 단어를 표현하는 벡터를 봐도 무슨 의미를 갖는지 알 수 없다. 하지만 유사한 단어 사이의 벡터 거리는 가깝게 표현되며, 이러한 관계를 통해 벡터의 의미를 알 수 있다. --> '사람'을 나타내는 벡터와 '인간'을 나타내는 벡터는 매우 유사하게 표현을 갖게 된다.
- 밀집 표현은 기본적으로 '비슷한 위치에서 등장하는 단어들은 비슷한 의미를 갖는다'는 가정 하에 만들어진 표현 방법이다.
- 장점
- 적을 차원으로 많은 수의 단어를 표현할 수 있다.
- 입력 데이터의 차원이 높으면 차원의 저주 (Curse of Dimensionality)라는 문제가 발생한다.
- 단어 사이의 관계를 표현할 수 있다.
- 이를 일반화 능력 (Generalization Power)라고도 부른다. 예를 들어 학습 데이터셋에서 '인간'이라는 단어는 자주 등장하지만 '사람'이라는 단어는 자주 등장하지 않는다고 할 때, '사람'은 '인간'과 비슷한 벡터로 표현되기 때문에 '사람'은 '인간'이라는 단어로 일반화될 수 있다.
- 적을 차원으로 많은 수의 단어를 표현할 수 있다.
- 희소 표현 (Sparse Representation)
- 표현 방법
- 통계 기반 방법
- LSA ( Latent Semantic Analysis )
- TF-IDF ( Term Frequency - Inverse Document Frequency )
- 특정 문서에서 특정 단어의 빈도(TF)와 문서 집합에서 해당 단어의 빈도(DF)의 역 (Inverse)를 통해 각 단어의 가중치를 부여하는 방법이다.
- 주로 문서의 유사도를 구하는 작업, 검색 시스템에서 검색 결과의 중요도 결정, 문서 내에서 특정 단어 중요도 결정에서 사용된다.
- 이는 DTM ( Document Term Matrix )를 기반으로 생성되기 때문에 Sparse Representation으로 표현된다.
- 예측 기반 방법
- Word2Vec
- GloVe
- 사전 학습된 언어 모델
- BERT, ELMo, XLNet 등의 Pre-Trained Language Model
- 통계 기반 방법
Word2Vec
- Word2Vec은 워드 임베딩을 학습하는 대표적인 방법 중 하나로 얕은 신경망을 통해 단어를 학습한다.
- 학습 방법에 따라 CBoW (Continuous Bag of Words)와 Skip-gram으로 구분된다.
- CBoW
- CBoW는 주변에 있는 단어를 통해 중간에 있는 단어를 예측하는 신경망을 구성하고 이를 학습한다.
- 중심 단어 (center word) 예측을 위해 주변 단어 (context word)를 사용하며, 예측을 위해 앞과 뒤로 사용하는 단어의 범위를 윈도우(window)라고 한다.
- 아래 그림은 CBoW의 인공 신경망을 간단히 나타낸 그림으로, 주변 단어들의 One-Hot 벡터가 입력되고 중간 단어의 원-핫 벡터를 예측하고자 한다.
- Word2Vec의 은닉층은 일반적인 은닉층과 달리 활성화 함수가 존재하지 않으며, 룩업 테이블이라는 연산을 담당하는 층으로 Projection Layer라 부른다.
- 입력층과 투사층 사이의 가중치 W는 V X M 행렬이며, 투사층과 출력층 사이의 가중치 W'는 M X V 행렬이다. 이때, V는 단어의 수를, M은 벡터를 표현하고자 하는 차원을 나타낸다. W와 W'는 서로 독립된 형렬이며, CBoW는 중심 단어를 맞추기 위해 W와 W'를 학습하는 구조이다.
[출처] 딥러닝을 이용한 자연어 처리 입문 -
- 입력층에서는 각 단어의 One-Hot 벡터가 입력되며, 이 벡터와 가중치 행렬 W의 곱을 통해 중간 결과 v 를 얻게 된다. 이때, 단어의 index가 i일 때 v는 W의 i 번째 행을 그대로 읽어오는 것과 같다. 이 때문에 W를 Lookup table이라 불린다.
- 각 단어들의 평균을 계산하고 이를 W' 과 곱하여 1 X V 행렬을 얻는다. 다음으로 Softmax 함수를 취하여 스코어 벡터 y'을 얻는다. 이후, y'와 중간 단어의 One-Hot 벡터의 오차를 줄이기 위해 Cross-Entropy 손실 함수를 사용하여 오차를 계산하고, 이를 역전파하여 W와 W'을 학습한다.
- 최종적으로 W와 W' 중 어떤 행렬을 워드 임베딩으로 사용할지 결정한다. W와 W'의 평균치를 임베딩 벡터로 사용하기도 한다.
[출처] 딥러닝을 이용한 자연어 처리 입문 - Skip-gram
- CBoW가 주변 단어를 통해 중간 단어를 예측했다면, Skip-gram은 중심 단어에서 주변 단어를 예측하려고 한다.
- 전반적으로 Skip-gram이 CBoW보다 성능이 좋다고 알려져 있다.
- 아래 그림은 Skip-gram의 신경망 구조를 도식화한 것이다.
[출처] 딥러닝을 이용한 자연어 처리 입문 - Negative Sampling
- 단어가 많아짐에 따라 신경망을 학습하는데 소요되는 시간이 기하급수적으로 증가한다. 또한 필요한 메모리 양도 증가한다.
- 이를 해결하기 위해 등장한 것이 Negative Sampling이다.
- Word2Vec에서는 모든 단어 집합에 대해서 소프트맥스 함수를 수행하고, 역전파를 수행하므로 주변 단어와 상관 없는 모든 단어에 대해 조정 작업을 수행한다.
- Negative Sampling은 주변 단어들과 랜덤으로 선택된 상관없는 단어들을 일부 가져와 단어 집합을 만든다. 이렇게 전체 단어 집합보다 작은 단어 집합을 만들고 마지막 단계를 이진 분류 문제로 바꾼다. 이때 주변 단어를 Positive로 랜덤으로 샘플링된 단어를 Negative로 하여 분류 문제를 수행한다.
- 이는 다중 클래스 분류 문제를 이진 분류 문제로 바꾸는 것과 같으며 연산을 매우 효율적으로 바꿀 수 있다.
GloVe
- 기존의 카운트 기반의 LSA (Latent Semantic Analysis)와 예측 기반의 Word2Vec의 단점을 지적하며 이를 보완한다는 목적에서 등장하였다. 하지만, GloVe가 Word2Vec 보다 항상 뛰어난 성능을 보이는 것은 아니다. 따라서 두 가지 모두 사용해보고 더 좋은 성능을 보이는 것을 사용하는 것이 바람직하다.
- LSA는 단어의 전체적인 통계 정보를 고려하지만, 단어 의미를 유추하는 작업에는 성능이 떨어진다. 즉, 단어 사이의 관계를 표현할 수 없다. Word2Vec은 단어 사이의 관계를 잘 표현하여 LSA 보다 뛰어난 성능을 보이지만 윈도우 크기 내의 단어만을 고려하기 때문에 전체적인 통계 정보를 반영하지 못한다.
- GloVe는 이러한 한계를 극복하기 위해 카운트 기반의 방법과 예측 기반의 방법 모두를 사용한다.
- 윈도우 기반 동시 등장 행렬 ( Window based Co-occurrence Matrix )
- 전체 단어 집합의 단어를 행과 열로 하는 행렬에서 i 단어의 윈도우 크기 내에서 k 단어가 등장한 횟수를 (i,k)에 기재한 행렬.
[출처] 딥러닝을 이용한 자연어 처리 입문 - 동시 등장 확률 ( Co-occurrence Probability )
- 동시 등장 행렬로부터 특정 단어 i의 전체 등장 횟수를 카운트하고, i가 등장했을 때 어떤 단어 k가 등장한 횟수를 카운트한 조건부 확률.
[출처] 딥러닝을 이용한 자연어 처리 입문 - 아이디어
- 임베딩 된 중심 단어와 주변 단어 벡터의 내적이 전체 코퍼스에서의 동시 등장 확률이 되도록 만드는 것
- Minimize ( 내적 ( vi, vk ) - P (k | i) )
'AI' 카테고리의 다른 글
MLOps 입력값 드리프트 (0) 2022.07.13 Sequence To Sequence (0) 2021.01.03 Data Sampling (0) 2020.12.28 Recommend Algorithm (0) 2020.12.23 Neural Network architectures (0) 2020.11.05