文章目录

  • 图谱三元组概述
  • 自顶向下构建
  • 自下向上构建
  • 语义角色构建图谱
  • 三元组保存Neo4j

博文配套视频课程:自然语言处理与知识图谱


图谱三元组概述

知识图谱的数据是通过三元组(主语,谓词,宾语)的方式进行组织,每一个三元组代表一条知识,这些三元组并不是杂乱无章的堆砌在知识图谱中,而是按照一定的逻辑组织起来的。

  1. 数据模型层:勾画出来的数据组织模式 (实体、属性、关系)
  2. 数据层:数据是一条条的知识,它是依据数据模型组织起来的。我们可以把数据模型看作是骨架,把具体数据看作是肌肉

自顶向下构建

是指先确定知识图谱的数据模型,再根据模型去填充具体数据,最终形成知识图谱。一般适用于垂直行业知识图谱的构建, 适用于那些知识内容比较明确,关系比较清晰的领域构建知识图谱,最好有行业专家介入。

  1. 新冠疫情
  2. 电商商品数据

自下向上构建

是先按照三元组的方式收集具体数据,然后根据数据内容来提炼数据模型。 采用这种方式构建知识图谱,是因为在开始构建知识图谱的时候,还不清楚收集数据的范围,也不清楚数据怎么使用,就是先把所有的数据收集起来,形成一个庞大的数据集,然后再根据数据内容,总结数据的特点,将数据进行整理、分析、归纳、总结,形成一个框架,也就是数据模型

  1. 评论数据抽取
  2. 百科词条抽取

语义角色构建图谱

无论是通过词性、语义还是依存语法分析。基本都需要按照下面三个步骤来实现

  1. 分句
  2. 分词
  3. 词性标注 / 语义角色 / 依存语法分析
from ltp import LTP
ltp = LTP()
sents = ltp.sent_split(["该僵尸网络包含至少35000个被破坏的Windows系统,攻击者和使用者正在秘密使用这些系统来开采Monero加密货币。该僵尸网络名为“ VictoryGate”,自2019年5月以来一直活跃。"])# 使用语义角色标注构造关系抽取
def srl_AtoA(sent):seg, hidden = ltp.seg([sent])seg = seg[0]srl = ltp.srl(hidden, keep_empty=False)[0]results = []for s in srl:key = s[0]values = s[1]start = ''end = ''for value in values:# 语义角色只需要获取A0,A1if value[0] == 'A0':start = ''.join(seg[value[1]:value[2]+1])if value[0] == 'A1':end = ''.join(seg[value[1]:value[2]+1])if start != '' and end != '':results.append((start,seg[key],end))return resultsfor sent in sents:print('sent:', sent)results = srl_AtoA(sent)print('res:', results)

通过语义抽取的结果如下:

res: [('该僵尸网络', '包含', '至少35000个被破坏的Windows系统'), ('攻击者和使用者', '使用', '这些系统'), ('攻击者和使用者', '开采', 'Monero加密货币')]

三元组保存Neo4j

三元组可以保存在类似Neo4j图数据中,下面的案例需要一定的Noo4j基本知识,并且使用到了Python如何操作Neo4j。这块不熟悉的小伙伴可以通过观看视频进行回顾。

from ltp import LTP
ltp = LTP()# 使用语义角色标注构建和抽取关系
def srl_AtoA(sent):# 句子进行分词操作seg,hidden = ltp.seg([sent])seg = seg[0]print(seg)srl = ltp.srl(hidden,keep_empty=False)[0]print(srl)results = []for s in srl:key = s[0]values = s[1]start,end = '',''for value in values:print('value:',value)if value[0] == 'A0':start = ''.join(seg[value[1]:value[2]+1])if value[0] == 'A1':end = ''.join(seg[value[1]:value[2] + 1])if start!='' and end !='':results.append([start,seg[key],end])return resultsfrom py2neo import Node, Graph, Relationship
class DataToNeo4j(object):"""将excel中数据存入neo4j"""def __init__(self):"""建立连接"""link = Graph("http://localhost:7474/", username="neo4j", password="root")self.graph = link# self.graph = NodeMatcher(link)self.graph.delete_all()def create_spo(self,result):start = Node(name = result[0])end = Node(name = result[2])self.graph.create(start)self.graph.create(end)r1 = Relationship(start, result[1], end)self.graph.create(r1)
# 分句操作
sents = ltp.sent_split(["该僵尸网络包含至少35000个被破坏的Windows系统,攻击者和使用者正在秘密使用这些系统来开采Monero加密货币。该僵尸网络名为“ VictoryGate”,自2019年5月以来一直活跃。"])spo = DataToNeo4j()for sent in sents:print(sent)results = srl_AtoA(sent)print(results)for result in results:spo.create_spo(result)print('-' * 100)

持久化到Neo4j结果如下:

08_采用LTP抽取图谱三元组相关推荐

  1. 小麦知识图谱三元组构建

    小麦知识图谱三元组构建 读取爬取后的元素数据 去除关键属性缺省的项 去除品种名称的两边空格 抽取同省份关系 去重 提取同省份关系 小麦关系实体与特征定义 构建知识图谱 连接数据库 构建小麦本体 提取亲 ...

  2. 论文浅尝 | 知识图谱三元组置信度的度量

    论文笔记整理:叶橄强,浙江大学计算机学院,知识图谱和知识推理方向. https://arxiv.org/pdf/1809.09414.pdf 动机 在构建知识图谱的过程中,不可避免地会产生噪声和冲突. ...

  3. 配置Fuseki服务器管理知识图谱三元组

    配置Fuseki服务器管理知识图谱三元组 By 龙前尘 实验环境:Win8.apache-jena-fuseki-3.5.0 转载请注明地址: http://blog.csdn.net/svenhua ...

  4. 结构化数据抽取成三元组_干货丨AI在数据防泄漏中的应用——知识图谱之知识抽取...

    随着技术的不断发展,AI(Artificial Intelligence,人工智能)逐渐在社会经济发展的方方面面深入,成为信息化时代最重要的支柱技术之一. 在数据安全领域领域,AI技术所能起到的作用越 ...

  5. 【采用】知识图谱简介及风控应用场景

    通俗地讲,知识图谱就是把所有不同种类的信息(Heterogeneous Information)连接在一起而得到的一个关系网络.知识图谱提供了从"关系"的角度去分析问题的能力. 1 ...

  6. 信息抽取:SPO三元组知识

    向AI转型的程序员都关注了这个号

  7. 信息抽取在知识图谱构建中的实践与应用

    编者按 坦率地讲,各行各业对如何落地知识图谱这个问题,或多或少都心存一丝疑惑.人类知识和机器可理解的知识有什么区别?知识图谱如何突破自身局限性,从"万事通"转为"科学家& ...

  8. ltp︱基于ltp的无监督信息抽取模块

    ltp︱基于ltp的无监督信息抽取模块:https://zhuanlan.zhihu.com/p/44890664 无监督信息抽取较多都是使用哈工大的ltp作为底层框架.那么基于ltp其实有了非常多 ...

  9. 面向知识图谱的信息抽取

    面向知识图谱的信息抽取 人工智能技术与咨询 点击蓝字 · 关注我们 来源:< 数据挖掘,> ,作者赵海霞等 关键词: 知识图谱:信息抽取:实体抽取:关系抽取:开放域 摘要: 摘要: 随着大 ...

最新文章

  1. sed及awk显示指定行内容
  2. ajax的几种格式,jQuery-----jQuery的几种ajax获取json格式数据的方法
  3. Ubuntu下mysql中文乱码的解决
  4. 辞九门回忆用计算机,辞九门回忆(单轨,曲速70,适合UTAU调教;midishow首发)...
  5. lodash 核心源码学习(基于4.17.11版本)
  6. 3_4 IteratorMode 迭代器模式
  7. linux检查运行程序文件,LINUX定时检查程序运行状态
  8. 前端开发常用代码片段(下篇)
  9. python脚本自动消除安卓版_python脚本中appium的自启动自关闭
  10. lisp 线性标注自动避让_《数据标注工程》第一章学习笔记及作业:数据标注概述...
  11. snipaste如何滚动截图_每天都在用的QQ截图,居然升级了这么多实用功能!
  12. 业务复杂就用 if-else?刚来的技术大佬用这招彻底干掉了!
  13. 网吧操作系统制作与优化
  14. PHP中如何获取字符串的长度
  15. 破解WMV格式电影的许可证
  16. 设置Centos7时区
  17. 怎么把计算机管理的磁盘找出来,电脑分区显示不出来怎么办
  18. feign不能正常传递参数MultipartFile(文件)时的解决手段
  19. Linux中的ps指令详解
  20. word转换成字符串

热门文章

  1. 数学建模集训知识大纲
  2. 五菱4s店维修记录怎么查?
  3. MATLAB矩阵求逆剖析
  4. C++ 超详细14Bit,16Bit,24Bit,32Bit图像直方图统计并绘制显示,自己手撸代码
  5. Android工具大全
  6. 基于微信小程序网上书城系统
  7. css(一)- 引入方式
  8. 【HDU】5140 Hun Gui Wei Company 主席树
  9. 2021-2022学年广州市广大附中九年级第一学期开学考试英语试题(八年级第二学期大联盟)
  10. 微信小程序与oracle交互,微信小程序和web之间的交互