<aside> 💡 프로젝트를 위해 공부했던 DeepWalk 에 대해 정리하고자 한다. 이번 포스팅은 DeepWalk로 불리는 'Online Learning of Social Representations' 논문의 내용을 바탕으로 참고 자료와 함께 다시 정리한 내용이다.
</aside>
$$ Pr(W_{v_i}\;|\;\Phi(W_{v_1}),\,\Phi(W_{v_2})\,,\,\Phi(W_{v_2})\,,\, \dots\,,\,,\,\Phi(W_{v_{i-1}})) $$
$$ Hierarchical\,Softmax = Pr(u_k\,|\,\Phi(v_j))=\Pi^{\lceil log|v| \rceil}_{l=1}Pr(b_l\,|\,\Phi(v_j)) $$
class DeepWalk :
def __init__(self, G, num_walks, walk_length) :
import random
from gensim.models import Word2Vec
self.walks = []
for i in range(num_walks) :
for node in G.nodes() :
walk = [node]
for j in range(walk_length) :
neighbors = list(G.neighbors(walk[-1]))
if len(neighbors) > 0 :
walk.append(neighbors[random.randint(0, len(neighbors) -1)])
self.walks.append(walk)
model = Word2Vec(self.walks, vector_size = 2, window = 5, min_count = 1, sg = 1, workers = 2)
self.ne = {node : model.wv[node].tolist() for node in G.nodes()}
self._get = {"walks" : self.walks, "node_embedding" : self.ne}
def __len__(self) :
return len(self.ne)
def __getitem__(self, item) :
return self._get[item]