Создание вложений с использованием node2vec - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь создать вложения для списка ребер, который у меня есть, используя networkx и node2vec. Мой список краев выглядит следующим образом:

1 2
1 6
...
450 230
...
601 602 

Это невзвешенный неориентированный граф, в основном, и хранится в текстовом файле. Я пытаюсь преобразовать это в график, используя следующее:

nx_G = nx.read_edgelist(args.input, delimiter=' ', create_using=nx.DiGraph())
G = node2vec.Graph(nx_G, args.directed, args.p, args.q, args.seed)
G.preprocess_transition_probs()
walks = G.simulate_walks(args.num_walks, args.walk_length)
walks = [str(walk) for walk in walks]
model = Word2Vec(walks, size=args.dimensions, window=args.window_size, min_count=0, sg=1, workers=args.workers, iter=args.iter)
model.wv.save_word2vec_format(args.output)

где args.input предоставляет текстовый файл. Функция read_edgelist правильно читает узлы, и создаются вложения. Однако в файле вложений узлы не нумеруются с 1 по 606 (это значения узлов в моем списке ребер): вместо этого они имеют число 14, с цифрами от 0 до 9 и некоторыми специальными символами в качестве значений узлов вместо этого для которых были созданы вложения. То есть вместо того, чтобы читать все число из более чем одной цифры (скажем, 29) как один узел, он просто читает 2 и вычисляет вложения для него. Я не понимаю, почему это происходит, и был бы признателен за понимание.

1 Ответ

0 голосов
/ 01 апреля 2019

Я решил эту проблему, закомментировав следующую строку кода в файле main.py репозитория networkx:

walks = [map(str, walk) for walk in walks]
...