项目实训第四周第一次记录


7.19

配置环境

1创建环境

conda create -n kg python=3.7

2安装所需包

neo4j图数据库

thulac分词、词性标注

py2neo python连接neo4j的工具

fasttext  facebook开源的词向量计算框架

预训练好的词向量模型wiki.zh.bin

……

3配置neo4j

1下载neo4j安装文件,解压

2配置系统环境变量

3验证成功


构建知识图谱问题分析

知识图谱是大规模的语义网络(semantic network ),由概念实体和语义关系构成。农业知识图谱融合农业地域性,季节性,多样性等特征,利用农业领域的实体概念与关系,挖掘农业潜在价值。

暂定需求包括:

1农业实体识别:自动识别出非结构化文本中的农业实体及其农业类型

2农业实体百科:展示实体的基本信息,相关概念(词云),农业类型(树)等

3农业知识概览:采用农业百科的形式进行罗列,将农业实体类别组织成树形结构

4实体查询:输入实体,查询与其直连的实体与关系信息

5关系查询:输入实体或者关系,查询与其直连的实体信息

6农知问答:输入问题,根据图谱关系得到答案。

其中1关键技术在于实体识别,23关键算法为dfs,2关键技术为词向量技术,456关键技术在于关系获取

需要使用的工具如下:

Keras——深度学习框架

采用Keras深度学习框架,主要考虑其:

简易和快速的原型设计

高度模块化,极简,和可扩充特性

支持CNN和RNN,或二者的结合

Neo4j——大规模图存储

对于大规模的结点和边的存储和运算,传统关系型数据库(例如mysql)往往效率低下;而Neo4j则很好的支持高效的图运算。

查询某个实体的某个关系,mysql需要对关系表全表扫描。

此外,传统的图运算都是在内存中进行的,然而内存容量较小,往往无法加载整个知识图谱;因此采用Neo4j,服务器就能够在磁盘中进行图运算。

Neo4j使用的查询语言为Cypher,Cypher是一个描述性的图形查询语言,语法简单,功能强大。


7.20

实体识别

现实世界中存在大量的半结构化和非结构化数据。构建农业知识图谱的关键是如何获取农业领域的知识。实体识别是从半结构化数据或非结构化数据中获取知识的重要方法。

实体识别主要有以下问题需要好好思考:

1实体类型数量多,不断有新的实体出现。

2实体构成结构复杂,实体词长度没有一定的限制。

3在不同领域场景下,命名实体的外延有差异,比如:水果苹果和苹果公司

经过思考,将实体识别细化为以下步骤:

1在农业词条中提取名词后爬取其相应的解释存入数据库hudong_pedia.csvhudong_pedia2.csv

2确定所有命名实体的label存为predict_labels.txt备用。

3页面逻辑层demo使用提前加载好的thulac进行分词index_ERform_view.py

4调用NER.py返回不同值实现实体识别。

1数据处理 构建农业词典/data processing

1爬取到的18000多条农业词条存到agri_economic.json

2 使用thulac分词和词性标注,提取名词,最终生成了9个table.txt

每2000条1批,每批维护一个不可重集合。

# 给定分词结果,提取NER
def createWordSet(x):
   i = 0
   n = len(x)
   S = set()
   while i < n:
      if judge(x[i][0]) == False :
         i += 1
         continue;
      if x[i][1] == 'n':   # n 
         S.add(x[i][0])
         if i >= 1 and judge(x[i-1][0]) and preok(x[i-1][1]):   # all+n
            S.add(x[i-1][0]+x[i][0])
      if nowok(x[i][1]):  #other
         S.add(x[i][0])
         
      i += 1
      
   return S

def createTable(num):
   start = time.time()
   thu = thulac.thulac()
   file = open('agri_economic.json', encoding='utf-8')
   print("begin!")
   table = set()
   f = json.load(file)
   count = 0
   file_text = ""
   for p in f:
      count += 1
      if int(count/2000) != num:
         continue
      if count % 10 == 0:
         cur = time.time()
         print("now id : " + str(count) + "  table size :" + str(len(table)))
         print("Running Time : " + str(int(cur-start)) + " s......")
      detail = p['detail']
#     if len(detail) > 600:
#        detail = detail[0:600]
      title = p['title']
      table.add(title)
      # 分词
      text = thu.cut(detail)
      table = table | createWordSet(text)

   for t in table:
      file_text += t+' '
   file_object = open('table'+str(num)+".txt",'w')
   file_object.write(file_text)
   file_object.close()

3使用set去重合并生成农业词典data/merge_table.txt

def merge():
   s = set()
   for i in range(10):
      filename = 'table'+str(i)+".txt"
      file_object = open('table'+str(i)+".txt",'r').read()
      table = file_object.split()
      for c in table:
         s.add(c)
   print(len(s))
   file_object = open("merge_table3.txt",'w')
   file_text = ""
   for i in s:
      file_text += i + " "
   file_object.write(file_text)
   file_object.close()

4将词典中的词在快懂百科爬取数据,提取有效的页面内容,存到hudong_pedia.csv

导入到数据库neo4j。

// 将hudong_pedia.csv 导入
LOAD CSV WITH HEADERS  FROM "file:///hudong_pedia.csv" AS line  
CREATE (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.csv
LOAD CSV WITH HEADERS  FROM "file:///hudong_pedia2.csv" AS line  
CREATE (p:HudongItem{title:line.title,image:line.image,detail:line.detail,url:line.url,openTypeList:line.openTypeList,baseInfoKeyList:line.baseInfoKeyList,baseInfoValueList:line.baseInfoValueList})  

// 对titile属性添加UNIQUE(唯一约束/索引)
// 创建索引
CREATE CONSTRAINT ON (c:HudongItem)
ASSERT c.title IS UNIQUE

5编写create_word2vec_input.py将有效页面内容的detail生成单词序列作为word2vec的输入备用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值