文章目录
7.26
关系获取
关系获取技术涉及到的功能如下:
①实体查询:搜索某一实体,得到与之相关的实体及它们之间的关系
②关系查询:查询三元组关系entity1-[relation]->entity2 , 分为如下几种情况:
* 指定第一个实体entity1
* 指定第二个实体entity2
* 指定第一个实体entity1和关系relation
* 指定关系relation和第二个实体entity2
* 指定第一个实体entity1和第二个实体entity2
* 指定第一个实体entity1和第二个实体entity2以及关系relation
③农知问答:输入问题,根据图谱关系得到答案。涉及更多关系,例如城市、气候、植物之间的关系。
接下来分析寻求解决方法。
众所周知,文本语句的结构复杂,人工制定规则几乎不可能实现。因此我们自然而然地想到可以通过训练关系预测模型获得足够多的三元关系数据实现上述功能。
但是进一步思考我们这里定义的需求,即需要实现的功能都是只需要给用户呈现出来实体与实体的关系,而不需要根据实际的文本提取文本中实体的关系。所以我们如果能够通过除关系预测模型的其他方式获得足够多的农业实体关系数据,则不需要训练模型,从而解决了使用有监督学习的方法进行关系提取中人工标注训练样本成本巨大,获得足够多的高质量训练样本的难题。
甚至可以说,根据当前的需求,训练关系预测模型需要达到足够多的训练样本,甚至比直接获取三元关系更为复杂。因为训练样本是需要将三元关系对应到丰富的非结构化语料中。
通过查阅资料得知Wikidata是一个开放的全领域的知识库,其中包含大量的实体以及实体间的关系可以爬取。wikidata实体页面包含实体的描述和与该实体相关联的其它实体及对应的关系。现存许多获取知识图谱中三元组关系的python脚本和已爬取好的数据集,所以只需要爬取或者查找合适的足够丰富的农业三元关系数据集存储到图数据库中,该问题就迎刃而解了。
海报
算法任务所剩不多,自己还是很有艺术细胞的,也比较擅长PS,就也设计了一个初版海报参与投票。没想到得票最高,真的是折煞了,啊哈哈哈。
7.27
关系获取
1知识获取/wikidataSpider
1爬取wikidata上定义的所有关系。
/wikidataCrawler
getRelationList.py将该网页下的汇总的所有关系及其对应的中文名称爬取下来,得到result. Json。
2爬取实体,返回json格式。
/wikientities
getEntities.py以之前处理的predict_labels.txt中的实体为搜索词,在wikidata上搜索返回entity.json,包含实体以及实体所属类别的内容。
3爬取实体和实体间的关系三元组,返回三元组。
/wikidataRelation
getEntityRelation.py利用entity.json中的所有实体为基础,wikidataRelation爬取得到的是实体和实体间的三元关系,得到entityRelation.json。
4处理得到的三元组关系。
/wikidataProcessing
relationDataProcessing.py把从wikidata实体页面中爬取得到的实体不包含在predict_label.txt中的部分存到new_node.csv。
将entityRelation.json处理成CSV,predict_label.txt中实体之间的关系在wikidata_relation.csv中,predict_label.txt中实体和新发现实体间的关系在wikidata_relation2.csv中。
5分析实体关系数据。
/wikidataAnalyse
wikidataAnalyse.py统计wikidata_relation.csv和wikidata_relation2.csv中各种关系的分布情况得到staticResult.txt备用。
extractEntityAttribute.py获取实体属性得到attributes.csv。
6爬取中国各个城市的各种气候,以及所有气候的百科页面。
/weatherData
citydata.py得到城市(市级)列表city_list.txt。
weatherCrawler.py筛选过的气候名称static_weather_list.csv/txt。
weatherCrawler.py气候名称到“有百科页面的气候名称”的映射weather2weather.txt。
weatherPlant.py得到气候和植物的对应关系weather_plant.csv 。
citydata.py城市对应的气候city_weather.csv/txt。
到此知识获取完毕。