-
워드 임베딩, cbow<DL> 2024. 2. 25. 20:29728x90
임베딩 : 비정형화된 텍스트를 숫자로 바꿔줌으로써 사람의 언어를 컴퓨터 언어로 번역하는 것
임베딩 종류 : 빈도 기반 임베딩, 분포 기반 임베딩
임베딩의 표현 방법 : 희소표현, 밀집표현
빈도 기반 임베딩 : 단어의 빈도를 기준으로 벡터로 변환, 운수좋은 날이라는 문서의 임베딩은 [2, 1, 1]입니다. 막걸리라는 단어의 임베딩은 [0, 1, 0, 0]이며, 사랑 손님과 어머니, 삼포 가는 길이 사용하는 단어 목록이 상대적으로 많이 겹치고 있는 것을 알 수 있습니다.
빈도 기반 임베딩 단점 : 등장 횟수(빈도) 기반의 표현은 간편하지만 몇 가지 한계가 있습니다. 대표적으로 희소 문제가 있는데요. 중요한 단어이더라도 자주 등장하지 않는 단어는 학습에서 가중치를 부여받는데 한계가 있습니다.
분포 가설 : 비슷한 의미를 지닌 단어는 주변 단어 분포도 비슷하다는 가설.
He is a good guy.
He is a cool guy.
위 문장에서 good과 cool은 해당 단어 주변에 분포한 단어(He, is, a, guy)가 유사하기 때문에 비슷한 의미를 지닐 것이라고 추측할 수 있습니다.분포 가설에 맞춰 해당 단어들을 벡터화한다면 유사한 벡터값이 나올 것 = 의미적으로 가까운 단어이다
희소표현(원-핫 벡터) : 원핫인코딩을 통해 표현
희소표현 단점 :
1. 문장이 길어지면 벡터의 크기가 기하급수적으로 증가하여 공간적 낭비
2. 단어간 의미적, 구문적 유사도(코사인 유사도를 이용)를 평가하기 어려움
-> 코사인 유사도는 두 벡터를 내적한 값을 분자로 사용합니다. 하지만, 원-핫 인코딩을 적용한 서로 다른 두 벡터의 내적은 항상 0입니다. 따라서 어떤 두 단어를 골라서 코사인 유사도를 구하더라도 그 값은 항상 0이 됩니다. 이렇게 두 단어 사이의 관계를 전혀 알 수 없다면, 모델의 유연성이 매우 떨어지게 됩니다.밀집표현(임베딩 벡터) : 사용자가 벡터의 차원(크기)을 맞춰 사용, 벡터값도 0,1이 아닌 실수값
워드 임베딩 : 단어를 밀집표현한 것
Word2Vec
분산표현 : 구글에서 개발한 Word2Vec은 분포 가설(distributional hypothesis)을 가정 하에 표현, 분포 가설에 맞춰 해당 단어들을 벡터화한다면 유사한 벡터값이 나올 것 = 의미적으로 가까운 단어이다
비슷한 실수를 지닌 벡터는 비슷한 벡터 공간 안에 위치하게 되면서 단어 간의 유사성을 계산할 수 있게 됩니다
Word2Vec은 주변 단어를 타겟으로 하여 중심 단어를 예측하는지, 혹은 중심 단어를 타겟으로 하여 주변 단어를 예측하는지에 따라 CBow와 Skip-gram으로 나뉩니다.
중심 단어를 예측하기 위해서 앞, 뒤로 몇 개의 단어를 볼지를 결정해야 하는데 이 범위를 윈도우(window)라고 합니다. 예를 들어 윈도우 크기가 2이고, 예측하고자 하는 중심 단어가 sat이라고 한다면 앞의 두 단어인 fat와 cat, 그리고 뒤의 두 단어인 on, the를 입력으로 사용합니다. 윈도우 크기가 n이라고 한다면, 실제 중심 단어를 예측하기 위해 참고하려고 하는 주변 단어의 개수는 2n입니다.
슬라이딩 윈도우(sliding window) : 윈도우를 옆으로 움직여서 주변 단어와 중심 단어의 선택을 변경해가며 학습을 위한 데이터 셋을 만드는 것
Word2Vec에서 입력은 모두 원-핫 벡터
출력층(Output layer)에서 예측하고자 하는 중간 단어의 원-핫 벡터가 레이블로서 필요합니다.
Word2Vec의 은닉층은 일반적인 은닉층과는 달리 활성화 함수가 존재하지 않으며 룩업 테이블이라는 연산을 담당하는 층으로 투사층(projection layer)이라고 부름 = 얉은 신경망 모델
M(투사층의 크기) = 5 = 밀집표현(사용자가 지정하는 벡터의 크기) = 임베딩 벡터의 크기(차원)
입력층과 투사층 사이의 가중치 W는 V × M 행렬이며, 투사층에서 출력층사이의 가중치 W'는 M × V 행렬이라는 점입니다. 여기서 V는 단어 집합의 크기를 의미
인공 신경망의 훈련 전에 이 가중치 행렬 W와 W'는 랜덤 값을 가지게 됩니다. CBOW는 주변 단어로 중심 단어를 더 정확히 맞추기 위해 계속해서 이 W와 W'를 학습해가는 구조
입력 벡터와 가중치 W 행렬의 곱은 사실 W행렬의 i번째 행을 그대로 읽어오는 것과(lookup) 동일합니다. 이 작업을 룩업 테이블(lookup table)이라고 합니다.
투사층에서 벡터의 평균을 구함
이렇게 구해진 평균 벡터는 두번째 가중치 행렬 W'와 곱해집니다. 곱셈의 결과로는 원-핫 벡터들과 차원이 V로 동일한 벡터가 나옵니다. 만약 입력 벡터의 차원이 7이었다면 여기서 나오는 벡터도 마찬가지입니다.
CBOW는 소프트맥스(softmax) 함수를 지나면서 벡터의 각 원소들의 값은 0과 1사이의 실수로, 총 합은 1이 됩니다.
다중 클래스 분류 문제를 위한 일종의 스코어 벡터(score vector)입니다. 스코어 벡터의 j번째 인덱스가 가진 0과 1사이의 값은 j번째 단어가 중심 단어일 확률을 나타냅니다. 그리고 이 스코어 벡터의 값은 레이블에 해당하는 벡터인 중심 단어 원-핫 벡터의 값에 가까워져야 합니다. 스코어 벡터를 𝑦^라고 하겠습니다. 중심 단어의 원-핫 벡터를 𝑦로 했을 때, 이 두 벡터값의 오차를 줄이기위해 CBOW는 손실 함수(loss function)로 크로스 엔트로피(cross-entropy) 함수를 사용합니다. 크로스 엔트로피 함수에 중심 단어인 원-핫 벡터와 스코어 벡터를 입력값으로 넣고, 이를 식으로 표현하면 다음과 같습니다. 아래의 식에서 V는 단어 집합의 크기입니다.
크로스 엔트로피 : 모델에서 예측한 확률값이 실제값과 비교했을 때 틀릴 수 있는 정보량을 의미한다. 엔트로피와 마찬가지로 그 값이 적을 수록 모델이 데이터를 더 잘 예측하는 모델임을 의미한다.
1)
Q값: 0.0, 1.0, 1.0
크로스 엔트로피: -(log 0 * 1 + log1 *0 + log1* 0)= Infinity2)
Q값: 0.8, 0.1, 0.1
크로스 엔트로피: -(log 0.8 * 1 + log 0.1 * 0 + log 0.1 * 0) = 0.323)
Q값: 1, 0, 0
크로스 엔트로피: -(log 1 * 1 + log 0 * 0 + log 0* 0) = 0엔트로피 : 불확실성의 크기
동전을 던졌을 때 앞이 나올지 뒤가 나올지 예측하는 문제가 있다고 해보자. 앞이 나올 사건과 뒤가 나올 사건에 대해 예측한 확률 분포값에 따라 각각의 엔트로피를 구해보자.
1)
앞이 나올 확률: 50%
뒤가 나올 확률: 50%
엔트로피: -(0.5 * log0.5 + 0.5*log0.5) = 12)
앞이 나올 확률: 100%
뒤가 나올 확률: 0%
엔트로피: -(1*log1 + 0*log0)= 03)
앞이 나올 확률: 90%
뒤가 나올 확률: 10%
엔트로피: -(0.9*log0.9 + 0.1*log0.1)= 0.471번 케이스는 그만큼 어떤 면이 나올지 불확실하기 때문에 엔트로피 값이 가장 큰 1이 나왔다. 반면 앞이 나올 확률이 100%이기 때문에 의심할 여지가없는 2번 케이스의 경우 엔트로피가 가장 낮은 0이 나왔다.
분류해야하는 타겟의 클래스가 앞과 뒤, 두가지 였으므로 2^ 1=2로 엔트로의 최대값이 1이된다. 만일 구분해야하는 클래스가 8개라면 엔트로피의 최대값은 2^3=8로 3이 된다. 분류해야할 클래스가 32개라면 2^5= 32로 엔트로피 최대값은 5가 된다.728x90'<DL>' 카테고리의 다른 글
Bidirectional-LSTM-CRF 논문 사전 용어 리스트 (1) 2024.02.29 청크 태깅 레이블 (0) 2024.02.28 cbow (0) 2024.02.26 [완벽 리뷰] MobileNetV2 설명 (0) 2022.12.27 [완벽 리뷰] MobileNetV1 설명 (0) 2022.12.20