确保安装好python3和Neo4j(任意版本)
安装一系列pip依赖:cd至项目根目录,运行sudopip3install-rrequirement.txt
1.导入数据:
将hudong_pedia.csv导入neo4j:开启neo4j,进入neo4j控制台。将hudong_pedia.csv放入neo4j安装目录下的/import目录。在控制台依次输入:
//将hudong_pedia.csv导入LOADCSVWITHHEADERSFROM"file:///hudong_pedia.csv"ASlineCREATE(p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})//新增了hudong_pedia2.csvLOADCSVWITHHEADERSFROM"file:///hudong_pedia2.csv"ASlineCREATE(p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})代码语言:txt复制//创建索引CREATECONSTRAINTON(c:HudongItem)ASSERTc.titleISUNIQUE以上两步的意思是,将hudong_pedia.csv导入neo4j作为结点,然后对titile属性添加UNIQUE(唯一约束/索引)
(如果导入的时候出现neo4jjvm内存溢出,可以在导入前,先把neo4j下的conf/neo4j.conf中的dbms.memory.heap.initial_size和dbms.memory.heap.max_size调大点。导入完成后再把值改回去)
进入/wikidataSpider/wikidataProcessing中,将new_node.csv,wikidata_relation.csv,wikidata_relation2.csv三个文件放入neo4j的import文件夹中(运行relationDataProcessing.py可以得到这3个文件),然后分别运行
将attributes.csv放到neo4j的import目录下,然后执行
LOADCSVWITHHEADERSFROM"file:///attributes.csv"ASlineMATCH(entity1:HudongItem{title:line.Entity}),(entity2:HudongItem{title:line.Attribute})CREATE(entity1)-[:RELATION{type:line.AttributeName}]->(entity2);LOADCSVWITHHEADERSFROM"file:///attributes.csv"ASlineMATCH(entity1:HudongItem{title:line.Entity}),(entity2:NewNode{title:line.Attribute})CREATE(entity1)-[:RELATION{type:line.AttributeName}]->(entity2);LOADCSVWITHHEADERSFROM"file:///attributes.csv"ASlineMATCH(entity1:NewNode{title:line.Entity}),(entity2:NewNode{title:line.Attribute})CREATE(entity1)-[:RELATION{type:line.AttributeName}]->(entity2);LOADCSVWITHHEADERSFROM"file:///attributes.csv"ASlineMATCH(entity1:NewNode{title:line.Entity}),(entity2:HudongItem{title:line.Attribute})CREATE(entity1)-[:RELATION{type:line.AttributeName}]->(entity2)//我们建索引的时候带了label,因此只有使用label时才会使用索引,这里我们的实体有两个label,所以一共做2*2=4次。当然,可以建立全局索引,即对于不同的label使用同一个索引导入气候名称:
将wikidataSpider/weatherData/static_weather_list.csv放在指定的位置(import文件夹下)
//导入节点LOADCSVWITHHEADERSFROM"file:///static_weather_list.csv"ASlineMERGE(:Weather{title:line.title})//添加索引CREATECONSTRAINTON(c:Weather)ASSERTc.titleISUNIQUE导入气候与植物的关系
将wikidataSpider/weatherData/weather_plant.csv放在指定的位置(import文件夹下)//导入hudongItem和新加入节点之间的关系LOADCSVWITHHEADERSFROM"file:///weather_plant.csv"ASlineMATCH(entity1:Weather{title:line.Weather}),(entity2:HudongItem{title:line.Plant})CREATE(entity1)-[:Weather2Plant{type:line.relation}]->(entity2)导入城市的气候将city_weather.csv放在指定的位置(import文件夹下)(这步大约需要15分钟左右)//导入城市对应的气候LOADCSVWITHHEADERSFROM"file:///city_weather.csv"ASlineMATCH(city{title:line.city}),(weather{title:line.weather})CREATE(city)-[:CityWeather{type:line.relation}]->(weather)以上步骤是导入爬取到的关系
2.下载词向量模型:(如果只是为了运行项目,步骤2可以不做,预测结果已经离线处理好了)
3.修改Neo4j用户
进入demo/Model/neo_models.py,修改第9行的neo4j账号密码,改成你自己的
4.启动服务
进入demo目录,然后运行脚本:
sudoshdjango_server_start.sh这样就成功的启动了django。我们进入8000端口主页面,输入文本,即可看到以下命名实体和分词的结果(确保django和neo4j都处于开启状态)
点击实体的超链接,可以跳转到词条页面(词云采用了词向量技术):
关系查询即查询三元组关系entity1-relation->entity2,分为如下几种情况:
下图所示,是指定关系relation和第二个实体entity2的查询结果
农业知识概览部分,我们能够列出某一农业分类下的词条列表,这些概念以树形结构组织在一起:
农业分类的树形图:
(update2018.04.07)同样的,我们制作了标注关系提取训练集的工具,如下图所示
如果Statement的标签是对的,点击True按钮;否则选择一个关系,或者输入其它关系。若当前句子无法判断,则点击ChangeOne按钮换一条数据。
我们在MongoDB中使用两个Collections,一个是train_data,即未经人工标注的数据;另一个是test_data,即人工标注好的数据。
使用方法:启动neo4j,mongodb之后,进入demo目录,启动django服务,进入127.0.0.1:8000/tagging即可使用
使用thulac工具进行分词,词性标注,命名实体识别(仅人名,地名,机构名)
为了识别农业领域特定实体,我们需要:
-title之间的词向量的余弦相似度(利用fasttext计算的词向量能够避免outofvocabulary)-2组openType之间的词向量的余弦相似度的平均值-相同的baseInfoKey的IDF值之和(因为‘中文名’这种属性贡献应该比较小)-相同baseInfoKey下baseInfoValue相同的个数-预测一个页面时,由于KNN要将该页面和训练集中所有页面进行比较,因此每次预测的复杂度是O(n),n为训练集规模。在这个过程中,我们可以统计各个分相似度的IDF值,均值,方差,标准差,然后对4个相似度进行标准化:**(x-均值)/方差**-上面四个部分的相似度的加权和为最终的两个页面的相似度,权值由向量weight控制,通过10折叠交叉验证+网格搜索得到3.2Labels:(命名实体的分类)Label
NETags
Example
0
Invalid(不合法)
“色调”,“文化”,“景观”,“条件”,“A”,“234年”(不是具体的实体,或一些脏数据)
1
Person(人物,职位)
“袁隆平”,“副市长”
2
Location(地点,区域)
“福建省”,“三明市”,“大明湖”
3
Organization(机构,会议)
“华东师范大学”,“上海市农业委员会”
4
Politicaleconomy(政治经济名词)
“惠农补贴”,“基本建设投资”
5
Animal(动物学名词,包括畜牧类,爬行类,鸟类,鱼类,等)
“绵羊”,“淡水鱼”,“麻雀”
6
Plant(植物学名词,包括水果,蔬菜,谷物,草药,菌类,植物器官,其他植物)
“苹果”,“小麦”,“生菜”
7
Chemicals(化学名词,包括肥料,农药,杀菌剂,其它化学品,术语等)
“氮”,“氮肥”,“硝酸盐”,“吸湿剂”
8
Climate(气候,季节)
“夏天”,“干旱”
9
Fooditems(动植物产品)
“奶酪”,“牛奶”,“羊毛”,“面粉”
10
Diseases(动植物疾病)
“褐腐病”,“晚疫病”
11
NaturalDisaster(自然灾害)
“地震”,“洪水”,“饥荒”
12
Nutrients(营养素,包括脂肪,矿物质,维生素,碳水化合物等)
“维生素A”,"钙"
13
“染色体”,“血红蛋白”,“肾脏”,“大肠杆菌”
14
Agriculturalimplements(农机具,一般指机械或物理设施)
“收割机”,“渔网”
15
“延后栽培",“卫生防疫”,“扦插”
16
other(除上面类别之外的其它名词实体,可以与农业无关但必须是实体)
“加速度",“cpu”,“计算机”,“爱鸟周”,“人民币”,“《本草纲目》”,“花岗岩”
使用远程监督方法构建数据集,利用tensorflow训练PCNN模型
农业知识图谱关系抽取
处理数据集,得到关系抽取需要用到的json文件
步骤:
得到的rel2id.json,word2vec.json,entity2id.json,train_dataset.json和test_dataset.json为关系提取算法所需的数据,将其放在algorithm的data/agriculture目录下