Word Embedding_Word2Vec
참고1: 메타코드M https://www.youtube.com/watch?v=TZaeSgAWXL8
참고2: https://www.goldenplanet.co.kr/our_contents/blog?number=859&pn=1
GoldenPlanet | 빅데이터 공부 한 걸음: Word2Vec 이란?
Go Beyond Data! 골든플래닛
goldenplanet.co.kr
Word Embedding
- 기존 정수 인코딩의 한계: 단어 사이의 연관성을 알기 어려움
- 원핫인코딩의 한계: 메모리 (희소표현_0이 많은 메트릭스), 연관성 알기 어려움
따라서, 밀집 표현(Dense Representation) 적용해보자
- One-hot encoding의 희소 문제를 보완할 수 있다
- 벡터의 차원을 원하는 대로 설정할 수 있다
- 데이터를 이용해서 표현 학습이 가능하다 (NN사용해보자)
Word2Vec
- 단어를 벡터로 <-- NN 사용 Dense Rep
* 단어 사이의 유사도를 복습해보면
cosine 유사도 (각도) / Euclidean 유사도 (거리)
어떻게 카테고리를 나눌 수 있을까?
가정, 한 문단안에 자주 등장하는 아이들이 상관관계가 높지 않을까?
두가지 방법 제안 1) CBOW, 2) Skip-Gram
1) CBOW (Continuous Bag of Words): 주변 단어를 활용하여 중간에 있는 단어를 예측
- 은닉층은 하나이고 활성화 함수가 존재하지 않는 연산(룩업테이블)만을 담당하는 층
- 투사층에서 만난 벡터들의 평균을 구함 --> 두번째 가중치 행렬 w'(초기 값은 랜덤하게)와 곱해서 원핫벡터 추출 --> 소프트맥스함수 적용 (why? onehot으로 하면 뉴런의 수, 가중치 행렬의 크기, sparse matrix가 생성될 수 있기 때문)
- 스코어 벡터가 최종 Output :스코어 벡터의 n번째 인덱스 값은 n번째 단어가 중심 단어일 확률을 뜻하게 됨
- 스코어 벡터(or 예측 값)과 실제 중심 단어 벡터 값과의 오차를 줄이기 위해 손실 함수(loss function)을 사용하여 오차를 최소화하는 방향으로 학습됨
2) Skip-Gram : 중간 단어를 활용해 주변에 있는 단어를 예측
- CBow와 반대
- onehot 벡터로 들어온 입력층에 첫번째 weight를 곱하고 이후 두번째 weight(주변 단어수만큼 존재)를 곱해서 softmax 함수 적용
(CBow의 경우 첫번째 weight & 두번째 weight 둘 다 한개 존재)
- Skip-Gram이 성능이 더 좋음
Word2Vec의 최적화
GoldenPlanet | 빅데이터 공부 한 걸음: Word2Vec 이란?
Go Beyond Data! 골든플래닛
goldenplanet.co.kr
하지만... 데이터 셋에 존재하는 모든 단어를 한꺼번에 고려하게 되면서 계산량이 매우 커졌기 때문에 1) hierarchical sofrmax 2) negative sampling이라는 두가지 방법이 제안되었다.
1) hierarchical softmax
- 순수하게 softmax함수를 빠르게 계산하기 위해 고안됨.
- 모든 단어별 등장 빈도를 고려하여 이진트리를 구성하는 방법임
step1) 가장 많은 빈도를 보이는 단어를 트리의 루트로 지정
step2) 루트의 자식노드는 2,3번째로 많이 등장한 단어로 저장하고 각각 다음 자식 노드에는 다음으로 많이 등장하는 단어 저장
즉, 구하고자하는 단어가 저장된 leaf node까지의 확률을 계산하기 때문에 N번 탐색이 아닌 Log N(밑이 2)번만 계산하면 됨
빈도가 높을수록 트리의 상위 부분에 저장되어 있어 logN번보다 적게 계산이 가능 --> 속도 향상
2) Negative sampling
- "나는 임베딩 공부를 하고 있다" 여기서 주변단어 나는, 공부를 (positive), 하고 있다 (negative)가 됨
- 코퍼스 상에는 negative인 경우가 매우 많으므로 그 중 일부만 뽑아서 사용해보자
- Negative sampling이 성능이 더 좋다고 함!
"Word2Vec을 대신하여 SGNS(Skip-Gram with Negative Sampling)라는 용어로 불리기도 했으며, 워드 임베딩 학습 방법에서 한 축을 담당하게 되었습니다"
Word2Vec의 단점
- teach, teaches 의미가 비슷한 단어를 다른 단어로 취급
- 분포 가설의 영향으로 희소한 단어를 임베딩하기 어렵다.
- OOV(Out of Vocabulary) 처리가 어렵다 (새로운 단어가 등장하면 데이터 전체를 다시 학습시켜야함)
이러한 한계점으로 인해 보완한 모델들이 등장하는데.. 그것이 GloVe, FastText 등이다.