Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- GIS
- Set
- geojson
- Python
- 패치분할
- graph
- 도커 레이어
- GCN
- docker
- STL
- 그리드분할
- 이미지빌드
- python최단거리
- 지하철역좌표
- 파이썬
- osmnx
- 알고리즘
- 3d데이터
- 폴더조사
- 도커
- geopandas
- 컨테이너
- GNN
- MESH
- 3d
- 귀여운고래
- 데이터입수
- 동명이인찾기
- pyvista
- 좌표거리
Archives
- Today
- Total
이것저것 기록
[graph] 그래프 임베딩에 대한 기록 (2) 본문
graph2vec의 근간이 된 doc2vec와 word2vec에 대해 조금 더 자세히 기록해보려고 한다.
Word2Vec
1. word2vec 개요
- word2vec은 비슷한 문맥(context)를 지니는 단어를 비슷한 벡터로 표현하는 distributed word representation 방법이다.
- 여기서 비슷한 문맥이란, 내가 임베딩 하고자 하는 단어 근처의 단어를 뜻한다. '사랑'이라는 단어를 '사랑'이라는 단어의 사전적 의미가 아닌, '사랑'이라는 단어와 함께 쓰여지는 단어(문맥)들로 사랑의 임베딩 벡터를 만드는 것이다. 살짝 문과적 감성을 섞어보자면 나는 이 방법론에 굉장한 감동을 느꼈다. 사랑, 우정, 의리와 같은 감정을 나타내거나 눈에 보이지 않는 현상을 의미하는 단어들은 사전적 정의로 그것들을 설명하는 데에는 굉장한 한계가 있다. 예를 들어 우리는 '사랑'이라는 단어를 들을 때 '이성의 상대에게 성적으로 이끌려 열렬히 좋아하는 마음의 상태'라는 사전적 의미로 느끼기 보단 우리가 '사랑'을 느꼈던 순간들로부터 경험했던 기억들을 토대로 사랑을 느낀다. word2vec의 방법론은 이와 유사한 점이 있는 것 같다. 특정 단어를 그 단일 단어의 의미로 임베딩하는 것이 아니라, 그 단어와 함께 쓰이고 근처에 있는 단어들로 특정 단어를 설명하는 것이.... 뭐 지극히 내 개인적인 생각이다.
- 다시 본론으로 돌아와서, word2vec은 단어의 의미적 관계를 학습하는 것이다.
2. word2vec 방법론
2.1 Softmax Regression
- word2vec은 softmax regression을 maximize하는 쪽으로 학습한다.
- 아래의 수식에서 x와 y는 모두 단어이다. Yk는 x가 해당하는 y이고 Yj는 모드느 클래스의 종류이다. 다음 수식이 가장 커지기 위해선 x와 이에 해당하는 클래스의 대표벡터가 같은 방향이어야만 한다.
- 분자를 키운다는 것은 중심 단어(x)에 해당하는 벡터와 주변 단어(Yk)에 해당하는 벡터의 내적값을 높인다는 뜻이다. 벡터간 내적은 코사인이므로 '내적값 UP'은 단어 벡터간 '유사도 UP'과 같은 말이다.
2.2 Negative Sampling
- word2vec은 출력층에서 나온 스코어값에 softmax함수를 적용하여 확률값으로 변환한 후에 정답과 비교하여 나온 오차를 역전파하는 구조다.
- 그런데 softmax를 적용하려면 분모의 모든 단어들에게 exp를 취해주어야하기 때문에 계산량이 어마어마 하다. 그렇기 때문에 softmax를 적용할 때 모든 단어들을 대상으로 하지 않고 일부 단어만 뽑아서 exp를 취해주게 되는데 이것을 negative sampling이라고 한다.
- 한마디로 계산량이 많아지는 것을 방지하기 위해 중심 단어가 아닌 단어들을 뭉치로 묶어서 계산량을 줄이기 위한 trick이라고 한다.
2.3 Subsampling
- 자주 등장하는 단어들에 대한 trick이다. 중심 단어 근처에 특정 단어가 많이 나온다면 그 빈도수만큼 어차피 충분한 업데이트를 했을 것이다. 그렇기 때문에 오히렬 많이 나오는 단어는 충분한 학습 이후에 학습에서 제외시키는 것이다.
Doc2Vec
1. doc2vec 개요
- doc2vec은 word2vec을 발표했던 구글 연구팀에서 2014년에 발표한 문서 임베딩 모델이다.
- 타겟 단어와 이전 단어 k개가 주어졌을 때, 이전 단어들 + 해당 문서의 아이디로 타겟 단어를 예측하는 과정에서 문맥이 비슷한 문서 벡터와 단어 벡터가 유사하게 임베딩 된다.
2. doc2vec 방법론 (간단히)
- 어떤 문단에 "나는 오늘 오후에 병원에 간다." 라는 문장이 있을 때 다음과 같이 학습 데이터가 구성된다.
- 윈도우 사이즈: k = 3 (타겟 단어의 이전 세 개 단어를 보겠다는 뜻)
- [문단, 나는, 오늘, 오후에] - 병원에
- [문단, 오늘, 오후에, 병원에] - 간다
- doc2vec은 문단에서 단어를 예측하며 로그 확률 평균을 최대화 하는 과정에서 학습된다. 최대화 하려는 수식은 word2vec의 수식과 거의 동일하다.
참고 링크:
'Data Science > ML & DL' 카테고리의 다른 글
[python, ML] scikit-learn을 사용하여 학습/테스트 데이터 전처리하기 (0) | 2021.04.14 |
---|---|
[python] 데이터 유사성 측정방법 (0) | 2021.04.12 |
[graph] 그래프 임베딩에 대한 기록 (1) (0) | 2021.01.06 |
[graph] graphSAGE의 embedding generation algorithm에 대한 기록 (0) | 2021.01.05 |
[graph] graph pooling에 대한 기록 (0) | 2021.01.01 |
Comments