专栏首页机器学习AI算法工程农业知识图谱(KG):农业领域的信息检索,命名实体识别,关系抽取,分类树构建,数据挖掘

农业知识图谱(KG):农业领域的信息检索,命名实体识别,关系抽取,分类树构建,数据挖掘

该课题是由上海市农业委员会信息中心主持,以“致富农民、服务市民、提高行政管理效能”为目标,充分发挥大数据在农业农村发展中的重要功能和巨大潜力,重点建设上海市级农业农村大数据中心,促进信息资源的共建共享和创新应用。

代码,以及项目部署详细方法获取:

关注微信公众号 datayx 然后回复 知识图谱即可获取。

项目配置

系统需要安装:

  • scrapy ---爬虫框架
  • django ---web框架
  • neo4j ---图数据库
  • thulac ---分词、词性标注
  • py2neo ---python连接neo4j的工具
  • pyfasttext ---facebook开源的词向量计算框架
  • pinyin ---获取中文首字母小工具
  • 预训练好的词向量模型wiki.zh.bin(仅部署网站的话不需要下载) ---下载链接:http://s3-us-west-1.amazonaws.com/fasttext-vectors/wiki.zh.zip
  • mongoDB ---存储文档数据
  • pymongo ---python操作mongoDB的工具

(以上部分除了neo4j在官网下,wiki.zh.bin在亚马逊s3下载,其它均可直接用pip3 install 安装)

农业实体识别+实体分类

点击实体的超链接,可以跳转到词条页面(词云采用了词向量技术):

实体查询

实体查询部分,我们能够搜索出与某一实体相关的实体,以及它们之间的关系:

关系查询

关系查询即查询三元组关系entity1-[relation]->entity2 , 分为如下几种情况:

  • 指定第一个实体entity1
  • 指定第二个实体entity2
  • 指定第一个实体entity1和关系relation
  • 指定关系relation和第二个实体entity2
  • 指定第一个实体entity1和第二个实体entity2
  • 指定第一个实体entity1和第二个实体entity2以及关系relation

下图所示,是指定关系relation和第二个实体entity2的查询结果

知识的树形结构

农业知识概览部分,我们能够列出某一农业分类下的词条列表,这些概念以树形结构组织在一起:

农业分类的树形图:

训练集标注

我们还制作了训练集的手动标注页面,每次会随机的跳出一个未标注过的词条。链接:http://localhost:8000/tagging-get , 手动标注的结果会追加到/label_data/labels.txt文件末尾:

我们将这部分做成了小工具,可复用:https://github.com/qq547276542/LabelMarker

同样的,我们制作了标注关系提取训练集的工具,如下图所示

如果Statement的标签是对的,点击True按钮;否则选择一个关系,或者输入其它关系。若当前句子无法判断,则点击Change One按钮换一条数据。

说明: Statement是/wikidataSpider/TrainDataBaseOnWiki/finalData中train_data.txt中的数据,我们将它转化成json,导入到mongoDB中。标注好的数据同样存在MongoDB中另一个Collection中。

思路

图谱实体获取:

1.根据19000条农业网词条,按照筛法提取名词(分批进行,每2000条1批,每批维护一个不可重集合)

2.将9批词做交集,生成农业词典

3.将词典中的词在互动百科中进行爬取,抛弃不存在的页面,提取页面内容,存到数据库中

4.根据页面内容,提取每一个词条页面的特征,构造相似度的比较方法,使用KNN进行分类

5.最后获取每个词条的所属类别,同时能够剔除不属于农业的无关词条

命名实体识别:

使用thulac工具进行分词,词性标注,命名实体识别(仅人名,地名,机构名) 为了识别农业领域特定实体,我们需要:

  1. 分词,词性标注,命名实体识别
  2. 以识别为命名实体(person,location,organzation)的,若实体库没有,可以标注出来
  3. 对于非命名实体部分,采用一定的词组合和词性规则,在O(n)时间扫描所有分词,过滤掉不可能为农业实体的部分(例如动词肯定不是农业实体)
  4. 对于剩余词及词组合,匹配知识库中以分好类的实体。如果没有匹配到实体,或者匹配到的实体属于0类(即非实体),则将其过滤掉。
  5. 实体的分类算法见下文。

HudongItem

页面分类

分类器:KNN算法

  • 无需表示成向量,比较相似度即可
  • K值通过网格搜索得到

定义两个页面的相似度sim(p1,p2):

  • title之间的词向量的余弦相似度(利用fasttext计算的词向量能够避免out of vocabulary)
  • 2组openType之间的词向量的余弦相似度的平均值
  • 相同的baseInfoKey的IDF值之和(因为‘中文名’这种属性贡献应该比较小)
  • 相同baseInfoKey下baseInfoValue相同的个数
  • 预测一个页面时,由于KNN要将该页面和训练集中所有页面进行比较,因此每次预测的复杂度是O(n),n为训练集规模。在这个过程中,我们可以统计各个分相似度的IDF值,均值,方差,标准差,然后对4个相似度进行标准化:(x-均值)/方差
  • 上面四个部分的相似度的加权和为最终的两个页面的相似度,权值由向量weight控制,通过10折叠交叉验证+网格搜索得到

Labels:(命名实体的分类)

本文分享自微信公众号 - 机器学习AI算法工程(datayx)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 金融文本信息情感分析(负面及主体判定)

    给定一条金融信息X以及对应的实体集合S, 我们首先要判断该金融信息是否包含负面信息;如果包含负面信息,需要找出负面信息的主体E。

    机器学习AI算法工程
  • 用Bi-GRU+Attention和字向量做端到端的中文关系抽取

    使用CNN或者双向RNN加Attention的深度学习方法被认为是现在关系抽取state of art的解决方案。已有的文献和代码,大都是针对英文语料,使用词向...

    机器学习AI算法工程
  • 支持Python数据分析的完美软件:Enthought Canopy

    Enthought Canopy 带有NumPy、SciPy、matplotlib、Chaco以及IPython,不用再另外安装。 如果你之前安装了其他版本的P...

    机器学习AI算法工程
  • Neo4j·Java对Neo4j的基本操作

    如上图所示,利用“graphDb"创建了以我个人家庭成为原型的三个实体节点“firstNode"、“secondNode"和“thirdNode",并分别...

    陈黎栋
  • 知识图谱思维导图

    前一段时间研究了下知识图谱,根据一些博客和技术分享,整理出思维导图,以供有需求时回顾。

    Bo_hemian
  • 全国知识图谱与语义计算大会 - 实体发现与链接比赛总结

    一 背景 互联网大数据时代中,随着机器语义理解需求的日益增长,知识图谱,即各类实体、概念及其之间的语义关系,日益成为大数据时代知识表示的主要形态之一,并在学术界...

    TEG云端专业号
  • 【NLP】一文了解命名实体识别

    1991年Rau等学者首次提出了命名实体识别任务,但命名实体(named entity,NE)作为一个明确的概念和研究对象,是在1995年11月的第六届MUC...

    黄博的机器学习圈子
  • 数据库1之概念

    (主)码:码有时候也叫做关键字,能够唯一标识实体集中每个实体的属性或者属性集,就称为该实体的码。码可以有多个,可以指定一个为主码(键)。

    DataScience
  • DDD领域驱动设计实战(三)- 理解实体

    传统开发人员总将关注点放在数据,而不是领域。因为在软件开发中,DB占据主导地位。首先考虑的是数据的属性(即数据库的列)和关联关系(外键关联),而不是富有行为的领...

    JavaEdge
  • abp vnext2.0核心组件之DDD组件之实体结构源码解析

    接着abp vnext2.0核心组件之模块加载组件源码解析和abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源...

    郑小超.

扫码关注云+社区

领取腾讯云代金券