research notes

워드임베딩(Word embedding)과 워드투벡터(Word2Vec) 본문

GPT/개념정의

워드임베딩(Word embedding)과 워드투벡터(Word2Vec)

forest62590 2022. 4. 11. 21:26
728x90

텍스트를 컴퓨터가 이해하고, 효율적으로 처리하게 하기 위해서는 컴퓨터가 이해할 수 있도록 텍스트를 적절히 숫자로 변환해야 한다. 단어를 표현하는 방법에 따라서 자연어 처리의 성능이 크게 달라지기 때문에 단어를 수치화 하기 위한 많은 연구가 있었고, 현재에 이르러서는 각 단어를 인공 신경망 학습을 통해 벡터화하는 워드 임베딩이라는 방법이 가장 많이 사용되고 있다. 워드 임베딩(Word Embedding)은 단어를 벡터로 표현하는 방법으로 단어를 밀집(Dense) 표현으로 변환한다.

 

1.  희소 표현(Sparse Representation)

표현하고자 하는 단어의 인덱스의 값만 1이고, 나머지 인덱스에는 전부 0으로 표현되는 벡터 표현 방법. 이렇게 벡터 또는 행렬(matrix)의 값이 대부분이 0으로 표현되는 방법을 희소 표현(sparse representation)이라고하며, 원-핫 벡터는 희소 벡터(sparse vector).

 

예를 들어 단어가 10,000개 있고 인덱스가 0부터 시작하면서 강아지란 단어의 인덱스는 4였다면 원 핫 벡터는 다음과 같이 표현 됨:

Ex) 강아지 = [ 0 0 0 0 1 0 0 0 0 0 0 0 ... 중략 ... 0] # 이때 1 뒤의 0의 수는 9995개.

 

희소표현은 각 단어 벡터간 유의미한 유사성을 표현할 수 없다는 단점이 존재

 

2. 밀집 표현(Dense Representation)

밀집 표현은 벡터의 차원을 단어 집합의 크기로 상정하지 않으며 사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춘다. 밀집 표현을 사용하고 사용자가 밀집 표현의 차원을 128로 설정한다면 모든 단어의 벡터 표현의 차원은 128로 바뀌면서 모든 값이 실수가 된다.

 

Ex1) 강아지 = [0.2 1.8 1.1 -2.1 1.1 2.8 ... 중략 ...] # 이 벡터의 차원은 128

이 경우 벡터의 차원이 조밀해졌다고 하여 밀집 벡터(dense vector)라고 한다.

 

Ex2) 'King'을 밀집 벡터로 나타낼 경우

[ 0.50451, 0.68607, -0.59517, -0.022801, 0.60046, -0.13498, -0.08813, 0.47377, -0.61798, -0.31012, -0.076666, 1.493, -0.034189, -0.98173, 0.68229, 0.81722, -0.51874, -0.31503, -0.55809, 0.66421, 0.1961, -0.13495, -0.11476, -0.30344, 0.41177, -2.223, -1.0756, -1.0783, -0.34354, 0.33505, 1.9927, -0.04234, -0.64319, 0.71125, 0.49159, 0.16754, 0.34344, -0.25663, -0.8523, 0.1661, 0.40102, 1.1685, -1.0137, -0.21585, -0.15155, 0.78321, -0.91241, -1.6106, -0.64426, -0.51042 ]

사람(및 사물)을 숫자 벡터로 나타낼 수 있으며 또한 벡터가 서로 얼마나 유사한지 쉽게 계산할 수 있다.

3. 워드 임베딩(Word Embedding)

원-핫 인코딩 표현 방법은 각 단어 벡터간 유의미한 유사성을 표현할 수 없다는 단점이 있었고, 대안으로 단어의 의미를 다차원 공간에 벡터화하는 방법을 사용하는데 이러한 표현을 분산표현(distributed representation) 이라고 한다. 그리고 분산표현을 이용하여 단어 간 의미적 유사성을 벡터화하는 작업을 워드 임베딩(embedding)이라 부르며 이렇게 표현된 벡터를 임베딩 벡터(embedding vector)라고 한다. 워드 임베딩 방법론으로는 LSA, Word2Vec, FastText, Glove 등이 있다.

 

  원-핫 벡터 임베딩 벡터
차원 고차원(단어 집합의 크기) 저차원
다른 표현 희소 벡터의 일종 밀집 벡터의 일종
표현 방법 수동 훈련 데이터로부터 학습
값의 타입 1과 0 실수

4. 분포가설

분산표현은 분포가설(distributional hypothesis)에 기초하며 분포가설이란 단어의 의미는 주변 단어에 의해 형성된다는 것이다. 즉, 분포가설이 말하고자 하는 것은 단어 자체에는 의미가 없고, 그 단어가 사용된 '맥락'이 의미를 형성한다는 것이다.

5. 워드투벡터(Word2Vec)

단어 벡터 간 유의미한 유사도를 반영할 수 있도록 단어의 의미를 수치화 할 수 있는 방법이 필요하며 이를 위해 사용하는 대표적인 방법이 워드투벡터(Word2Vec)이다.

Word2Vec의 학습 방식에는 CBOW(Continuous Bag of Words)와 Skip-Gram 두 가지 방식이 있다. CBOW는 주변에 있는 단어들을 입력으로 중간에 있는 단어들을 예측하는 방법이다. 반대로, Skip-Gram은 중간에 있는 단어들을 입력으로 주변 단어들을 예측하는 방법이다. 전반적으로 Skip-gram이 CBOW보다 성능이 좋은 것으로 알려져있다.

예를 들어 ['The', 'fat', 'cat', 'sat', 'on', 'the', 'mat']으로 부터 sat을 예측한다고 할 때, 예측 해야하는 단어 sat은 중심단어(center word), 예측에 사용되는 단어들을 주변단어(context word)라고 하며, 윈도우 크기가(window) 2인경우 sat을 기준으로 ['fat', 'cat'], ['on', 'the']이 예측에 활용된다.

이 때, Word2Vec은 은닉층이 다수인 딥러닝(deep learning) 모델이 아니라 은닉층이 1개인 얕은 신경망(shallow neural network)이다. Word2Vec의 은닉층은 일반적인 은닉층과는 달리 활성화 함수가 존재하지 않으며 룩업 테이블이라는 연산을 담당하는 층으로 투사층(projection layer)이라고 부르기도 한다. i번째 인덱스에 1이라는 값을 가지고 그 외의 0의 값을 가지는 입력 벡터와 가중치 W 행렬의 곱은 사실 W행렬의 i번째 행을 그대로 읽어오는 것과(lookup) 동일하며 이 작업을 룩업 테이블(lookup table)이라고 한다. CBOW의 목적은 W와 W'를 잘 훈련시키는 것이며 그 이유는 lookup해온 W의 각 행벡터가 Word2Vec 학습 후에는 각 단어의 M차원의 임베딩 벡터로 간주되기 때문이다.

CBOW는 주변단어로 중심단어를 더 정확히 맞추기 위해 계속해서 이 W와 W'를 학습해가는 구조이다. 이렇게 주변단어의 원-핫 벡터에 대해서 가중치 W가 곱해서 생겨진 결과 벡터들은 투사층에서 만나 이 벡터들의 평균인 벡터를 구하게 된다.

CBOW는 소프트맥스(softmax) 함수를 지나면서 벡터의 각 원소들의 값은 0과 1사이의 실수로 변환되며 다중 클래스 분류 문제를 위한 일종의 스코어 벡터(score vector)의 역할을 한다. 스코어 벡터의 j번째 인덱스가 가진 0과 1사이의 값은 j번째 단어가 중심 단어일 확률을 나타내고 이 스코어 벡터의 값은 레이블에 해당하는 벡터의 중심 단어 원-핫 벡터의 값에 가까워져야 한다.

역전파(Back Propagation)를 수행하면 W와 W'가 학습이 되는데, 학습이 다 되었다면 M차원의 크기를 갖는 W의 행렬의 행을 각 단어의 임베딩 벡터로 사용하거나 W와 W' 행렬 두 가지 모두를 가지고 임베딩 벡터를 사용하기도 한다.

 

References:

[1] 딥러닝을 이용한 자연어 처리 입문, https://wikidocs.net/book/2155, 위키북스

[2] https://jalammar.github.io/illustrated-word2vec/

728x90
Comments