精华内容
下载资源
问答
  • 瑞金医院MMC人工智能辅助构建知识图谱大赛复赛
  • 使用py2neo存储将三元组存储到neo4j图形数据库中,构建知识图谱。知䇶图䉡(KQRZOHdJH GUaSK)以结构化的形式描䘠客㿲世界中概念、实体及 其关系,将互㚄㖁的信息㺘䗮成更接䘁人类䇔知世界的形式,提供了一种更好地 ...
  • 知识图谱——从零开始用neo4j框架对csv文件构建知识图谱(一)——安装neo4j 知识图谱——从零开始用neo4j框架对csv文件构建知识图谱(二)——构建三元组 1.构建实体文件和关系文件 在上文我们最后得出了entity-...

    知识图谱——从零开始用neo4j框架对csv文件构建知识图谱(一)——安装neo4j
    知识图谱——从零开始用neo4j框架对csv文件构建知识图谱(二)——构建三元组
    1.构建实体文件和关系文件
    在上文我们最后得出了entity-relation.csv,接下来我们对其拆分为实体和关系两个文件

    #!/usr/bin/env python
    # _*_ coding:utf-8 _*_
    
    import pandas as pd
    import csv
    
    # 读取三元组文件
    h_r_t_name = [":START_ID", "role", ":END_ID"]
    h_r_t = pd.read_table("entity_relation.csv", decimal="\t", names=h_r_t_name,delimiter=",")
    # print(h_r_t.info())
    # print(h_r_t.head())
    
    # 去除重复实体
    entity = set()
    entity_h = h_r_t[':START_ID'].tolist()
    entity_t = h_r_t[':END_ID'].tolist()
    for i in entity_h:
        entity.add(i)
    for i in entity_t:
        entity.add(i)
    print(entity)
    # 保存节点文件
    csvf_entity = open("entity.csv", "w", newline='', encoding='utf-8')
    w_entity = csv.writer(csvf_entity)
    # 实体ID,要求唯一,名称,LABEL标签,可自己不同设定对应的标签
    w_entity.writerow(("entity:ID", "name", ":LABEL"))
    entity = list(entity)
    entity_dict = {}
    for i in range(len(entity)):
        w_entity.writerow(("e" + str(i), entity[i], "my_entity"))
        entity_dict[entity[i]] = "e" + str(i)
    csvf_entity.close()
    # 生成关系文件,起始实体ID,终点实体ID,要求与实体文件中ID对应,:TYPE即为关系
    h_r_t[':START_ID'] = h_r_t[':START_ID'].map(entity_dict)
    h_r_t[':END_ID'] = h_r_t[':END_ID'].map(entity_dict)
    h_r_t[":TYPE"] = h_r_t['role']
    h_r_t.pop('role')
    h_r_t.to_csv("roles.csv", index=False)
    

    entity.csv文件如下图
    在这里插入图片描述

    roles.csv文件如下图所示
    在这里插入图片描述

    2.调用neo4j构建知识图谱

    在命令行输入neo4j-admin.bat import --nodes D:\python_workplaces\get_kg\entity.csv --relationships D:\python_workplaces\get_kg\roles.csv(对于换成自己的链接)
    成功的话会在data文件夹下的databases文件夹下出现graph.db
    在这里插入图片描述
    这时候重新打开一个新的命令行,输入neo4j.bat console,打开http://localhost:7474/browser/,登陆,左侧点击,
    在这里插入图片描述

    即会看到
    在这里插入图片描述

    说明成功了
    3.失败的问题有
    (1)实体错误,常见为实体不是一行输入的,是多行,出错信息中出现e222 error字样,修改为一行即可
    (2)关系对应上,常见为没有该实体,,出错信息为e222 missing,把出错的实体补上就行,我才用的是把其设置为一个error实体
    (3)出现NAN实体,把这个实体及其关系去掉即可,或者一开始就不把nan作为一个实体

    展开全文
  • 知识图谱构建java源码NOUS:动态知识图中的构建、查询和推理 知识图谱 (KG) 的自动构建仍然是一项昂贵的技术挑战,大多数企业和学术机构都无法实现。 NOUS 是一个端到端框架,用于为任意应用程序域开发自定义知识...
  • 实践了下怎么建一个简单的知识图谱,两个版本,一个从0开始(start fromscratch),一个在CN-DBpedia基础上补充,把MySQL,PostgreSQL,Neo4j 数据库都尝试了下。自己跌跌撞撞摸索可能踩坑了都不知道,欢迎讨论。...
  • 本发明涉及计算机领域,具体涉及一种构建知识图谱的方法及系统。背景技术:随着人工智能技术的不断发展,智能机器人被越来越多的应用于人类的生产生活当中。在智能机器人与人类的交互过程中,为了提高智能机器人对...

    201338465804.gif

    本发明涉及计算机领域,具体涉及一种构建知识图谱的方法及系统。

    背景技术:

    随着人工智能技术的不断发展,智能机器人被越来越多的应用于人类的生产生活当中。

    在智能机器人与人类的交互过程中,为了提高智能机器人对用户需求回应的准确度,提高智能机器人的用户体验,在生成交互回应的过程中,智能机器人通常会调用相关的知识图谱,根据知识图谱中的知识信息数据来生成交互回应。例如,在用户提问“土豆的做法”时,智能机器人会调用相关知识图谱,从中获取有关“土豆”的菜谱。在上述过程中,知识图谱中知识信息数据的正确性以及完整性会直接影响到智能机器人应答的正确性。

    目前,知识图谱的构建都是基于人工编写好的结构化数据。然而,人工编写不仅太费时费力而且容易遗漏较偏门的知识点。这就导致现阶段不仅可投入使用的知识图谱相当匮乏,而且即使是投入使用的知识图谱也存在正确度以及知识全面度不能满足需求的问题。

    技术实现要素:

    本发明提供了一种构建知识图谱的方法,所述方法包括:

    获取半结构化数据;

    针对目标领域,从网页进行信息提取,获取包含实体节点和/或节点关系的垂直领域数据;

    将所述垂直领域数据补充到所述半结构化数据中,生成包含垂直领域数据的知识图谱。

    在一实施例中,从网页进行信息提取,包括:

    文本识别,识别网页文本;

    爬取数据,基于文本识别结果获取与所述目标领域相关的数据;

    实体提取以及关系提取,从获取的数据中提取所述半结构化数据缺失的实体节点和/或节点关系。

    在一实施例中,所述爬取数据步骤还包括:

    数据清洗,所述数据清洗为非实体清洗,其中,针对特定词汇进行过滤。

    在一实施例中,所述实体提取包括:

    命名实体识别,其中,利用深度学习的方法进行命名实体识别。

    在一实施例中,基于神经网络进行节点关系提取。

    本发明还提出了一种交互方法,所述方法包括:

    获取用户多模态数据并解析,确定用户交互意图;

    确定所述用户交互意图所对应的垂直领域;

    调用知识图谱,所述知识图谱包含对应所述垂直领域的垂直领域数据;

    从所述知识图谱中提取回应所述用户交互意图所需的知识信息数据;

    根据所述知识信息数据,针对所述用户交互意图生成多模态交互回应数据。

    在一实施例中,所述方法还包括:

    获取用户针对所述多模态交互回应数据的反馈数据;

    根据所述反馈数据确定所述用户针对所述多模态交互回应数据的满意度;

    根据所述满意度确定从所述知识图谱中提取的知识信息数据的数据正确度和/或数据完整度;

    根据所述数据正确度和/或所述数据完整度对从所述知识图谱中提取的知识信息数据进行数据更新和/或对所述知识图谱进行数据补充。

    本发明还提出了一种存储介质,所述存储介质上存储有可实现如本发明所述方法的程序代码。

    本发明还提出了一种针对知识图谱的构建系统,所述系统包括:

    基础结构构造模块,其配置为获取半结构化数据;

    数据提取模块,其配置为确定目标领域,针对所述目标领域,从网页进行信息提取,获取包含实体节点和/或节点关系的垂直领域数据;

    知识图谱生成模块,其配置为将所述垂直领域数据补充到所述半结构化数据中,生成包含垂直领域数据的知识图谱。

    本发明还提出了一种交互系统,所述系统包括:

    输入获取模块,其配置为采集用户多模态数据;

    交互解析模块,其配置为解析所述用户多模态数据,获取用户交互意图并确定所述用户交互意图所对应的垂直领域;

    知识图谱调用模块,其配置为调用如本发明所述构建系统生成的知识图谱,所述知识图谱包含对应所述垂直领域的垂直领域数据;

    交互回应生成模块,其配置为从所述知识图谱中提取回应所述用户交互意图所需的知识信息数据,根据所述知识信息数据,针对所述用户交互意图生成多模态交互回应数据。

    相较于现有技术,根据本发明的方法及系统,可以简单快速的生成针对特定垂直领域的知识图谱,从而为智能机器人的人机交互提供有力数据支撑。

    本发明的其它特征或优点将在随后的说明书中阐述。并且,本发明的部分特征或优点将通过说明书而变得显而易见,或者通过实施本发明而被了解。本发明的目的和部分优点可通过在说明书、权利要求书以及附图中所特别指出的步骤来实现或获得。

    附图说明

    附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例共同用于解释本发明,并不构成对本发明的限制。在附图中:

    图1是根据本发明一实施例的构建知识图谱的方法流程图;

    图2是根据本发明实施例的构建知识图谱的方法部分流程图;

    图3是根据本发明一实施例的交互方法流程图;

    图4是根据本发明一实施例的交互方法部分流程图;

    图5是根据本发明一实施例的构建知识图谱的系统结构简图;

    图6是根据本发明一实施例的构建知识图谱的系统部分结构简图;

    图7是根据本发明一实施例的交互系统结构简图。

    具体实施方式

    以下将结合附图及实施例来详细说明本发明的实施方式,借此本发明的实施人员可以充分理解本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程并依据上述实现过程具体实施本发明。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。

    随着人工智能技术的不断发展,智能机器人被越来越多的应用于人类的生产生活当中。

    在智能机器人与人类的交互过程中,为了提高智能机器人对用户需求回应的准确度,提高智能机器人的用户体验,在生成交互回应的过程中,智能机器人通常会调用相关的知识图谱,根据知识图谱中的知识信息数据来生成交互回应。例如,在用户提问“土豆的做法”时,智能机器人会调用相关知识图谱,从中获取有关“土豆”的菜谱。在上述过程中,知识图谱中知识信息数据的正确性以及完整性会直接影响到智能机器人应答的正确性。

    目前,知识图谱的构建都是基于人工编写好的结构化数据。然而,人工编写不仅太费时费力而且容易遗漏较偏门的知识点。这就导致现阶段不仅可投入使用的知识图谱相当匮乏,而且即使是投入使用的知识图谱也存在正确度以及知识全面度不能满足需求的问题。

    针对上述问题,本发明提出了一种构建知识图谱的方法。

    为了保证知识图谱在特定垂直领域上的正确度以及知识全面度,就要求知识图谱中尽可能多的包含对应垂直领域的知识数据。在当前技术环境下,具备相对全面知识数据量的一个重要信息源就是网页。因此,在本发明的方法中,将网页作为数据源进行知识数据的搜集,从而获取针对目标知识领域的全面的知识数据。

    进一步的,单纯的垂直领域知识数据是不能构成一个完整的知识图谱的。为了尽可能的简化知识图谱的构建过程,在本发明的方法中,采用现有的、较常见的数据结构作为主干,将垂直领域知识数据依附于该主干上从而简单快捷的构成知识图谱。

    在当前技术环境下,半结构化数据(semi-structured data)是数据库系统中的一种数据类型,其具备以下特点:

    (1)它是一种适于数据库集成的数据模型,也就是说,适于描述包含在两个或多个数据库(这些数据库含有不同模式的相似数据)中的数据。

    (2)它是一种标记服务的基础模型,用于Web上共享信息。

    和普通纯文本相比,半结构化数据具有一定的结构性,但和具有严格理论模型的关系数据库的数据相比,它又存在数据缺失。

    基于对半结构化数据的特性分析,在本发明的方法中,使用已有的本结构化数据作为主干,针对目标知识领域进行知识数据搜集,将搜集到的知识数据填充到半结构化数据中,从而获取包含完整的垂直领域数据的知识图谱。相较于现有技术,根据本发明的方法及系统,可以简单快速的生成针对特定垂直领域的知识图谱,从而为智能机器人的人机交互提供有力数据支撑。

    接下来基于附图详细描述根据本发明实施例的方法的详细流程,附图的流程图中示出的步骤可以在包含诸如一组计算机可执行指令的计算机系统中执行。虽然在流程图中示出了各步骤的逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

    如图1所示,在一实施例中,方法包括:

    获取半结构化数据(S110);

    针对目标领域,从网页进行信息提取,获取包含实体节点和/或节点关系的垂直领域数据(S120);

    将步骤S120中获取的垂直领域数据补充到步骤S110获取的半结构化数据中,生成包含垂直领域数据的知识图谱(S130)。

    在本发明的方法流程中,关键点之一在于从网页上获取正确、全面的垂直领域数据。在一实施例中,首先基于网页文本识别,确定网页所包含的知识信息,然后从网页所包含的知识信息中筛选出目标知识领域的垂直领域知识信息。随着作为数据源的网页不断积累,获取到的垂直领域知识信息也不断积累。由于作为数据源的网页具备很大的数据量,这就能保证最终获取到全面的垂直领域知识信息。

    进一步的,针对半结构化数据,其与完整的知识图谱相比所缺失的数据包括实体节点和/或节点关系。

    因此,在一实施例中,对半结构化数据进行垂直领域数据的数据填充即是向半结构化数据中填充实体节点和/或节点关系。具体的,即,将从网页上获取的垂直领域知识信息转化为具体的实体节点和/或节点关系。

    具体的,如图2所示,在一实施例中,从网页进行信息提取,包括:

    文本识别(S210),识别网页文本;

    爬取数据(S220),基于步骤S210的文本识别结果获取与目标领域相关的数据;

    实体提取以及关系提取(S230),从步骤S220获取的数据中提取半结构化数据缺失的实体节点和/或节点关系。

    具体的,在步骤S230中,提取的结果可以是单纯的实体节点、也可以是单纯的节点关系、还可以是实体节点与节点关系的集合。

    具体的,在一实施例中,半结构化数据缺失的节点关系可以是半结构化数据已包含的实体节点间的节点关系,也可以是半结构化数据缺失的实体节点间的节点关系,还可以是半结构化数据缺失的实体节点与已包含的实体节点间的节点关系。

    进一步的,考虑到网络上的信息繁杂,其可能包含冗余信息和/或错误信息。因此,在一实施例中,爬取数据步骤还包括数据清洗步骤。

    具体的,在一实施例中,数据清洗步骤对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。

    进一步的,考虑到网络信息可能包含敏感信息,在一实施例中,在数据清洗步骤中包含非实体清洗步骤,其中,针对特定词汇进行过滤。

    进一步的,在一实施例中,在实体提取过程中,实体提取包括命名实体识别步骤。

    进一步的,为了保证命名实体识别的准确性、避免实体节点被遗漏,在一实施例中,利用深度学习的方法进行命名实体识别。具体的,在一实施例中,利用深度学习的方法,采用BiLSTM+CRF模型进行命名实体识别。

    进一步的,为了保证获取准确的节点关系、避免节点关系被遗漏,在一实施例中,基于神经网络进行节点关系提取。

    进一步的,为了避免数据冗余,在一实施例中,在进行实体提取以及关系提取时,同步对比半结构化数据中已有的实体节点以及节点关系,从而避免重复数据被填充到半结构化数据中。

    进一步的,基于本发明提出的构建知识图谱的方法,本发明还提出了一种交互方法。具体的,如图3所示,在一实施例中,方法包括:

    获取用户多模态数据(S310);

    解析用户多模态数据,确定用户交互意图(S320);

    确定步骤S320所确定的用户交互意图所对应的垂直领域(S330);

    调用知识图谱,该知识图谱包含对应步骤S330所确定的垂直领域的垂直领域数据(S340);

    从步骤S340调用的知识图谱中提取回应步骤S320所确定的用户交互意图所需的知识信息数据(S350);

    根据步骤S350提取的知识信息数据,针对步骤S320所确定的用户交互意图生成多模态交互回应数据(S360)。

    进一步的,在实际应用场景中,从理论上来讲,无法绝对保证从网页上获取到某特定垂直领域中的所有知识信息;同时,也无法绝对保证从网页上获取到的所有知识信息都是正确的。因此,无法绝对保证知识图谱中包含用户所需的所有垂直领域数据;同时,也无法绝对保证根据知识图谱中的垂直领域数据生成的所有多模态交互回应是完全正确的。

    基于上述问题,在一实施例中,采用了动态修正的方式,不断修正完善知识图谱。即使当前的知识图谱存在数据缺失和/或数据错误从而导致用户体验不理想,经过不断的数据修正完善,知识图谱所存在的数据缺失和/或数据错误必然越来越少,这就最终实现了用户体验的不断提升。

    具体的,在一实施例中,监控网页信息(定期或不定期),对比网页信息中新的垂直领域知识信息与知识图谱中的已有数据,当网页信息中出现知识图谱中并未包含的垂直领域知识信息时,新的垂直领域知识信息补充到知识图谱中从而实现知识图谱的自我完善。

    进一步的,在一实施例中,当网页信息中出现与知识图谱所包含的垂直领域数据不一致的垂直领域知识信息时,确认两者的正确性,将正确的数据保存在知识图谱中,从而实现知识图谱的自我修正。

    进一步的,在一实施例中,根据用户的交互回应确定当前的知识图谱是否满足用户需求,从而根据用户需求主动修正、完善知识图谱。

    具体的,如图4所示,在一实施例中,方法还包括:

    获取用户针对多模态交互回应数据的反馈数据(S410);

    根据步骤S410获取的反馈数据确定用户针对多模态交互回应数据的满意度(S420);

    根据满意度确定从知识图谱中提取的知识信息数据的数据正确度和/或数据完整度(S430);

    根据步骤S430确定的数据正确度和/或数据完整度对从知识图谱中提取的知识信息数据进行数据更新和/或对知识图谱进行数据补充(S440)。

    进一步的,基于本发明的方法,本发明还提出了一种存储介质,该存储介质上存储有可实现如本发明所述方法的程序代码。

    进一步的,基于本发明的方法,本发明还提出了一种针对知识图谱的构建系统。具体的,如图5所示,在一实施例中,系统包括:

    基础结构构造模块510,其配置为获取半结构化数据;

    数据提取模块520,其配置为确定目标领域,针对目标领域,从网页进行信息提取,获取包含实体节点和/或节点关系的垂直领域数据;

    知识图谱生成模块530,其配置为将垂直领域数据补充到半结构化数据中,生成包含垂直领域数据的知识图谱。

    具体的,在一实施例中,如图6所示,数据提取模块包括:

    文本识别器610,其配置为识别网页文本;

    爬取数据单元620,其配置为基于文本识别器610的文本识别结果获取与目标领域相关的数据;

    数据提取单元630,从爬取数据单元620获取的数据中提取半结构化数据缺失的实体节点和/或节点关系。

    进一步的,基于本发明的方法,本发明还提出了一种交互系统。具体的,在一实施例中,如图7所示,系统包括:

    输入获取模块710,其配置为采集用户多模态数据;

    交互解析模块720,其配置为解析用户多模态数据,获取用户交互意图并确定用户交互意图所对应的垂直领域;

    知识图谱调用模块730,其配置为调用本发明所提出的构建系统生成的知识图谱,该知识图谱包含对应交互解析模块720所确定的垂直领域的垂直领域数据;

    交互回应生成模块740,其配置为从知识图谱调用模块730调用的知识图谱中提取回应用户交互意图所需的知识信息数据,根据知识信息数据,针对用户交互意图生成多模态交互回应数据。

    进一步的,基于本发明的交互方法以及交互系统,本发明还提出了一种基于虚拟人的交互系统。具体的,在一实施例中,系统包括智能设备以及云端服务器,其中:

    云端服务器包含如本发明所述的交互系统以及多个能力接口。交互系统配置为调用云端服务器的能力接口获取用户多模态数据并解析,生成并输出多模态交互回应数据。具体的,多模态数据解析过程中各个能力接口分别调用对应的逻辑处理。

    具体的,云端服务器的能力接口包括语义理解接口、视觉识别接口、情感计算接口、认知计算接口。

    具体的,在一实施例中,以下为各个接口的说明:

    语义理解接口,其接收从智能设备的通信模块转发的特定语音指令,对其进行语音识别以及基于大量语料的自然语言处理。

    视觉识别接口,可以针对人体、人脸、场景依据计算机视觉算法、深度学习算法等进行视频内容检测、识别、跟踪等。即根据预定的算法对图像进行识别,给出定量的检测结果。具备图像预处理功能、特征提取功能和决策功能。其中:

    图像预处理功能可以是对获取的视觉采集数据进行基本处理,包括颜色空间转换、边缘提取、图像变换和图像阈值化;

    特征提取功能可以提取出图像中目标的肤色、颜色、纹理、运动和坐标等特征信息;

    决策功能可以是对特征信息,按照一定的决策策略分发给需要该特征信息的具体多模态输出设备或多模态输出应用,如实现人脸检测、人物肢体识别、运动检测等功能。

    情感计算接口,其接收从通信模块转发的多模态数据,利用情感计算逻辑(可以是情绪识别技术)来计算用户当前的情绪状态。情绪识别技术是情感计算的一个重要组成部分,情绪识别研究的内容包括面部表情、语音、行为、文本和生理信号识别等方面,通过以上内容可以判断用户的情绪状态。情绪识别技术可以仅通过视觉情绪识别技术来监控用户的情绪状态,也可以采用视觉情绪识别技术和声音情绪识别技术结合的方式来监控用户的情绪状态,且并不局限于此。在本实施例中,优选采用二者结合的方式来监控情绪。

    情感计算接口是在进行视觉情绪识别时,通过使用图像采集设备收集人类面部表情图像,而后转换成可分析数据,再利用图像处理等技术进行表情情绪分析。理解面部表情,通常需要对表情的微妙变化进行检测,比如脸颊肌肉、嘴部的变化以及挑眉等。

    认知计算接口,其接收从通信模块转发的多模态数据,认知计算接口用以处理多模态数据进行数据采集、识别和学习,以获取用户画像、知识图谱等,以对多模态输出数据进行合理决策。

    应该理解的是,本发明所公开的实施例不限于这里所公开的特定结构、处理步骤或材料,而应当延伸到相关领域的普通技术人员所理解的这些特征的等同替代。还应当理解的是,在此使用的术语仅用于描述特定实施例的目的,而并不意味着限制。

    说明书中提到的“一实施例”意指结合实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,说明书通篇各个地方出现的短语“一实施例”并不一定均指同一个实施例。

    虽然本发明所公开的实施方式如上,但所述的内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。本发明所述的方法还可有其他多种实施例。在不背离本发明实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变或变形,但这些相应的改变或变形都应属于本发明的权利要求的保护范围。

    展开全文
  • 知识图谱,是结构化的语义知识库,用于...在知识图谱技术发展初期,多数参与企业和科研机构主要采用自顶向下的方式构建基础知识库,如Freebase。随着自动知识抽取与加工技术的不断成熟,当前的知识图谱大多采用自底向

    知识图谱,是结构化的语义知识库,用于迅速描述物理世界中的概念及其相互关系,通过将数据粒度从document级别降到data级别,聚合大量知识,从而实现知识的快速响应和推理。

    当下知识图谱已在工业领域得到了广泛应用,如搜索领域的Google搜索、百度搜索,社交领域的领英经济图谱,企业信息领域的天眼查企业图谱等。

    在知识图谱技术发展初期,多数参与企业和科研机构主要采用自顶向下的方式构建基础知识库,如Freebase。随着自动知识抽取与加工技术的不断成熟,当前的知识图谱大多采用自底向上的方式构建,如Google的Knowledge Vault和微软的Satori知识库。

    在这里插入图片描述

    1、定义

    俗话说:“看人先看脸。”在我们深入了解知识图谱之前,让我们先来看一下它长什么样子!
    640?wx_fmt=png
    如图所示,你可以看到,如果两个节点之间存在关系,他们就会被一条无向边连接在一起,那么这个节点,我们就称为实体(Entity),它们之间的这条边,我们就称为关系(Relationship)。

    知识图谱的基本单位,便是“实体(Entity)-关系(Relationship)-实体(Entity)”构成的三元组,这也是知识图谱的核心。

    2、数据类型和存储方式

    知识图谱的原始数据类型一般来说有三类(也是互联网上的三类原始数据):

    • 结构化数据(Structed Data),如关系数据库
    • 非结构化数据,如图片、音频、视频
    • 半结构化数据 如XML、JSON、百科

    如何存储上面这三类数据类型呢?一般有两种选择,一个是通过RDF(资源描述框架)这样的规范存储格式来进行存储,比较常用的有Jena等。
    640?wx_fmt=png还有一种方法,就是使用图数据库来进行存储,常用的有Neo4j等。
    在这里插入图片描述
    那你可能会问我了,你不就是一大堆的三元组吗,用关系数据库来存储不也一样嘛。是的,用关系数据库来存储,尤其是存储简单的知识图谱,从技术上来说是完全没问题的。但需要注意的是,一旦知识图谱变复杂,图数据库在关联查询的效率上会比传统的关系数据存储方式有显著的提高。当我们涉及到2,3度的关联查询,基于知识图谱的查询效率会高出几千倍甚至几百万倍。

    除此之外,基于图的存储在设计上会非常灵活,一般只需要局部的改动即可。因此如果你的数据量较大,还是建议直接用图数据库来进行存储的。

    3、知识图谱的架构

    知识图谱的架构主要可以被分为: 逻辑架构、技术架构

    3.1 逻辑架构

    在逻辑上,我们通常将知识图谱划分为两个层次:数据层和模式层。

    • 模式层:在数据层之上,是知识图谱的核心,存储经过提炼的知识,通常通过本体库来管理这一层这一层(本体库可以理解为面向对象里的“类”这样一个概念,本体库就储存着知识图谱的类)。
    • 数据层:存储真实的数据。

    如果还是有点模糊,可以看看这个例子:

    模式层:实体-关系-实体,实体-属性-性值
    数据层:比尔盖茨-妻子-梅琳达·盖茨,比尔盖茨-总裁-微软

    3.2 技术架构

    知识图谱的整体架构如图所示,其中虚线框内的部分为知识图谱的构建过程,同时也是知识图谱更新的过程。
    640?wx_fmt=png别紧张,让我们顺着这张图来理一下思路。首先我们有一大堆的数据,这些数据可能是结构化的、非结构化的以及半结构化的,然后我们基于这些数据来构建知识图谱,这一步主要是通过一系列自动化或半自动化的技术手段,来从原始数据中提取出知识要素,即一堆实体关系,并将其存入我们的知识库的模式层和数据层。

    构建知识图谱是一个迭代更新的过程,根据知识获取的逻辑,每一轮迭代包含三个阶段:

    1. 信息抽取:从各种类型的数据源中提取出实体、属性以及实体间的相互关系,在此基础上形成本体化的知识表达
    2. 知识融合:在获得新知识之后,需要对其进行整合,以消除矛盾和歧义,比如某些实体可能有多种表达,某个特定称谓也许对应于多个不同的实体等
    3. 知识加工:对于经过融合的新知识,需要经过质量评估之后(部分需要人工参与甄别),才能将合格的部分加入到知识库中,以确保知识库的质量。

    4、构建技术

    前面我们已经说过了,知识图谱有自顶向下和自底向上两种构建方式,这里提到的构建技术主要是自底向上的构建技术。

    如前所述,构建知识图谱是一个迭代更新的过程,根据知识获取的逻辑,每一轮迭代包含三个阶段,下面我们依次来对每一个步骤进行介绍。
    在这里插入图片描述

    4.1 信息抽取

    信息抽取(infromation extraction)是知识图谱构建的第1步,其中的关键问题是:如何从异构数据源中自动抽取信息得到候选指示单元?
    信息抽取是一种自动化地从半结构化和无结构数据中抽取实体、关系以及实体属性等结构化信息的技术。
    涉及的关键技术包括:实体抽取、关系抽取和属性抽取。

    ★ 4.1.1 实体抽取
    实体抽取,也称为命名实体识别(named entity recognition,NER),是指从文本数据集中自动识别出命名实体。

    比如在下图中,通过实体抽取我们可以从其中抽取出三个实体——“Steve Balmer”, “Bill Gates”,和"Microsoft"。
    640?wx_fmt=png
    实体抽取的研究历史主要是从面向单一领域进行实体抽取,逐步跨步到面向开放域(open domain)的实体抽取。

    ★ 4.1.2 关系抽取

    文本语料经过实体抽取之后,得到的是一系列离散的命名实体,为了得到语义信息,还需要从相关语料中提取出实体之间的关联关系,通过关系将实体联系起来,才能够形成网状的知识结构。这就是关系抽取需要做的事,如下图所示。
    640?wx_fmt=png研究历史:

    • 人工构造语法和语义规则(模式匹配)
    • 统计机器学习方法
    • 基于特征向量或核函数的有监督学习方法
    • 研究重点转向半监督和无监督
    • 开始研究面向开放域的信息抽取方法
    • 将面向开放域的信息抽取方法和面向封闭领域的传统方法结合

    ★ 4.1.3 属性抽取

    属性抽取的目标是从不同信息源中采集特定实体的属性信息,如针对某个公众人物,可以从网络公开信息中得到其昵称、生日、国籍、教育背景等信息。

    研究历史:

    • 将实体的属性视作实体与属性值之间的一种名词性关系,将属性抽取任务转化为关系抽取任务
    • 基于规则和启发式算法,抽取结构化数据
    • 基于百科类网站的半结构化数据,通过自动抽取生成训练语料,用于训练实体属性标注模型,然后将其应用于对非结构化数据的实体属性抽取
    • 采用数据挖掘的方法直接从文本中挖掘实体属性和属性值之间的关系模式,据此实现对属性名和属性值在文本中的定位。

    4.2 知识融合

    通过信息抽取,我们就从原始的非结构化和半结构化数据中获取到了实体、关系以及实体的属性信息。

    如果我们将接下来的过程比喻成拼图的话,那么这些信息就是拼图碎片,散乱无章,甚至还有从其他拼图里跑来的碎片、本身就是用来干扰我们拼图的错误碎片。
    也就是说:

    • 拼图碎片(信息)之间的关系是扁平化的,缺乏层次性和逻辑性
    • 拼图(知识)中还存在大量冗杂和错误的拼图碎片(信息)

    那么如何解决这一问题,就是在知识融合这一步里我们需要做的了。知识融合包括2部分内容:实体链接、知识合并

    ★ 4.2.1 实体链接

    实体链接(entity linking)是指对于从文本中抽取得到的实体对象,将其链接到知识库中对应的正确实体对象的操作。

    其基本思想是首先根据给定的实体指称项,从知识库中选出一组候选实体对象,然后通过相似度计算将指称项链接到正确的实体对象。

    实体链接的流程:

    • 从文本中通过实体抽取得到实体指称项
    • 进行实体消歧和共指消解,判断知识库中的同名实体与之是否代表不同的含义以及知识库中是否存在其他命名实体与之表示相同的含义
    • 在确认知识库中对应的正确实体对象之后,将该实体指称项链接到知识库中对应实体。

    实体消歧是专门用于解决同名实体产生歧义问题的技术,通过实体消歧,就可以根据当前的语境,准确建立实体链接,实体消歧主要采用聚类法。其实也可以看做基于上下文的分类问题,类似于词性消歧和词义消歧。

    共指消解技术主要用于解决多个指称对应同一实体对象的问题。在一次会话中,多个指称可能指向的是同一实体对象。利用共指消解技术,可以将这些指称项关联(合并)到正确的实体对象,由于该问题在信息检索和自然语言处理等领域具有特殊的重要性,吸引了大量的研究努力。共指消解还有一些其他的名字,比如对象对齐、实体匹配和实体同义。

    ★ 4.2.2 知识合并

    在前面的实体链接中,我们已经将实体链接到知识库中对应的正确实体对象那里去了,但需要注意的是,实体链接链接的是我们从半结构化数据和非结构化数据那里通过信息抽取提取出来的数据。

    那么除了半结构化数据和非结构化数据以外,我们还有个更方便的数据来源——结构化数据,如外部知识库和关系数据库。

    对于这部分结构化数据的处理,就是我们知识合并的内容啦。一般来说知识合并主要分为两种:

    • 合并外部知识库,主要处理数据层和模式层的冲突
    • 合并关系数据库,有RDB2RDF等方法

    4.3 知识加工

    经过刚才那一系列步骤,我们终于走到了知识加工这一步了!

    感觉大家可能已经有点晕眩,那么让我们再来看一下知识图谱的这张架构图。
    640?wx_fmt=png在前面,我们已经通过信息抽取,从原始语料中提取出了实体、关系与属性等知识要素,并且经过知识融合,消除实体指称项与实体对象之间的歧义,得到一系列基本的事实表达。

    然而事实本身并不等于知识。要想最终获得结构化,网络化的知识体系,还需要经历知识加工的过程。

    知识加工主要包括3方面内容:本体构建、知识推理和质量评估。

    ★ 4.3.1 本体构建

    本体(ontology)是指工人的概念集合、概念框架,如“人”、“事”、“物”等。

    本体可以采用人工编辑的方式手动构建(借助本体编辑软件),也可以以数据驱动的自动化方式构建本体。因为人工方式工作量巨大,且很难找到符合要求的专家,因此当前主流的全局本体库产品,都是从一些面向特定领域的现有本体库出发,采用自动构建技术逐步扩展得到的。

    自动化本体构建过程包含三个阶段:

    • 实体并列关系相似度计算
    • 实体上下位关系抽取
    • 本体的生成

    比如对下面这个例子,当知识图谱刚得到“阿里巴巴”、“腾讯”、“手机”这三个实体的时候,可能会认为它们三个之间并没有什么差别,但当它去计算三个实体之间的相似度后,就会发现,阿里巴巴和腾讯之间可能更相似,和手机差别更大一些。
    在这里插入图片描述
    这就是第一步的作用,但这样下来,知识图谱实际上还是没有一个上下层的概念,它还是不知道,阿里巴巴和手机,根本就不隶属于一个类型,无法比较。因此我们在实体上下位关系抽取这一步,就需要去完成这样的工作,从而生成第三步的本体。

    当三步结束后,这个知识图谱可能就会明白,“阿里巴巴和腾讯,其实都是公司这样一个实体下的细分实体。它们和手机并不是一类。”

    ★ 4.3.2 知识推理

    在我们完成了本体构建这一步之后,一个知识图谱的雏形便已经搭建好了。但可能在这个时候,知识图谱之间大多数关系都是残缺的,缺失值非常严重,那么这个时候,我们就可以使用知识推理技术,去完成进一步的知识发现。

    比如在下面这个例子里:

    640?wx_fmt=png
    我们可以发现:如果A是B的配偶,B是C的主席,C坐落于D,那么我们就可以认为,A生活在D这个城市。

    根据这一条规则,我们可以去挖掘一下在图里,是不是还有其他的path满足这个条件,那么我们就可以将AD两个关联起来。除此之外,我们还可以去思考,串联里有一环是B是C的主席,那么B是C的CEO、B是C的COO,是不是也可以作为这个推理策略的一环呢?

    当然知识推理的对象也并不局限于实体间的关系,也可以是实体的属性值,本体的概念层次关系等。

    比如:

    • 推理属性值:已知某实体的生日属性,可以通过推理得到该实体的年龄属性;
    • 推理概念:已知(老虎,科,猫科)和(猫科,目,食肉目)可以推出(老虎,目,食肉目)

    这一块的算法主要可以分为3大类,基于逻辑的推理、基于图的推理和基于深度学习的推理。
    640?wx_fmt=png
    ★ 4.3.3 质量评估

    质量评估也是知识库构建技术的重要组成部分,这一部分存在的意义在于:可以对知识的可信度进行量化,通过舍弃置信度较低的知识来保障知识库的质量。

    好啦,在质量评估之后,你是不是想说,妈耶知识图谱终于构建完毕了。终于可以松一口气了。

    好吧,实不相瞒,知识图谱这个宝宝目前虽然我们构建成功了。

    但是!你家宝宝不吃饭的啊!你家宝宝不学习的啊!

    所以,让我们冷静一下,乖乖进入知识更新这一步……

    4.4 知识更新

    从逻辑上看,知识库的更新包括概念层的更新和数据层的更新。

    概念层的更新是指新增数据后获得了新的概念,需要自动将新的概念添加到知识库的概念层中。

    数据层的更新主要是新增或更新实体、关系、属性值,对数据层进行更新需要考虑数据源的可靠性、数据的一致性(是否存在矛盾或冗杂等问题)等可靠数据源,并选择在各数据源中出现频率高的事实和属性加入知识库。

    知识图谱的内容更新有两种方式:

    • 全面更新:指以更新后的全部数据为输入,从零开始构建知识图谱。这种方法比较简单,但资源消耗大,而且需要耗费大量人力资源进行系统维护
    • 增量更新:以当前新增数据为输入,向现有知识图谱中添加新增知识。这种方式资源消耗小,但目前仍需要大量人工干预(定义规则等),因此实施起来十分困难。

    5、知识图谱的应用

    好了!终于终于!知识图谱的构建方式我们就此结束了!

    为了让大家不立刻弃疗,让我们来看看知识图谱能做到什么,以及目前已经做到了什么~

    • 智能搜索——也是知识图谱最成熟的一个场景,自动给出搜索结果和相关人物

    • 构建人物关系图,查看更多维度的数据

    • 反欺诈:这主要有两部分原因,一个是反欺诈的数据来源多样,结构化和非结构化,二是不少欺诈案件会涉及到复杂的关系网络

    • 不一致性验证(类似交叉验证)——关系推理

    • 异常分析(运算量大,一般离线)
      静态分析:给定一个图形结构和某个时间点,从中去发现一些异常点(比如有异常的子图)
      动态分析:分析其结构随时间变化的趋势。(假设短时间内知识图谱结构的变化不会太大,如果它的变化很大,就说明可能存在异常,需要进一步的关注。会涉及到时序分析技术和图相似性计算技术。)

    • 失联客户管理 挖掘出更多的新联系人,提高催收的成功率。

      ……

    事实上,知识图谱的应用远不止于此。在我看来,这个世界就是一张巨大的知识图谱,是无数个实体关系对,这两年工业界对图数据库、知识图谱的巨大需求也同样反映出了这一点。

    展开全文
  • 目录 Neo4j数据导入5种方式 1、使用Cypher语言创建 1.1 创建节点【create】 1.2 修改节点的属性 1.3创建带属性值的节点 ...2.1构建容器(非必须) 2.2 导入节点csv文件 2.3 创建索引并删除重复节点 2.4 导入关...

    目录

    Neo4j数据导入5种方式

    1、使用Cypher语言创建

    1.1 创建节点【create】

    1.2 修改节点的属性

    1.3 创建带属性值的节点

    1.4 创建节点间的关系

    1.5 其他操作命令

    1.6 cypher查询语言的使用规律

    2、使用load csv导入数据

    2.1 构建容器(非必须)

    2.2 导入节点csv文件

    2.3 创建索引并删除重复节点

    2.4 导入关系csv文件

    3、使用neo4j-admin导入数据

    3.1 数据导入前的准备工作

    3.2 数据预处理

    3.3 数据导入

    3.4 查看知识图谱

    4、总结


    Neo4j数据导入5种方式

    neo4j的数据导入方式有很多,总结起来总共分为以下5种:

    1. Cypher CREATE 语句,为每一条数据写一个CREATE
    2. Cypher LOAD CSV 语句,将数据转成CSV格式,通过LOAD CSV读取数据。
    3. 官方提供的Java API —— Batch Inserter
    4. 大牛编写的 Batch Import 工具
    5. 官方提供的 neo4j-import 工具

    物种方式的优缺点对比:

    1、使用Cypher语言创建

    1.1 创建节点【create】

    第一种方式:  merge(n:洛杉矶湖人)     # 节点不存在,则创建,存在,则忽略。

    第二种方式:  create(n:洛杉矶湖人)     # 不管节点存不存在,创建

    效果就是,洛杉矶湖人这类的节点,一共被创建了两次,因此,查询的时候,会出现两个Node。虽然上面我们创建了两个节点,但是这两个节点除了系统给的唯一id外,没有其他属性,下面我就基于这两个节点,分别对它们进行“update”,赋予节点意义。

    1.2 修改节点的属性

    首先:查询ID等于21798的Node

    match(n) where ID(n) = 21798 return n   
    #  别忘了查询节点,最后要return n返回节点.

    其次:给该Node添加三个属性,分别是label(节点标签名),height(身高),position(场上位置)

    neo4j查询节点用:match   == 相当于关系型数据库的select,相当于非关系数据库mongodb的find

    neo4j修改节点属性用:set == 相当于关系型数据库的update...set...

    match(n) where ID(n) = 21798 set n.label='科比',n.height=198,n.position='得分后卫' return n

    类似sql语句: update n set label = ‘科比’,height=198,position='得分后卫' where id = 21798

    区别:关系型数据库如果字段不存在的话会报错,而NoSql数据库neo4j,如果属性字段不存在的话,就添加

    执行后,效果如下:

    1.3 创建带属性值的节点

    我们使用create创建另一位湖人传奇巨星奥尼尔这个节点,语句如下:

    create(n:洛杉矶湖人{label:'奥尼尔',height:216,position:'中锋'}) return n

    效果如下:

    1.4 创建节点间的关系

    构成一条关系最基本的要素是要有两个对象,放在neo4j图库中就是,两个节点,一条边,才能称作是一个完整的关系。创建统一用create命令,而关系的创建,实际上和创建节点差不多,唯一区别就是,关系是有方向的,而且关系用‘[]’表示,而节点用'()'表示。

    下面我给目前尚存在的两个节点,科比和奥尼尔创建一条关系,关系的name叫“搭档”,这种关系,不区分方向,因此,无所谓谁是startNode,谁是endNode。

    match(n),(b) where n.label='科比' and b.label='奥尼尔'
    create(n)-[r:搭档{since:1996,des:'NBA史上最强OK组合',champion:3}]->(b) 
    return n,r,b

    解释一下:

    1、首先匹配找到节点n和b,也就是科比和奥尼尔代表的节点Node;

    2、然后创建节点n到节点b的关系r,r有三个属性,一个是从哪一年开始since,一个是关系描述des,另一个是合作拿过的冠军数量champion;

    3、最后返回n,r,b 完整节点之间的关系结果,table数据如下,总过三列:
     

    最终,创建的graph图效果如下:

    1.5 其他操作命令

    如果要修改关系的属性,和修改节点的属性一样,修改关系的属性也用set,如修改id等于12513的关系的属性des为“小飞侠&大鲨鱼”的语句如下:

    match(n)-[r]-(b) where ID(r) = 12513 set r.des='小飞侠&大鲨鱼' return n,r,b

    如果要删除节点间的关系,删除统一用命令delete,和删除节点一样,删除关系的语句如下:

    match(n)-[r]-(b) where n.label='科比' and b.label='奥尼尔' delete r return r

    如果要查询科比和奥尼尔之间的关系,则语句如下:

    match(n)-[r]-(b) where n.label='科比' and b.label='奥尼尔' return n,r,b

    如果要创建索引,语法:

    CREATE INDEX ON :<label_name> (<property_name>)

    为节点标签洛杉矶湖人基于属性label创建索引,语句如下:

    create index on:洛杉矶湖人(label)

    删除索引:

    DROP INDEX ON :<label_name> (<property_name>)
    drop index on:洛杉矶湖人(label)

    1.6 cypher查询语言的使用规律

    其实使用cypher语言来查询还是非常简单的,因为不管你查什么,查的无外乎节点、关系、节点间的关系,用表达式表示就是:(n)-[r]-(b),掌握以下规律,你就可以快速掌握如何使用Cypher语言。

    结合表达式:  match(n)-[r] -(b)

          如果查询节点n                            就    return n

          如果查询关系r                             就    return r

          如果查询节点b                            就    return b

          如果查询节点n和b之间的关系r    就    return n,r,b

          如果查询带条件                          就    where n.x = x,r.xx = xx,b.xxx = xxx

          如果修改属性                             就     where.....   set ....

          如果删除属性                             就     where.....   remove .....

          如果删除节点或关系                   就     where.....   delete n 或者 delete r  或者 delete b 或者 delete n , r , b

     

    2、使用load csv导入数据

    2.1 构建容器(非必须)

    docker环境下安装:这里说明下,默认将容器的/data,/var/lib/neo4j/import目录映射到宿主机。/data存储的是数据,/var/lib/neo4j/import存储的是你想要导入数据的

    docker run \
        --publish=7474:7474 --publish=7687:7687 \
        --volume=/data/neo4j/data:/data \
        --volume=/data/neo4j/import:/var/lib/neo4j/import \
        --env=NEO4J_dbms_memory_pagecache_size=2G \
        --env=NEO4J_dbms_memory_heap_max__size=8G \
        --name=neo4j \
        -d neo4j 

    初次进行大批量数据的导入有很多方式,但是每种方式都会有自己的局限性。这里是官网文档

    2.2 导入节点csv文件

    通过cypher-shell命令行直接导入数据。这样的方式,可以不停用neo4j服务,直接导入到库中。

    #load node csv 
    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM "file:/nodes.csv" AS csvLine
    CREATE (c:Contact { mobile:csvLine.mobile, name:csvLine.name, updateTime:csvLine.updateTime, createTime:csvLine.createTime });

    USING PERIODIC COMMIT 1000,是满足1000条之后,提交一个事务,这样能够提高效率。

    2.3 创建索引并删除重复节点

    导入节点之后,我们必然会导入关系。这里就有个坑,如果你在node节点的库里,没有创建index,那么导入关系的时候,将会慢的要死。

    # 创建索引之前,我们插入的节点数据有可能会有重复的情况,我们需要先清除一下重复数据。
    MATCH (n:Contact) 
    WITH n.mobile AS mobile, collect(n) AS nodes 
    WHERE size(nodes) > 1 
    FOREACH (n in tail(nodes) | DETACH DELETE n);
    #创建索引
    CREATE CONSTRAINT ON (c:Contact) ASSERT c.mobile IS UNIQUE;
    CREATE INDEX ON :Contact(mobile);

    2.4 导入关系csv文件

    USING PERIODIC COMMIT 1000
    LOAD CSV WITH HEADERS FROM "file:/rels.csv" AS csvLine
    MATCH (c:Contact {mobile:csvLine.mobile1}),(c1:Contact {mobile:csvLine.mobile2})
    CREATE (c)-[:hasContact]->(c1);

    3、使用neo4j-admin导入数据

    通过neo4j-admin方式导入的话,需要暂停服务,并且需要清除graph.db,这样才能导入进去数据。而且,只能在初始化数据时,导入一次之后,就不能再次导入了。所以这种方式,可以在初次建库的时候,导入大批量数据,等以后如果还需要导入数据时,可以采用上边的方法。

    3.1 数据导入前的准备工作

    对于大规模的数据集,使用语句插入和load csv的时候往往非常缓慢,当需要插入大量三元组时,可以考虑使用Neo4j-import的方式。这种方式有许多注意点

    # 三元组数据导入前的准备工作
    1、传入文件名的时候务必使用绝对路径。
    2、在执行指令之前务必保证Neo4j处于关闭状态,如果不确定可以在Neo4j根目录下运行./bin/neo4j status 查看当前状态。
    3、使用neo4j-admin import指令导入之前先将原数据库从neo4j_home/data/databases/graph.db/中移除。
    4、写CSV文件的时候务必确保所有的节点的CSV文件的ID fileds的值都唯一、不重复。并且确保所有的边的CSV文件的START_ID 和 END_ID都包含在节点CSV文件中。

    3.2 数据预处理

    neo4j-import官方要求的数据格式为csv文件,主要就是分成两个文件entity.csv 和relationship.csv。

    其中entity.csv中包含了实体的id,实体的name,以及标签LABEL,具体格式如下:

    entity:ID,name,:LABEL
    e0,GDP,my_entity
    e1,PHP,my_entity
    e2,李冲,my_entity
    e3,perimenopausal syndrome,my_entity
    e4,雁荡山景区分散,东起羊角洞,西至锯板岭;南起筋竹溪,北至六坪山。,my_entity
    e5,词条(拼音:cí tiáo)也叫词目,是辞书学用语,指收列的词语及其释文。,my_entity
    e6,芦苇茂密,结草为荡,my_entity
    e7,面粉,水,酵母,苏打,my_entity
    e8,先注册先得的原则,my_entity
    e9,解压缩软件,my_entity
    e10,华硕电脑股份有限公司,my_entity

    relationship.csv文件包含了起始节点id,结束节点id,关系的name,以及标签LABEL,具体格式如下:

    :START_ID,:END_ID,name,:TYPE
    e48,e799,属性,属性
    e191,e479,描述,描述
    e641,e5,描述,描述
    e641,e182,标签,标签
    e237,e575,描述,描述
    e237,e237,中文名,中文名
    e237,e533,是否含防腐剂,是否含防腐剂
    e237,e264,主要食用功效,主要食用功效
    e237,e405,适宜人群,适宜人群

    需要将导入的数据转换成这样的两个格式的csv文件,才能够导入Neo4j中。

    3.3 数据导入

    csv数据文件准备好后,可以通过执行以下脚本来实现数据导入:

    #导入命令
    # 停止neo4j服务
    neo4j stop 
    # 如果是Linux可以进入到databases目录下删除数据库,windows直接删除即可
    cd /usr/local/Cellar/neo4j/3.5.0/libexec/data/databases
    rm -rf graph.db
    # 执行数据导入命令neo4j-admin
    neo4j-admin import \
    --database=graph.db
    --nodes:phone="../phone_header.csv,phones.csv \
    --ignore-duplicate-nodes=true \
    --ignore-missing-nodes=true \
    --relationships:call="../call_header.csv,call.csv"
    # 重启neo4j服务
    neo4j start

    出现类似于如下结果,表示导入成功:

    结果显示导入了841个节点(因为1000原数据中的节点有重复的),1002个关系(实际数据条数为1002),1682个属性值。

    3.4 查看知识图谱

    查看结果:导入完成之后,我们可以打开neo4j浏览器查看一下导入后的结果,打开http://localhost:7474/browser/

    知识图谱生成后,重启Neo4j服务:

    neo4j start

    查看整个知识图谱,使用查询命令:

    match(n) return n

    查询实体节点为Google的所有对应的关系:

    match(n:my_entity)-[r]->(b) where n.name='Google' return n,r,b

    至此,neo4j-import导入大量数据就成功了。

    4、总结

    以上介绍了create、load csv、neo4j-admin三种主要的数据导入方式,Batch Inserter和 Batch Import相对用的不多,Batch Inserter是需要在Java中使用,Batch Import可以参考该链接,本文介绍的三种方式基本满足了各种数量级别的数据导入构建知识图谱的要求,总有一款适合你!

     

    展开全文
  • 本篇调用NEO4J接口构建知识图谱,找了很多构建图谱的方法,很少有为本体添加属性,因此,本人写了为本体添加属性以及为两个节点创建关系的方法,下面是一个完整的流程,欢迎评论提问指正。 from neo4j import Graph...
  • 本文主要介绍如何使用Neo4j图形数据库,以及如何通过三元组数据构建知识图谱。重点介绍了目前国内最大的开源中文知识图谱ownthink,如何将ownthink的三元组源数据制作成一个知识图谱供大家使用,希望大家站在巨人的...
  • 本节课程关于如何构建知识图谱,因为知识图谱的构建是整个知识图谱领域的一个非常核心且基础的工程,如何将现有的数据以知识图谱的数据结构建立和存储,是一个学术界和工业界都非常关心的问题。 第一位讲者主要介绍...
  • (二)构建知识图谱 知识图谱构建使用neo4j作为图谱数据库,因数据量庞大(4572万个实体,1.41亿条关系),需使用neo4j-admin import工具导入,导入前需准备节点和关系的文件。 节点数据格式 neo4j节点数据使用以下...
  • 知识图谱构建

    2018-06-13 15:27:26
    This paper presents a cybersecurity knowledge base and deduction rules based on a quintuple model. Using machine learning, we extract entities and build ontology to obtain a cybersecurity knowledge ...
  • 随着3S技术迅猛发展,地理空间数据呈现出爆发式增长趋势,基于地理空间数据构建知识图谱,实现数据到知识的转换成为亟待解决的科学问题。针对通用知识图谱仅以属性和语义关系表示地理空间知识、空间关系缺失等问题,...
  • 向上的全面解析.1)对知识图谱的定义和内涵进行了说明,并给出了构建知识图谱的技术框架,按照输 入的知识素材的抽象程度将其划分为3个层次:信息抽取层、知识融合层和知识加工层;2)分别对对每个 层次涉及的...
  • 文:Sherry来自:夕小瑶的卖萌屋今天给大家带来的是一篇号称可以自动建立知识图谱的文章《Language Models are Open Knowledge Graphs》,文中提出了...
  • 自下而上构建知识图谱全过程

    万次阅读 2020-01-12 16:22:12
    **导读**:知识图谱的构建技术主要有...在本文中,笔者主要想分享一下自底向上构建知识图谱的全过程,抛砖引玉,欢迎大家交流。 “The world is not made of strings , but is made of things.” ——辛格博士,from Go
  • 大话知识图谱–构建知识图谱第一步定义数据模型 https://mp.weixin.qq.com/s/t7F9GDEsn0wmqwZ-eh-Ypg
  • 使用Protege构建知识图谱

    千次阅读 2020-12-28 22:42:17
    使用Protege构建知识图谱一、创建类二、创建类间关系三、创建类的属性四、创建实例1.创建国家实例2.创建武器实例3.创建实例间的关系4.创建实例的属性五、图谱展示 这里我所构建的是关于武器的知识图谱,类分为国家和...
  • 然后从提取的知识中构建知识图谱,使知识具有可查询性。 而从word文档中提取知识过程中的遇到一些挑战主要为以下两个方面: 自然语言处理(NLP)工具无法访问word文档中的文本。word文档需要转换为纯文本文件...
  • 知识图谱——从零开始用neo4j框架对csv文件构建知识图谱(一)——安装neo4j 1.构建三元组关系 三元组为实体——关系——实体 在上文安装好neo4j后,我们需要对以及爬下来的数据进行拆分,原先的数据是,第一列为...
  • 导读:知识图谱的构建技术主要有自顶向下和自底向上两种。其中自顶向下构建是指借助百科类网站等...在本文中,笔者主要想分享一下自底向上构建知识图谱的全过程,抛砖引玉,欢迎大家交流。 “The world is not ma...
  • 阿里妹导读:知识图谱的构建技术主要有自顶向下和自底向上两种。其中自顶向下构建是指借助百科类网站...在本文中,笔者主要想分享一下自底向上构建知识图谱的全过程,抛砖引玉,欢迎大家交流。 “The world is n...
  • 知识图谱构建技术主要有自顶向下和自底向上两种。其中自顶向下构建是指借助百科类网站等结构化数据源,从高质量数据中提取本体和模式信息,加入到知识库里。而自底向上构建,则是借助一定的技术手段,从公开...
  • Neo4j构建知识图谱

    2019-09-10 20:57:35
    知识图谱的一些概念和实战 参考:(https://blog.csdn.net/m0_37565948/article/details/81133041) 教程: 参考:(https://www.w3cschool.cn/neo4j/neo4j_spring_data_example.html)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,726
精华内容 9,490
关键字:

构建知识图谱