图数据库:neo4j, arangodb,
知识表示和表示学习是两个概念
知识链接可以简单的认为是知识融合
知识图谱的应用案例:推荐、搜索、问答、决策
--基于图谱增强的可解释推荐 : 冰箱(一次买,使用周期长);可乐(消耗品)
可解释性推荐,
基于知识图谱,实现自动生成只能创意文案
--基于图谱的智能搜索
搜索对于语言处理的要求越来越高,体现在以下方面:
-语义精确理解:输入的不仅仅是关键词,可能是一句包含逻辑关系的文本
-意图精准理解:“苹果味 唇膏” “唇膏 苹果味”, 都是搜索唇膏,而不是苹果
-跨媒体协同搜索:根据图片定位文字,根据文字定位视频等等
--基于图谱的智能问答
--基于图谱的智能决策
知识图谱为决策支持提供深层关系发现和推理能力。kenshou系统
二、知识的存储和检索
1.neo4j简介和安装
--图数据库:graph database, 是NoSQL数据库,用于存储丰富的关系数据,支持完整的事务
--属性图:顶点(Vertex)、边(Edge)、属性(Property)组成;顶点和边都可以设置属性,顶点也称节点,边也称关系,每个节点和关系都可以由一个或多个属性。
--Neo4j创建的图是用顶点和边构建的一个有向图,其查询语言cypher。
--图形数据库适合查询关系数据
--图形数据库不适合做海量数据统计分析
--Neo4j只访问与遍历相关的节点,不受到总数据集大小的影响。
--安装:
-安装JDK
-下载neo4j的安装包
-保存Desktop Key
-双击安装包
-填写保存的Key,等待安装完成
2.neo4j的基础语法
--创建一个新的DB
--创建一个节点的命令:create(variable:label{key1:value1,key2:value2})
--创建一个电影节点的命令:create(n:film{name:'龙争虎斗',type:‘犯罪’,score:8.9})
--同时创建多个节点:create(:film{name:'龙争虎斗',type:‘犯罪’,score:9.1})
(:film{name:'西游降魔',type:‘科幻’,score:6.9}),
(:film{name:'霸王别姬',type:‘剧情’,score:8.9}),
(:film{name:'盗梦空间',type:‘剧情’,score:9.9}),
(:film{name:'绿里奇迹',type:‘剧情’,score:8.2})
--merge命令会起到去重的功能
--创建关系: match(a:director),(b:film)
where a.name='弗拉德.德拉邦德' and b.name='肖申克的救赎'
create(a)-[r:direct]-->(b)
--查询结果:match(a:director) return a
--删除节点和关系:match(a:actor)
where a.name='马修。麦康纳'
delete a
3.neo4j批量构建节点和关系
--基于csv文件导入的方式批量构建节点
-load csv with headers from 'file:///exchange.csv' as line
create(:exchange{name:linke.name,ch_name:line.ch_name,code:line_code})
--基于csv文件导入的方式批量构建关系
-load csv with headers from 'file:///stock_exchange.csv' as line
match(a:stock{code:line.stock_code}),
(b:exchange{code:line.exchange_code})
create(a)-[r:交易所]-->(b)
4.py2neo的使用
--如何基于py2neo创建节点和关系
import py2neo
from py2neo import Graph
from py2neo import Node
from py2neo import Relationship as rls
from py2neo import NodeMatcher as nmc
test_graph = Graph('http://localhost:7474',user='neo4j',password='123456')
test_node1 = Node("Person",name="Tom")
test_node2 = Node("Person",name="Jerry")
test_node1['age'] = 8
test_node2['age'] = 19
test_node1['sex'] = 'male'
test_node2['sex'] = 'female'
test_graph.create(test_node1)
test_graph.create(test_node2)
fried = rls(test_node1,'friend',test_node2)
test_graph.create(friend)
matcher = nmc(test_graph)
print(matcher.match("Person",name="Jerry").first())
--构建红楼梦人物图谱
import py2neo
from py2neo import Graph,Node,Relationship,NodeMatcher
import pandas as pd
from tqdm import tqdm
g = Graph("http://localhost:7474",user='neo4j',password='123456')
df = pd.read_csv('DreamOfRedChamber.csv')
for i,row in tqdm(df.iterrows()):
start_node = Node('Person',name=row['head'])
g.create(start_node)
end_node = Node('Person',name=row['tail'])
g.create(end_node)
relation = Relationship(start_node,row['label'],end_node)
g.create(relation)
千年以后
查找
g.run("match(n:Person {name:'林黛玉'})-[r:丫鬟]-(k) return r,k")
neo4j案例
朋友圈关系检测
--六度空间理论
-关系数据库不能有效表达和描述用户之间广发而复杂的网络关系
-而图数据库天然适用关系网络结构,构建方便,查询速度快,有非常大的优势
-查找一度关系,查找二度关系,查找某两人之间的最短路径
--欺诈环检测