Использование scipy.sparse для построения матрицы смежности из вложений (word2vec, node2vec ...) - PullRequest
0 голосов
/ 27 августа 2018

Я применяю deepwalk / node2vec к графу с 15 миллионами узлов и миллиардами ребер. Я сгенерировал вложения для графа, и получение этих вложений в матрицу смежности требует разреженных матриц. Я работаю над кодом в https://github.com/palash1992/GEM/tree/master/gem.

Вот небольшой воспроизводимый пример с графом выборки гораздо меньшего размера.

'embs' - это массив чисел с плавающей точкой, форма (399224, 64), которая генерируется из алгоритма Deepwalk и затем обрабатывается в вложенные краевые вложения путем взятия произведения Адамара (не показано в этом коде).

#Generate approximation of embeddings
embs = scipy.sparse.random(399224, 64, density=0.01)
embs = np.asarray(embs)

Это код, который я конвертирую для использования разреженных матриц:

node_num = 1000

#Create non-sparse adjacency matrix from embeddings in embs
adj_mtx_r = np.zeros((node_num, node_num))

for v_i in range(node_num):
    for v_j in range(node_num):
        if v_i == v_j:
            continue
        adj_mtx_r[v_i, v_j] = np.dot(embs[v_i, :], embs[v_j, :])

Я прочитал это: http://www.scipy -lectures.org / advanced / scipy_sparse / storage_schemes.html

Ниже приведена моя попытка создать разреженную матрицу с той же арифметикой, что и в приведенном выше кодовом блоке. Мой вопрос: дает ли это те же результаты, что и выше :

#Get the row indices of the non-zero matrix entries
row = np.nonzero(train_edge_embs)[0]

#Get the column indices of the non-zero matrix entries
col = np.nonzero(train_edge_embs)[1]

#Get the non-zero values of the matrix entries
data = train_edge_embs[np.nonzero(train_edge_embs)]

test_mtx = sp.coo_matrix((data, (row, col)), (len(data), len(data)))
estimated_adj = test_mtx.tocsr()

Я в конечном итоге создаю список ребер из матрицы смежности, но это не представлено в этом коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...