当前位置:   article > 正文

学习并复刻《基于知识图谱的农医对话系统》(二)

学习并复刻《基于知识图谱的农医对话系统》(二)

六、搭建基于知识图谱的农医对话系统

1.收集数据

1. 制定数据收集标准

     尽可能多的收集水稻疾病的相关知识,需包含水稻病名称及症状等。收集的非结构化数据可参照以下格式进行保存:

     以“水稻赤枯病”为例:

     新建名称为“水稻赤枯病.txt”的文件,并将“水稻赤枯病” 的症状描述语句添加到该文件中。

  1. 水稻赤枯病的发生内因是稻株体内钾含量不足,营养比例失调,秧苗素质差。发病植株外部的典型症状是:叶片上产生大小不等的赤褐色铁锈状斑点,严重时聚合成斑块或条状。
  2. 斑点最先从下部老叶尖端产生,然后向下逐渐变赤褐色,最后全叶枯死;由下部老叶逐渐向上部叶片蔓延,严重者全株只有少数新叶保持绿色,远望似火烧状。
  3. 由缺素引起的缺钾型和缺磷型是生理性的。
  4. 中毒型赤枯主要发生在长期浸水。

        以“水稻稻曲病”为例:

        新建名称为“水稻稻曲病.txt”的文件,并将“水稻稻曲病” 的症状描述语句添加到该文件中:

该病只发生于水稻穗部,为害部分谷粒。受害谷粒内形成菌丝块渐膨大,内外颖裂开,露出淡黄色块状物,即孢子座,后包于内外颖两侧,呈黑绿色,初外包一层薄膜,后破裂,散生墨绿色粉末,即病菌的厚垣孢子,有的两侧生黑色扁平菌核,风吹雨打易脱落。
2.  收集水稻疾病数据

       可通过百科、农业类网站、水稻疾病文献等途径收集数据。

2.UIE模型介绍

UIE模型是目前比较常用的通用信息抽取统一框架,在命名实体识别任务中也有比较好的表现。

在本任务中,首先对UIE模型进行一定的了解,为后续从非结构化水稻疾病实体中抽取”实体“做好准备。

知识点:Paddlepaddle框架和Paddlenlp库的安装、UIE模型零样本抽取实体词、UIE模型的定制训练

重    点:UIE模型零样本抽取实体词、UIE模型的定制训练

难    点:UIE模型零样本抽取实体词、UIE模型的定制训练

内    容:1. 准备工作

                 (1)安装Paddlepaddle框架

                 (2)安装Paddlenlp

                 (3)新建目录

                 (4)配置python环境

                 (5)新建代码文件

               2. 模型简介

               3. 应用示例

               4. 开箱即用:直接使用UIE模型进行零样本(zero-shot)抽取

               5. 训练定制

                   (1)下载UIE源代码

                   (2) 选取数据标注工具

 

 

任务实现

1. 准备工作

     (1)安装Paddlepaddle框架

     点击桌面上的“LXTerminal”图标打开终端,如下图所示:

     在终端执行以下命令安装Paddlepaddle:

pip install paddlepaddle==2.3.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

     安装过程如下图所示:

     (2)安装Paddlenlp

     执行以下命令安装Paddlenlp:

python -m pip install paddlenlp==2.4.4 -i https://pypi.tuna.tsinghua.edu.cn/simple

     安装过程如下图所示:

     (3)新建目录

  • 在桌面上创建一个目录,命名为“Ai_Farmer_Doctor”,本项目所有的数据集和代码都放在该目录下。
  • 在“Ai_Farmer_Doctor”根目录下,新建”test“子目录。

     (4)打开Pycharm,配置环境

     点击桌面上的”Pycharm“图标,打开Pycharm软件,并点击“Open”,打开项目“Ai_Farmer_Doctor”。

     找到/root/Desktop/Ai_Farmer_Doctor目录,点击“ok”。

     在弹出的对话框中,选择"Trust Project":

     打开“Ai_Farmer_Doctor”后,依次点击“File”->“Settings……”,配置python解释器:

     配置python解释器的具体步骤如下:

  • step1:点击”Python interpreter“;
  • step2:点击”Add Interpreter“->"Add Local Interpreter…";
  • step3:在弹出的对话框中,配置”System Interpreter“;
  • step4:点击右侧框中的”…“符号;
  • step5:在”Select Python Interpreter“对话框中选择/root/anaconda3/bin/目录下的python解释器;
  • step6:点击”Select Python Interpreter“对话框中的”OK“按钮;
  • step7:点击”System Interpreter“页面的”OK“按钮;
  • step8:点击”Python interpreter“页面的”OK“按钮,即可完成python解释器的配置。

     (5)  创建代码文件

     在“test”目录下,新建代码文件“for_uie.py”,具体步骤如下:

     将鼠标放在“test”目录上,单击右键,并依次选择“New”->"Python File",在弹出的对话框中,填写文件名称“for_uie”,并按回车键,即可完成python文件的创建。

2. 模型简介

     UIE(Universal Information Extraction):Yaojie Lu等人在ACL-2022中提出了通用信息抽取统一框架UIE。该框架实现了实体抽取、关系抽取、事件抽取、情感分析等任务的统一建模,并使得不同任务间具备良好的迁移和泛化能力。为了方便大家使用UIE的强大能力,PaddleNLP借鉴该论文的方法,基于ERNIE 3.0知识增强预训练模型,训练并开源了首个中文通用信息抽取模型UIE。该模型可以支持不限定行业领域和抽取目标的关键信息抽取,实现零样本快速冷启动,并具备优秀的小样本微调能力,快速适配特定的抽取目标。

参考以下链接了解并体验UIE模型:

     UIE模型介绍:https://gitcode.net/mirrors/paddlepaddle/paddlenlp/-/blob/release/2.4/model_zoo/uie/README.md

     论文:https://arxiv.org/pdf/2203.12277.pdf

     UIE的优势

  • 使用简单:用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。实现开箱即用,并满足各类信息抽取需求
  • 降本增效:以往的信息抽取技术需要大量标注数据才能保证信息抽取的效果,为了提高开发过程中的开发效率,减少不必要的重复工作时间,开放域信息抽取可以实现零样本(zero-shot)或者少样本(few-shot)抽取,大幅度降低标注数据依赖,在降低成本的同时,还提升了效果
  • 效果领先:开放域信息抽取在多种场景,多种任务上,均有不俗的表现
3. 应用示例

     UIE不限定行业领域和抽取目标,以下是一些零样本行业示例:

  • 医疗场景-专病结构化

  • 法律场景-判决书抽取

  • 金融场景-收入证明、招股书抽取

  • 公安场景-事故报告抽取

  • 旅游场景-宣传册、手册抽取

4. 开箱即用

     paddlenlp.Taskflow提供通用信息抽取、评价观点抽取等能力,可抽取多种类型的信息,包括但不限于命名实体识别(如人名、地名、机构名等)、关系(如电影的导演、歌曲的发行时间等)、事件(如某路口发生车祸、某地发生地震等)、以及评价维度、观点词、情感倾向等信息。用户可以使用自然语言自定义抽取目标,无需训练即可统一抽取输入文本中的对应信息。实现开箱即用,并满足各类信息抽取需求。

4.1 实体抽取

     命名实体识别(Named Entity Recognition,简称NER),是指识别文本中具有特定意义的实体。在开放域信息抽取中,抽取的类别没有限制,用户可以自己定义。

     例如抽取的目标实体类型是"时间"、"选手"和"赛事名称", schema构造如下:

     ['时间', '选手', '赛事名称']

     调用示例:

     在”for_uie.py“文件中添加以下代码:

  1. from pprint import pprint
  2. from paddlenlp import Taskflow
  3. schema = ['时间', '选手', '赛事名称'] # Define the schema for entity extraction
  4. ie = Taskflow('information_extraction', schema=schema)
  5. pprint(ie("2月8日上午北京冬奥会自由式滑雪女子大跳台决赛中中国选手谷爱凌以188.25分获得金牌!")) # Better print results using pprint

     运行”for_uie.py“文件,输出结果如下图所示:

     例如抽取的目标实体类型是"肿瘤的大小"、"肿瘤的个数"、"肝癌级别"和"脉管内癌栓分级", schema构造如下:

['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']

     在上例中我们已经实例化了一个Taskflow对象,这里可以通过set_schema方法重置抽取目标。

     调用示例:

     继续在”for_uie.py“文件中添加以下代码:

  1. schema = ['肿瘤的大小', '肿瘤的个数', '肝癌级别', '脉管内癌栓分级']
  2. ie.set_schema(schema)
  3. pprint(ie("(右肝肿瘤)肝细胞性肝癌(II-III级,梁索型和假腺管型),肿瘤包膜不完整,紧邻肝被膜,侵及周围肝组织,未见脉管内癌栓(MVI分级:M0级)及卫星子灶形成。(肿物1个,大小4.2×4.0×2.8cm)。"))

      运行”for_uie.py“文件,输出结果如下图所示:

     例如抽取的目标实体类型是"person"和"organization",schema构造如下:

['person', 'organization']

     英文模型调用示例:

     将”for_uie.py“文件中的代码替换为以下代码:

  1. from pprint import pprint
  2. from paddlenlp import Taskflow
  3. schema = ['Person', 'Organization']
  4. ie_en = Taskflow('information_extraction', schema=schema, model='uie-base-en')
  5. pprint(ie_en('In 1997, Steve was excited to become the CEO of Apple.'))

      运行”for_uie.py“文件,输出结果如下图所示:

     更多不同类型任务(关系抽取、事件抽取、评价观点抽取等)的示例请参见链接:https://gitcode.net/mirrors/paddlepaddle/paddlenlp/-/blob/develop/model_zoo/uie/README.md

5. 训练定制

     对于简单的抽取目标可以直接使用paddlenlp.Taskflow实现零样本(zero-shot)抽取,对于细分场景推荐使用轻定制功能(标注少量数据进行模型微调)以进一步提升效果。本项目从非结构化数据中抽取‘水稻病症状’实体,就需要进行定制训练,标注少量的数据微调模型。

5.1 下载UIE源代码

     百度提供的paddlenlp源代码链接如下:https://gitcode.net/mirrors/paddlepaddle/paddlenlp,打开链接,页面如下图所示。paddlenlp库的更新速度非常快,点击”develop“,在下拉页表中可以看到已经有很多个版本,本项目使用的UIE源代码来自于”release/2.4“版本。选中”release/2.4“,点击右侧的”克隆“下载.zip格式的压缩包。

     下载后的压缩包名称为”PaddleNLP-release-2.4.zip“,解压后,找到PaddleNLP-release-2.4/model_zoo/目录下的uie/目录,将uie/目录下的utils.py、model.py、doccano.py、finetune.py、evaluate.py文件上传到实验环境中。

     若下载源代码遇到问题,也可以直接从‘资料’中下载uie.zip,上传到实验环境中并解压,uie的目录结构如下:

     每个文件的作用说明如下:

  • utils.py:数据处理脚本
  • model.py:模型组网脚本
  • doccano.py:数据转换及划分脚本
  • finetune.py :模型微调、压缩脚本
  • evaluate.py:模型评估脚本
5.2 选取数据标注工具

     推荐使用数据标注平台doccano 进行数据标注,uie项目中打通了从标注到训练的通道,即doccano导出数据后可通过doccano.py脚本轻松将数据转换为输入模型时需要的形式,实现无缝衔接。

     在接下来的任务中,就使用doccano工具对收集到的水稻疾病数据进行标注。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/703045
推荐阅读
相关标签
  

闽ICP备14008679号