임베딩이란
- 사람이 사용하는 자연어를 기계가 이해할 수 있는 형태인 vector 표현으로 변환하는 과정
- 단어 혹은 문장을 벡터로 변환해 임의의 벡터 공간에 위치시킨다는 의미로 임베딩이라고 표현
- 가장 간단한 임베딩 표현으로는 단어 출현 횟수를 통해 문서의 임베딩 값을 구하는 방법이 있다.
One-hot Encoding
- 자연어를 임베딩하는 가장 단순한 방법으로 단어의 출현 여부를 통해 문장 혹은 문서를 벡터화하는 방식이다.
- 이를 활용할 경우 임베딩 벡터가 희소행렬로 표현되어 벡터 공간의 크기가 매우 커져 비효율적이다.
- 단어의 등장 여부에 대해서만 판단할 수 있으며 단어가 어떠한 특징을 가지는지에 대해서는 고려할 수 없다.
LSA
- 문서 전체의 각 단어 빈도수를 담은 행렬(전체적인 통계 정보)을 입력받아 차원을 축소시켜 잠재된 의미를 끌어내는 방법론
- 각 단어의 유사성, 관계성 보다는 문서 전체에 단어가 등장하는 빈도를 통해 단어를 임베딩하고자 함
Word2Vec
- 구글에서 발표한 단어 임베딩 모델
- 문서 전체가 아닌 중심 단어를 둘러싼 주변 단어들에 집중
- Skip-gram과 CBoW 방식 존재
- Skip-gram : 타겟 단어를 통해 주변 문맥 단어가 무엇일지 예측하는 과정을 통해 학습
- CBoW : 주변 문맥 단어를 통해 타겟 단어가 무엇일지 예측하는 과정을 통해 학습
- 장점
- 단어 간 관계 표현 가능 : 벡터 간 연산을 통해 단어의 관계를 표현할 수 있음 (ex. 한국 - 서울 + 도쿄 = 일본)
- 단점
- 사용자가 지정한 일정 주변 단어 개수에 대해서만 학습이 진행되어 데이터 전체에 대한 정보를 담기 어려움
- 입력 시 one-hot encoding을 활용하기에 계산량이 매우 크다
- Negative Sampling
- 계산량을 줄이기 위한 방법론
- 모든 단어에 대해 임베딩을 조정하는 것이 아니라 주변 단어와 주변단어가 아닌 단어들 중 일부를 활용하여 학습
- 주변 단어를 positive, 주변 단어가 아닌 단어들 중 일부를 negative로 간주하여 학습
Glove
- LSA와 Word2Vec의 단점을 보완하기 위한 단어 임베딩 방법론
- 동시 등장 확률을 통해 단어 임베딩
- 동시 등장 확률 : 특정 단어 i가 등장했을 때 어떤 단어 k가 등장한 횟수를 카운트하여 계산한 조건부 확률 P(k∣i)
- 유사한 단어일수록 동시 등장 확률이 크고 그렇지 않을 경우 작음
- 특정 중심 단어가 주어졌을 때 임베딩된 두 단어 벡터의 내적이 두 단어의 동시등장확률 사이의 비율이 되도록 임베딩 모델 학습
BERT embedding
- 문맥을 고려한 임베딩이 가능해짐
- Word2Vec은 단어가 나타나는 문맥과 관계 없이 각 단어가 고정된 표현을 가지나, BERT의 경우 주변 단어에 따라 동적으로 변하는 단어 임베딩을 생성함
- 트랜스포머 모델 기반으로 각 단어를 문장 내 모든 단어들과 연결하여 문맥 이해 가능
- 입력 임베딩
- 토큰 임베딩 (WordPiece Embedding) : 문장 시작과 끝에 [CLS], [SEP] 토큰 추가하여 입력 데이터를 임베딩으로 변환하는 임베딩 레이어 거친 결과값 활용
- 세그먼트 임베딩 (Segment Embedding) : 입력으로 들어온 두개의 문장을 구분하는 데에 활용되는 임베딩, 세그먼트 임베딩 레이어는 출력값으로 A문장을 나타내는 임베딩 혹은 B문장을 나타내는 임베딩 두가지 값만 가지게 됨
- 포지션 임베딩 (Position Embedding) : 트랜스포머 기반 모델이므로 각 단어에 대해 병렬적으로 처리함. 이때 단어 순서와 같은 정보를 제공하기 위해 포지셔널 임베딩 레이어 활용하여 문장 내 단어 순서 표현 및 학습
- 출력 임베딩
- [CLS] : 해당 토큰은 BERT의 NSP(연속된 문장인지 아닌지 판별) 태스크에 활용되므로 입력 데이터 모두의 의미를 반영하는 임베딩 값이 됨
- 토큰 임베딩 : 모든 토큰 벡터를 참고하여 (셀프 어텐션) 계산된 결과로, 문맥 정보를 가진 임베딩 값