> 文档中心 > Python:知识图谱中三元组的密度(一)

Python:知识图谱中三元组的密度(一)


目录

一、需求

二、源码

三、效果

四、注意

五、附录

Python - scipy.spatial.distance 距离计算函数 - AI备忘录 (aiuai.cn)https://www.aiuai.cn/aifarm1390.html


一、需求

  • 给定一个列表,里边存放若干三元组。
  • 三元组可以看作空间中的点。
  • 求每个三元组与其他三元组之间的欧式距离之和,取平均值,作为此处三元组的密度
  • 最终结果用一个字典来存储,键值是三元组,值是对应的密度。

二、源码

from scipy.spatial.distance import pdist, squareformpoints = [(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3)]dis_resp = squareform(pdist(points))dis_avg = {}  # 平均距离即密度flag = 0  # 标识是哪个三元组对应的距离for item in dis_resp:    sum = 0    for i in item: sum += i    dis_avg[points[flag]] = sum / (len(points) - 1)    flag += 1print("长度为%d列表构成的%d*%d矩阵如下:\n%s" %      (len(points), len(points), len(points), dis_resp))# print(dis_resp[0])print("每个元组及在此处对应的密度组成键值对,其构成的词典如下:\n%s" % dis_avg)

三、效果


四、注意

真正应用在知识图谱时候,实体表示为一个多维向量,关系也是,不可能是一维(一般取50,100,200,根据经验),因而三元组嵌套三个三元组,以上方法显然不支持。可以将实体向量和关系向量根据重要特征或分散权重进行量化,变为一个数字,就不会出现嵌套的情况,即可转化伪上述方法求解。不过由于知识图谱的大体量,计算量仍会比较大。


五、附录

Python - scipy.spatial.distance 距离计算函数 - AI备忘录 (aiuai.cn)https://www.aiuai.cn/aifarm1390.html