张 宇 郭文忠 林 森* 文朝武 龙洁花
(1吉林农业大学信息技术学院,吉林长春 130118;2北京农业智能装备技术研究中心,北京 100097)
随着物联网、大数据和人工智能等技术的快速发展,我国农业经历了传统农业、半自动化农业、机械化农业到现在的智慧农业阶段。智慧农业的发展需要将互联网、大数据、云计算和人工智能等现代技术与农业深度融合,从而实现现代信息感知、定量决策、精准灌溉的全新农业生产方式。中国作为农业大国,作物品种丰富。与其他作物相比,草莓适应性强、结果早、成熟早、投资少、见效快,是提高农民经济收入的一种重要农作物[1-8]。2017年我国草莓种植面积达14.13万 hm2,年产量375.30万t[9],草莓产业从业人员达到350万人。目前,国内外的草莓品种较多,关于草莓的信息数据量较大,大量的书籍、论文、报刊、网络文献等资料对草莓均有记载,但仅限于文字,查阅资料和文献需要大量时间,所以将这些知识以简单、高效的方式展示给草莓种植者具有重要意义。
知识图谱(knowledge graph,KG)是以图的形式表现客观世界中的实体(概念、人、事物)及其之间关系的知识库[10-14]。知识图谱通常使用RDF模式来表达数据中的语义,受到了国内外学者的热捧,并已经应用到智能问答、辅助决策和大数据分析等方面[15],是智慧农业发展必不可少的技术之一。
本文借助知识图谱构建技术,采用自顶向下的方式构建草莓种植管理知识图谱。通过图结构方式将草莓种植管理知识高效、准确地提供给种植者,以节约大量查阅资料、阅读书籍时间。
知识图谱并非突然出现的新技术,而是很多技术在发展中相互影响和继承的结果,在20世纪70年代,就有研究者提出了知识图谱的早期理念Semantic Networks[16-17],后来又相继提出本体(Ontology)、Web、The Semantic Web、Linked Data。直到 2012 年,谷歌公司正式推出了知识图谱搜索引擎服务,大大提升了搜索的速度和质量。随后知识图谱在辅助智能问答、自然语言理解、大数据分析、智能决策、人工智能、电商领域、医疗领域以及金融领域等方面展现出了丰富的应用价值。
吴赛赛等[18]提出一种基于深度学习的作物病虫害知识图谱构建方法,将抽取的知识存储到Neo4j图数据库中,能直观反映知识图谱内部结构,实现知识可视化和知识推理。该研究构建的结构化知识图谱可以为作物病虫害智能问答系统、推荐系统、智能搜索等下游应用提供高质量的知识库基础。袁培森等[19]针对水稻表型知识图谱中的实体关系抽取问题提出了一种基于本体论对水稻基因、环境、表型等表型组学实体进行关系分类的方法。试验结果表明,BERT模型的精确率达到了95.10%。刘宝珠等[10]针对RDF图和属性图的不同数据管理、不统一的数据模式和查询语言限制了知识图谱的广泛应用,提出了KGDB(knowledge graph database)是统一模型和语言的知识图谱数据库管理系统。试验结果表明,KGDB平均比gStore和Neo4j节省了30%的存储空间,同时提高了2个数量级的查询速度。杜志强等[20]针对“数据—信息—知识”转化能力的不足,提出了自顶向下和自底向上相结合的自然灾害应急知识图谱构建方法,最后以洪涝灾害应急知识图谱为例验证。结果表明,该方法能够形式化表达概念层关系及要素属性、要素间语义的关系,实现了从多源数据到互联知识的转化。
Zeb等[21]针对KG嵌入模型无法捕获节点附近存在的有用信息,提出了一种新的KG嵌入学习框架。该框架由双加权图卷积网络的编码器和新型全表达张量分解模型的解码器组成,以准确建模三元组。试验结果表明,该框架在最近的标准链路预测数据集上的性能明显增强。Adibelli等[22]提出一种基于图表的知识图谱,将实现各种信息来源之间的迅速集成,主要通过从各种异构来源提取的信息边缘连接它们,从而捕获了各种不同实体之间的关系。Tiwari等[23]提出一种强化学习框架中的远程意识奖励,为不同的职位分配不同的奖励。此方法集成了图自关注(GSA)机制,从相邻实体和关系中捕获更全面的实体信息,结合GSA机制和GRU让模型记住路径。试验结果表明,此模型可以显著降低问题的复杂性,并且为每个关系挖掘更平衡的路径。Kim等[24]提出了一种基于无监督学习的开放信息提取(OpenIE)系统,该系统不需要预先构建数据集,从大量的文本文档中获取知识,并添加到现有的知识图谱中。试验结果表明,Co-BERT模型的掩码预测精度和显式排序得分明显优于原始BERT模型。
目前,尚无针对作物栽培管理的知识图谱,本文从种植者角度出发,提出采用Neo4j构建草莓种植管理知识图谱,旨在为种植者提供一种高效快速查询草莓栽培管理知识的方式。Neo4j数据库是一种以图形式来存储信息的非关系存储数据库。相比于传统的关系型数据库,Neo4j数据库为节点、节点属性、边以及边属性等设计了一种特殊的存储方案,可以有效解决农业特殊性、开放数据共享、农业数据繁杂和农业知识获取等问题。相比传统数据格式,Neo4j数据库信息更加直观,而且使用Cypher语言查询时,不需要复杂的连接运算。Cypher的查询效率不会随着数据的增加而降低。因此,本文将构建一种基于Neo4j的草莓种植管理知识图谱。
本文中知识图谱的构建使用的是Mac 3.5.4版本的Neo4j,电脑为 MacBook Pro,处理器为2.6 GHz六核Intel Core i7,操作系统为macOS Big Sur,验证语言为Cypher语言。
本文利用实体、关系抽取进行知识获取,然后构建知识模式层次,最后依次将实体、属性和关系导入Neo4j图数据库中。构建流程如图1所示,包括知识获取、构建图谱、知识更新及图谱应用等4个步骤。
关于草莓的知识信息数据来源广泛,本文的草莓知识来源于文献[25-27]、专家(北京市农林科学院研究员、中国农业科学院硕士)、网页和书籍等,最终获取了87个草莓品种、5种繁殖方式、6个生育时期以及22种常见病害等信息。第1步,对网页数据进行手动筛选,以及文献和专家所提供的信息进行半自动补充。但是,这些知识都以普通文本的方式表达,难以满足知识图谱构建的结构需求。第2步,基于远程监督方法[28]对筛选和补充的知识进行半自动实体识别和关系抽取。其中,得到实体和关系包括品种、产地、生育期、繁殖方式、描述、特点、一级序果重或亩产量、叶片常见病、常见病造成原因等。第3步,用第2步中的实体与关系构建一个草莓知识结构表。
构建知识图谱首先需要确定其骨架,即知识图谱的数据结构层次。常见的构建方法包括自顶向下和自底向上的构建方法:当涉及领域较为成熟、知识体系完备、涵盖面广时,采用自顶向下构建方法;自底向上是基于数据驱动的构建方法。知识图谱很少与农业领域相结合,所以本文利用的是自顶向下和自底向上相结合的构建方法,如图2所示。从获取的草莓知识数据中抽取出实体、属性及关系,构建模式层。当有草莓知识更新或者培育出新的草莓品种时,采用自底向上的方法更新知识图谱。
构建模式层以草莓为一级实体,以品种、常见病害、生育期、繁殖方式等二级实体作为草莓的属性值,再以丰香、红颜等三级实体作为品种的属性值,以概述、特点等四级实体作为丰香的属性值。实体与属性值之间以“属性是”的关系相连(图3)。
目前,常见的知识存储方式包括基于关系数据库的存储方案[29]、面向RDF的三元组数据库[30]和图数据库等。因为关系数据库是利用知识之间的关系进行存储,所以基于关系数据库的存储方式也是目前主要的一种知识存储方法,包含三元组表[31]、水平表和属性表。RDF被认定为是语义数据关联的标准格式,也是Web上知识图谱的主要数据格式之一。
本文将草莓生产管理知识以RDF三元组的形式呈现给用户,使用户清晰了解每个实体之间的相互关系。
3.3.1 知识的导入方法。目前,Neo4j数据库知识导入方法有3种。第1种是Cypher语言中的CREATE语句。可以随时插入数据更新知识,但当遇到大规模数据时,会偶尔出现数据重复、缺漏、错误等问题。第2种是Cypher语言的Load.csv文件的导入,需要将csv文件放入Neo4j的安装目录import下,可选择本地或者远程导入,而且不支持即时更新。第3种是官方提供的Neo4j-admin import工具,这种方法占用资源少,但是需要脱机导入,且只适用于初始化导入。
本节基于2.1节知识获取方法得到的数据规模及知识的更新状况,选用Cypher语言中的CREATE语句以模块化的构建方式构建草莓种植管理知识图谱,因为模块化Cypher语言中的CREATE语句有很强的灵活性。最后可以通过知识问答查询方式为种植管理者提供有效知识。
3.3.2 模块导入。第1步,构建一级节点草莓;第2步,依据得到的知识数据分别构建二级节点模块,包括品种节点模块、生育期节点模块、繁殖方式节点模块、常见病害节点模块、灌溉节点模块、施肥节点模块、环境控制模块以及常见病害的造成原因和防治方法模块。Neo4j图数据库会为导入的每个节点自动分配一个整数ID,而且ID是随着节点的导入顺序自动递增且唯一。现分别对每个模块的构建进行详细介绍。
(1)品种节点模块。品种节点模块包含若干个三级节点,即不同品种草莓的名字,如丰香、章姬以及红颜等。每个三级节点都包含节点的名字、产地、介绍以及特点等属性。以丰香和红颜节点导入为例,具体的CREATE语句如下:
CREATE(丰香:草莓{name:‘丰香’,nationality:‘日本’,introduce:‘休眠很浅,果实圆锥形,果肉浅红色,硬度中等,鲜红色、果面平整、有光泽,外观艳丽,植株开花早,属早熟品种。果实风味优,香甜适口,糖度高而稳定,可溶性固形物含量11.25%,一级序果平均单果重达 25 g’,feature:‘抗旱、抗寒,果大,适应性强,花期较能抵抗晚霜危害,抗病性极强,不耐长途运输、不抗白粉病、授粉能力差、畸形果多、着色不良、长势弱、繁殖系数低’})
CREATE(红颜:草莓{name:‘章姬’,nationality:‘日本’,introduce:‘红颜又称红颊,是日本静冈县用幸香与章姬杂交育成的早熟栽培品种良种,株态直立,叶片大,新茎分枝多,圆锥形,果面红色、有光泽。果形、果色明显优于丰香,可溶性固形物含量11.8%,一级序果平均单果重26 g,最大单果重50 g以上’,feature:‘植株长势强,易于栽培管理,连续结果能力强,叶绿、花白、果红、味佳,丰产、品质好、果个大,色红、味甜、味浓。硬度大于所有日本品种,根系生长能力和吸收能力强,休眠浅,可抽发4次花序,各花序可连续开花结果,中间无断档,对炭疽病、灰霉病较敏感’})
构建好模块内的节点后,需要建立节点之间的关系。本模块中包括二级节点品种和丰香、章姬等三级节点,所以建立的是上下位关系。同样以丰香和红颜节点为例,具体的构建语句为:
CREATE
(草莓)-[:Include]->(丰香),
(草莓)-[:Include]->(红颜)
构建好品种节点模块后,输入“MATCH n:草莓RETURN n”来查询导入的品种数目是否与知识结构表中的品种数目相同,是否与之匹配。
(2)生育期节点模块。生育期节点模块包含二级节点生育期和萌芽期、营养生长期、现蕾期、旺盛生长期、花芽分化期、休眠期等三级节点。每个三级节点中都有节点的名字和特点2个属性。以旺盛生长期为例,具体的CREATE语句如下:
CREATE(生长旺盛期:生育期{name:‘生长旺盛期’,feature:‘植株开始旺盛营养生长时,腋芽萌发产生大量的匍匐茎,并按一定顺序向上长叶、向下扎根,形成新的幼苗,少数腋芽形成新茎分枝,新茎基部相继发根成苗’})
在导入节点后,下一步与(1)相同,建立节点之间的关系。同样以生长旺盛期为例,具体语句为:
CREATE
(草莓)-[:Include]->(生育期),
(生育期)-[:Include]->(生长旺盛期)
(3)繁殖方式节点模块。繁殖方式节点模块包含二级节点繁殖方式和匍匐茎繁殖、母株分株繁殖、微繁殖、种子繁殖、脱毒组培苗繁殖等三级节点。每个三级节点中都有名字和介绍2个属性。以匍匐茎繁殖为例,具体的CREATE语句如下:
CREATE(匍匐茎繁殖:繁殖方式{name:‘匍匐茎繁殖’,introduce:‘草莓在生长旺盛时期会抽生大量的匍匐茎,在匍匐茎上产生幼苗。利用这些匍匐茎幼苗进行繁殖,称为匍匐茎繁殖。匍匐茎繁殖是在专用苗圃中进行的’,feature:‘繁殖系数高;秧苗质量高;有利于轮作,克服重茬;有利于减少病虫害’})
导入此模块所有三级节点后,下一步也需要构建节点之间的关系。同样以匍匐茎繁殖为例,具体语句为:
CREATE
(草莓)-[:Include]->(繁殖方式),
(繁殖方式)-[:Include]->(匍匐茎繁殖)
(4)常见病害节点模块。常见病害节点模块包含二级节点常见病害和红蜘蛛、白粉病等三级节点。每个三级节点都有名字和发病特点2个属性。以白粉病为例,具体的CREATE语句为:
CREATE(白粉病:常见病害{name:‘白粉病’,发病特点:‘叶背面出现白色菌丝体;叶片向上卷曲呈汤匙状;叶背面出现白色粉状物;暗色污斑;多个病斑连接成片;病斑布满叶片,叶缘萎缩,焦枯;花蕾不能开放;花瓣呈粉红色;幼果不能正常膨大,干枯;果实有大量白粉,失去商品价值’})
导入此模块所有三级节点后,下一步也需构建节点之间的关系。同样以白粉病为例,具体语句为:
CREATE
(草莓)-[:Include]->(常见病害),
(常见病害)-[:Include]->(白粉病)
(5)常见病害的造成原因节点模块。常见病害的造成原因节点模块包含二级节点造成因素和因素1、2等三级节点。以因素1为例,具体的CREATE语句为:
CREATE(因素 1:造成因素{name:‘因素 1’,概述:‘土壤水分含量过低;土壤次生盐渍化导致生理性缺水;根系发育不良’})
导入此模块所有三级节点后,下一步也需构建节点之间的关系。同样以因素1为例,具体语句为:
CREATE
(造成因素)-[:Cause]->(常见病害),
(造成因素)-[:Include]->(因素 1)
(6)常见病害的防治方法节点模块。此模块包含二级节点解决办法和方法1、2等三级节点。以方法1和方法2为例,具体的CREATE语句为:
CREATE(方法 1:解决方法 {name:‘方法 1’,概述:‘合理水分管理;增施有机肥,改良土壤结构;农用灌水,淋洗土壤;合理轮作,生物除盐;正确使用遮阳网;化学药剂防治’})
CREATE(方法 2:解决方法{name:‘方法 2’,概述:‘农业防治:选择抗病品种;合理肥水管理;合理密植;加强日常管理。物理防治:调节棚室内温、湿度;增加透光性。化学防治:药剂熏蒸;合理喷施化学杀菌剂’})
其中,为了方便构建节点之间的关系,将解决方法与常见病害按列表一一对应。同样以方法1和方法2为例,具体语句为:
CREATE
(解决方法)-[:Way]->(常见病害),
(解决方法)-[:Include]->(方法 1),
(解决方法)-[:Include]->(方法 2)
(7)灌溉节点模块。此节点包括二级节点灌溉和萌芽期灌溉、营养生长期灌溉等三级节点。以营养生长期灌溉为例,具体的CREATE语句为:
CREATE(营养生长期灌溉:灌溉{name:‘营养生长期灌溉’,概述:‘营养生长及后面时间宜每天早上在日出时灌溉1次,之后辐射量每积累600 J/cm2,补充灌溉基准灌溉量的20%。根据天气状况和植株吐水状况进行调整。进行植株管理后的第2天,营养生长期以叶片是否吐水作为调整灌溉的依据,果期可以适当控水,不能完全以吐水为指标,基质排液不要超过最大溢流量’})
导入此模块的节点之后,下一步也需要构建节点之间的关系,而此模块的三级节点与生育期模块的三级节点一一对应。同样以营养生长期灌溉为例,具体的语句为:
CREATE
(草莓)-[:Include]->(灌溉),
(灌溉)-[:Include]->(营养生长期灌溉),
(营养生长期)-[:灌溉]->(营养生长期灌溉)
(8)施肥节点模块。此节点包括二级节点施肥和萌芽期施肥、营养生长期施肥等三级节点。以营养生长期施肥为例,具体的CREATE语句为:
CREATE(营养生长期施肥:施肥{name:‘营养生长期施肥’,概述:‘草莓营养生长时期,需要补充三大营养元素(氮、磷、钾)、中微量元素和生根、养根、护根类产品,促进花芽分化。开花前10 d冲施植倍健高磷型水溶肥,以达到促进花芽分化的目的。此阶段要补充硼、钙等中微量元素防止缺素症的发生,配合施用氨基酸叶面肥以补充叶面营养’})
导入此模块的节点之后,下一步也需要构建节点之间的关系,而此模块的三级节点与生育期模块的三级节点一一对应。同样以营养生长期施肥为例,具体的语句为:
CREATE
(草莓)-[:Include]->(施肥),
(施肥)-[:Include]->(营养生长期施肥),
(营养生长期)-[:施肥]->(营养生长期施肥)
(9)环境控制模块。此节点包括二级节点环境控制和温度环境控制、光照环境控制等三级节点。以温度环境控制为例,具体的CREATE语句为:
CREATE(温度环境控制:环境控制{name:‘温度环境控制’,概述:‘草莓根系生长温度5~30℃,适温15~22℃,茎叶生长适温为20~30℃,芽在-15~10℃发生冻害,花芽分化期温度须保持5~15℃,开花结果期4~40℃。草莓越夏时,气温高于30℃并且日照强时,需采取遮阴措施’})
导入此模块的节点之后,下一步也需要构建节点之间的关系。同样以温度环境控制为例,具体的语句为:
CREATE
(草莓)-[:Include]->(环境控制),
(环境控制)-[:Tempreture]->(温度环境控制)
由以上模块构建后相结合组成初步构建好的草莓种植管理知识图谱,如图4所示。
构建草莓种植管理知识图谱的目的是让更多学者方便、快速了解草莓知识,但是本知识图谱的内容可能无法包含所有的草莓品种以及与草莓相关的知识,而且随着科技发展,会出现越来越多的草莓品种。本文所选用的知识导入方法的最大好处就是可以随时更新知识,可以实现更新的知识第一时间出现在知识图谱中。
本文构建的知识图谱中删减、更新内容是利用从底到端的方式进行的,一步一步逐层进行,防止删除正确的知识或者导入更新知识导致关系构建错误。
3.5.1 Cypher语言查询验证。完成草莓知识图谱构建后,利用Cypher语言对知识图谱进行验证。因为本文是关于草莓的知识图谱,所以主要是草莓知识的查询应用,下面举例介绍。
查询草莓品种的名字以及哪些品种产地为中国:
MATCH(n:草莓)
RETURN n.name
CASE n.nationality
WHEN′中国′
THEN 1
ELSE 2 END AS result
上述语句为查询图谱中所有草莓的品种名字,并且标记出产地为中国的草莓,标记为1,其他产地的标记为2。查询结果如图5所示。查询时间仅需32 ms,即可得到准确的草莓产地信息。其中,图中若result=1,说明第一行草莓的产地是中国;如果result=2,说明第一行草莓的产地为其他国家。
查询草莓白粉病以及白粉病的防治方法:
match(p:常见病害{name:"白粉病"})return p 或者 match(p:常见病害)where p1.name="白粉病" return p1;
match(p1)-[:WAY]->(缺锌症:常见病害{name:‘缺锌症’})return p1.概述
查询结果如图6所示,查询时间仅需22 ms,要比其他查询方法节省很多时间。
查询营养生长期的特点:
match(p:生育期{name:"营养生长期"})return p.feature 或者 match(p:生育期)where p1.name="营养生长期" return p1.feature
查询结果如图7所示,查询时间仅需21 ms。
通过上述的一些举例,本文构建的知识图谱可以利用Cypher语言查询到使用者需要的草莓知识,查询效率高于网络查询和书籍查阅,而且想要查询的内容消息都是最新更新的,准确率也较高。
3.5.2 对比验证。本节针对不同使用人群通过使用不同查询途径做了试验对比。具体使用人群为种植农户、农学学者以及普通用户,本文从中各选择了2位;传统查询途径包括文献、书籍以及网络;测评标准包括时间、准确率以及全面性。其中,时间定义为用户使用不同方法查询到结果的使用时间;准确度定义为由草莓种植专家对每个用户查询得到的知识进行的准确性评价;全面性定义为某个查询方法的知识库的内容是否全面,知识是否能满足使用人群的需要。现以草莓常见病害的查询为例,将传统查询方法与基于Neo4j知识图谱查询方法对比,结果见表1。
在调查过程中发现,不同使用人群的查询习惯不同。比如,种植用户通过网络去查询或询问有经验的种植者;而农学学者通过知识图谱查询方式进行文献和书籍查询;普通用户使用网络和文献相结合的方法查询。
从表1可以看出,在查询时间上,基于Neo4j知识图谱查询方式占据了绝对的优势;在准确率上,种植农户和农学学者传统查询方式准确率要高于知识图谱查询方式,但是知识图谱查询方式的平均准确率要高于传统查询方式;从全面性来看,知识图谱查询方式处于劣势,因为Neo4j知识库初步构建,需要经过不断完善。从总体考虑,Neo4j可以作为一个新型的知识库逐渐代替传统的知识库。
表1 草莓常见病害不同查询方式对比
本文在构建知识图谱过程中,遇到了一些不可避免的问题。一是在构建知识图谱时,利用csv文件将草莓知识进行分类,用loadcsv方式将csv文件导入Neo4j中,但发现如何对知识结构进行整理是一大难题,因为一级、二级、三级节点以及它们的属性各自交叉,因而对草莓知识的整理不是那么理想。二是采用CREATE语句构建时,发现语句颇为繁琐,而且当导入大量语句时,会出现导入速度缓慢问题。
本研究提出了一种基于Neo4j的草莓知识图谱,该方法根据草莓知识的特征,在实体的基础上对半结构化和非结构化知识进行半自动抽取,并利用CREATE语句将知识图谱存储于Neo4j图数据库中,实现实体交互关系的可视化展示和研究应用。该知识图谱在农业智能问答、草莓栽培决策和草莓栽培数据分析等方面得到应用。
本文采用的是自顶而下与由下而上相结合的模块化构建方式,完成了知识的导入和关系的构建,确定了清晰的逻辑层次,弥补了CREATE语句导入大数据速度慢的缺点,精准度较高。模块化不仅提高了导入效率,还解决了速度缓慢的问题。
本文初步构建了草莓种植管理知识图谱,但仍然有着很大的改进空间,未来可以在导入方式、知识抽取、自动更新甚至自动推理新品种等方面进行研究。随着网络数据不断更新,需要对知识图谱知识进行及时更新和补充,通过知识融合、知识推理等技术,实现知识图谱的自动更新。