Word2Vec 2를 이해하기 위한 내용(1) - 워드 임베딩

govlKH·2023년 7월 17일
1

논문리뷰

목록 보기
15/45

1. Word Embedding?

임베딩은 비정형화된 텍스트 데이터를 숫자 데이터로 바꿈으로 사람의 언어를 컴퓨터가 이해할 수 있게 컴퓨터 언어로 번역하는 것을 의미합니다.

임베딩의 표현 방법에는 크게 두 가지가 존재하는데, 첫 번째는 단어의 원핫벡터 표현이며 두 번째는 단어의 밀집 표현입니다.

원-핫 벡터임베딩 벡터
차원고차원저차원
표현방식희소 표현밀집표현
표현 방법수동훈련 데이터로 학습
속성값1과 0실수

1.1 [ 희소 표현 : Sparse Representation VS 밀집 표현 : Dense Representation ]

"희소 표현"은 원 핫 인코딩을 이용하여 단어를 벡터로 표현한 방법입니다. 표현하는 단어를 간단하게 나타낼 수 있다는 장점이 있지만, 데이터의 규모가 너무 커지기에 단어의 개수 증가에 따라 벡터의 크기가 매우 커져 공간적 낭비를 일으킨다는 단점이 존재합니다. 또한 이렇게 단위 벡터로 표현하는 것은 단어 간 semantic(의미적), syntactic(구문적) 유사도를 평가할 수 없습니다.

"밀집 표현"은 희소표현과 달리 벡터의 차원을 단어 집합 크기로 상정하지 않습니다. 모든 단어의 벡터 표현 차원을 맞춰 각 벡터값이 실수로 표현됩니다. 이를 이용하여 단어 간 유사도를 계산할 수 있으며 이를 아래 표의 왼쪽과 같이 표현할 수 있습니다. 이렇게 단어를 밀집 벡터의 형태로 표현하는 방법을 "워드 임베딩"이라고 하며, 그 결과를 임베딩 벡터라고 부릅니다.

Word2Vec은 이러한 워드 임베딩 중 하나이며, 이에 대하여 간단히 다뤄보겠습니다.

text희소 표현밀집 표현
나는[1,0,0,0][0.123, -0.154, 0.123, -1.724]
공부를[0,1,0,0][-0.234, 1.263, 1.345, 1.586]
하고[0,0,1,0][1.435, 0.719, -0.346, 0.283]
있다[0,0,0,1][0.462, -0.312, 0.671, -0.915]

2. Word2Vec

Word2Vec은 구글에서 개발했으며, 분포 가설(문맥의 의미를 이용해 단어를 벡터로 표현하고자 하는 것)을 가정 하에 표현한 분산 표현을 따릅니다. 즉, 의미적으로 가까운 단어는 유사한 벡터로 표시됩니다.

이러한 분산 표현을 이용한 벡터화는 널리 사용되고 있었지만, 왜 Word2Vec이 주목을 받았을가요? )
이유로는 바로 효율성 때문입니다. Word2Vec은 인공신경망 모형을 기반으로 학습 데이터의 규모가 10억 단어 이상으로 커져도 요규되는 계산량을 낮은 수준으로 유지 가능합니다.

How? ) 이유로는 학습 과정을 쉽게 병렬화하여 짧은 시간 내에 양질의 단어 벡터를 얻을 수 있기 때문입니다. 이처럼 속도를 개선시킨 Word2Vec은 두 가지 학습 방법이 존재합니다. : CBoW & Skip-gram

2.1 Word2Vec 학습 방법① : CBoW(Continuous Bag of Words)

CBoW는 주변에 있는 단어들(context word)을 몇 개(window) 이용하여 중간에 있는 단어(center word)를 예측하는 방법입니다. 학습을 위한 데이터 셋을 만들기 위해 슬라이딩 윈도우를 사용합니다.

이렇게 Word2Vec의 학습은 주변 단어 크기에 따라 corpus(말뭉치)를 슬라이딩하며 중심 단어의 주변 단어들을 보고, 각 단어의 벡터 값을 업데이트 해 나갑니다.
(이 때, 윈도우 내에 등장하지 않는 벡터는 중심 단어 벡터와 멀어지게끔하고, 등장하는 주변 단어 벡터는 중심 단어 벡터와 가까워지도록 업데이트합니다.)
위 그림은 CBoW의 인공신경망 구조이며, hidden layer가 하나로 딥러닝 모델이 아닌 얕은 신경망이라고 할 수 있습니다. 또한 hidden layer에 활성화 함수가 존재하지 않고 단순 행렬곱 연산만 진행하기에 투사층(projection layer)이라고 부릅니다.

주변 단어 별 원핫벡터에 가중치 W를 곱하고, 투사층에서 만난 이 벡터들의 평균을 구합니다. 평균 벡터 값을 다시 두 번째 가중치 행렬 W′을 곱하여 원핫벡터와 차원이 동일한 벡터를 만들어줍니다. 이 벡터를 softmax를 취하여 score vector를 구하게 됩니다. 스코어 벡터의 n번째 인덱스 값은 n번째 단어가 중심 단어일 확률을 의미합니다.
(스코어벡터(예측값)와 실제 중심 단어 벡터 값과의 오차를 줄이기 위해 손실함수를 통해 오차를 최소화하는 방향으로 학습을 진행합니다.)

2.2 Word2Vec 학습 방법② : Skip-gram

skip-gram의 원리는 위의 CBoW와 비슷하지만, 중심 단어를 보고 어떤 주변 단어가 존재하는지 예측하는 모델이라는 점에서 차이가 있습니다. CBoW와 같이 간단한 모델이며, 입력층과 출력층만 CBoW와 반대입니다. 일반적으로 Skip-gram이 보다 좋은 성능을 보인다고 알려져 있습니다.

3. Word2Vec 최적화

앞에서 말한 두 가지 방식은 softmax를 취할 때 계산량 증가에 따른 학습 속도가 매우 느려지는 단점이 존재합니다. 이를 개선하기 위해 hierarchical softmax와 negative sampling이라는 두 가지 방법이 제안되었습니다. 주로 negative sampling 방법의 성능이 더 좋았기에 Word2Vec은 Skip-gram모델에 nagetive sampling을 적용하여 학습하는 방안으로 굳어졌습니다.(SGNS : Skip-Gram with Negative Sampling) 이에 관해서는 논문리뷰에서 자세히 설명하겠습니다.

4. Word2Vec 한계점

1) 단어의 형태학적 특성(teach, teacher, teachers)을 반영하지 못합니다.(모두 다른 벡터로 분류)
2) 분포 가설을 기반으로 학습하기에 단어 빈도 수의 영향을 많이 받아 희소한 단어(rare word)를 임베딩 하기에 어렵습니다.
3) OOV(out of vocabulary 사전에 없는 단어)의 처리가 어렵습니다. (단어 단위로 사전을 구성하여 학습하는 Word2Vec은 새로운 단어가 등장하면 데이터 전체를 다시 학습시켜야 하는 문제가 존재합니다.)

이러한 단점들을 보완하고자 GloVe, FaskText 등이 개발되고 있습니다.


참고 : https://www.goldenplanet.co.kr/our_contents/blog?number=859&pn=1

profile
수학과 대학원생. 한 걸음씩 꾸준히

3개의 댓글

comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

1개의 답글
comment-user-thumbnail
2023년 12월 11일

너무 잘 읽었어요~! 감사합니다.

답글 달기