DeepWalk代码实战-维基百科词条图嵌入可视化

准备工作:

 
从爬虫网站中爬取维基百科See also关联词条:https://densitydesign.github.io/strumentalia-seealsology/

维基百科网站:https://www.wikipedia.org/

在这里插入图片描述

爬取过程:

在这里插入图片描述

下载 tsv 文件:

在这里插入图片描述

import networkx as nx  # 图数据挖掘包
import numpy as np  # 数据分析
import pandas as pd
import random
from tqdm import tqdm  # 进度条
# 数据可视化
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号# 导入数据
df = pd.read_csv("seealsology-data.tsv", sep='\t')
# 构建无向图
G = nx.from_pandas_edgelist(df, "source", "target", edge_attr=True, create_using=nx.Graph())
# print(len(G))  # 图的节点数# 随机游走函数
def get_randomwalk(node, path_length):'''输入起始节点和路径长度,生成随机游走序列:param node::param path_length::return:'''random_walk = [node]for i in range(path_length-1):# 汇总邻居节点temp = list(G.neighbors(node))temp = list(set(temp) - set(random_walk))  # 去掉已经访问过的节点if len(temp) == 0:break# 从邻居节点中随机选择下一个节点random_node = random.choice(temp)random_walk.append(random_node)node = random_nodereturn random_walkall_nodes = list(G.nodes())
# print(all_nodes)
# 生成随机游走序列
gamma = 10  # 每个节点作为起始点生成随机游走序列个数
walk_length = 5  # 随机游走序列最大长度
random_walks = []
for n in tqdm(all_nodes):for i in range(gamma):random_walks.append(get_randomwalk(n, walk_length))
# print(len(random_walks))from gensim.models import Word2Vec  # 自然语言工具包
model = Word2Vec(vector_size=256,window=4,sg=1,hs=0,negative=10,alpha=0.03,min_alpha=0.0007,seed=14)
# 用随机游走序列构建词汇表
model.build_vocab(random_walks, progress_per=2)
# 训练
model.train(random_walks, total_examples=model.corpus_count, epochs=50, report_delay=1)
# 查看某个节点的Embedding
# print(model.wv.get_vector("deep learning"))
# 找相似词语
# print(model.wv.similar_by_word('deep learning'))# TSNE降维可视化
from sklearn.manifold import TSNE
X = model.wv.vectors
term2index = model.wv.key_to_index
tsne = TSNE(n_components=2, n_iter=1000)  # 降维到2维
embed_2d = tsne.fit_transform(X)
plt.figure(figsize=(14, 14))
plt.scatter(embed_2d[:, 0], embed_2d[:, 1])
pagerank = nx.pagerank(G)  # 计算PageRank重要度
node_importance = sorted(pagerank.items(), key=lambda x: x[1], reverse=True)
n = 30  # 取PageRank重要度最高的前n个节点
terms_chosen = []
for each in node_importance[:n]:terms_chosen.append(each[0])
for item in terms_chosen:idx = term2index[item]plt.scatter(embed_2d[idx, 0], embed_2d[idx, 1], c='r', s=50)plt.annotate(item, xy=(embed_2d[idx, 0], embed_2d[idx, 1]), c='k', fontsize=12)
plt.show()

在这里插入图片描述
参考资料:【DeepWalk代码实战-维基百科词条图嵌入可视化】 https://www.bilibili.com/video/BV1et4y187Gd/?share_source=copy_web&vd_source=9a6c606c6f9df7c015effdcaa7e1fa84

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/219041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用友NC word.docx接口存在任意文件读取漏洞 附POC

@[toc] 用友NC word.docx接口存在任意文件读取漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使…

【anaconda】numpy.dot 向量点乘小技巧

假设向量A[1,1], 向量B[2,3]。如果想知道他们的内积就可以输入如下代码: 当然,如果是两个列向量相乘,肯定是不对的 但是如果没有维度也一样可以求得内积,而且结果不会套在列表里

二年级 最少需要几个刻度?

娃二年级题目:请你设计一把尺子,用这把尺子一次能画出 1~8厘米八条不同长度的线段。最少需要几个刻度? 答:最少需要 5 个刻度; 方案有: 0, 1, 2, 5, 8 0, 1, 3, 7, 8 0, 1, 4, 6, 8 0, 1, 5, 6, 8 0, 1, 5…

Java中的异常语法知识居然这么好玩!后悔没有早点学习

学习异常后,发现异常的知识是多么的吸引人!不仅可以用来标记错误,还可以自己定义一个异常,用来实现自己想完成的业务逻辑,接下来一起去学习吧 目录 一、异常的概念及体系结构 1.异常的概念 2.异常的体系结构 3.异常…

【计算机视觉 | 目标检测】Grounding DINO 深度学习环境的配置(含案例)

“Grounding DINO:Marrying DINO with Grounded Pre-Training for Open-Set Object Detection”的官方 PyTorch 实现:SoTA 开放集对象检测器。 文章目录 一、Helpful Tutorial二、相关的论文工作2.1 相关的论文整理2.2 论文的亮点2.3 论文介绍2.4 Marryi…

js无法请求后端接口,别的都可以?

在每个接口的控制器中加入以下代码即可: header(Access-Control-Allow-Methods:*); header("Access-Control-Allow-Origin:*"); 如果嫌麻烦可以添加在api初始函数里面

从0开始学习JavaScript--JavaScript事件:响应与交互

JavaScript的事件处理是Web开发中至关重要的一部分,通过事件,能够实现用户与页面的互动,使得网页更加生动和交互性。本文将深入探讨JavaScript事件的各个方面,包括事件的基本概念、事件类型、事件对象、事件冒泡与捕获、事件委托、…

记录华为云服务器(Linux 可视化 宝塔面板)-- Nginx篇

文章目录 配置Nginx服务器1、添加CentOS 7系统的Nginx yum资源库2、安装Nignx服务 设置Nginx安全级别(感觉可以先不设置)步骤一步骤二如有启发,可点赞收藏哟~ 配置Nginx服务器 1、添加CentOS 7系统的Nginx yum资源库 先安装rpm apt instal…

C++双指针算法:统计点对的数目

本周推荐阅读 C二分算法:得到子序列的最少操作次数 本题其它解法 C二分查找:统计点对的数目 题目 给你一个无向图,无向图由整数 n ,表示图中节点的数目,和 edges 组成,其中 edges[i] [ui, vi] 表示 u…

【人工智能】Chatgpt的训练原理

前言 前不久,在学习C语言的我写了一段三子棋的代码,但是与我对抗的电脑是没有任何思考的,你看了这段代码就理解为什么了: void computerMove(char Board[ROW][COL], int row, int col) {while (1){unsigned int i rand() % ROW, …

【全栈开发】Blitz.js与RedwoodJS

技术的不断发展是必然的。如果你仔细观察这片土地,你会注意到随着技术的成熟而出现的某些模式。特别是,开发人员一直在努力提高性能,简化开发过程,增强开发人员体验。 在本指南中,我们将分析两个帮助全栈应用程序世界…

渗透测试--Nacos系统

免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…