使用特定领域的文档构建知识图谱 | 教程

编译 | Arno

来源 | github 【磐创AI导读】:本系列文章为大家介绍了如何使用特定领域的文档构建知识图谱。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。

在任何业务中,word文档都是很常见的,它们以原始文本、表格和图像的形式包含信息,所有这些都包含重要的事实。此代码模式[1]中使用的数据来自维基百科的两篇文章。第一个摘自肿瘤学家Suresh H. Advani的维基百科页面,第二个摘自关于肿瘤学的维基百科页面。这些文件被压缩为archive.zip文件[2]。

在下面的图中,有一个关于肿瘤学家Suresh H. Advani的文本信息出现在word文档中,还有一个表格包括他曾获多个机构颁发的奖项。

在这个代码模式中,我们解决了从word文档中的文本和表格中提取知识的问题。然后从提取的知识中构建知识图谱,使知识具有可查询性。

而从word文档中提取知识过程中的遇到一些挑战主要为以下两个方面:

  1. 自然语言处理(NLP)工具无法访问word文档中的文本。word文档需要转换为纯文本文件。
  2. 业务和领域专家能够了解文档中出现的关键字和实体,但是训练NLP工具来提取领域特定的关键字和实体是一项很大的工作。此外,在许多场景中,找到足够数量的文档来训练NLP工具来处理文本是不切实际的。

在此模式中我们采用以下方法克服遇到的这些挑战:

  • 使用基于python的mammoth库将.docx文件转化为html文件(半结构化格式)
  • Watson Natural Language Understanding(Watson NLU)用于提取常见的实体。
  • 使用基于规则的方法来扩展Watson NLU的输出(这种方法的解释参见代码模式Extend Watson text Classification [3])。基于规则的方法不需要训练文档或训练工作。算法将配置文件作为输入,而此文件需要由领域专家配置。
  • 使用Watson NLU提取实体之间的关系。
  • 使用基于规则的方法来扩展Watson NLU的输出(这种方法的解释参见代码模式Watson Document Correlation[4])。基于规则的方法不需要训练文档或训练工作。算法将配置文件作为输入,而此文件需要由领域专家配置。

两全其美的方法--同时使用基于训练和规则的方法从文档中提取知识。

在这个模式中,我们将演示:

  • 从包含自由浮动的文本和表格文本的文档中提取信息。
  • 清理数据[3]模式以从文档中提取实体
  • 使用Watson Document Correlation[4]模式提取实体之间的关系
  • 从提取的知识中建立一个知识图谱。

是什么让这个代码模式具有价值:

  • 处理docx文件中的表格和自由浮动文本的能力。
  • 以及将Watson NLU的实时分析结果与主题专家或领域专家定义的规则的结果相结合的策略。

此代码模式旨在帮助开发人员、数据科学家为非结构化数据提供结构。这可以显著地帮助他们进行分析,并将数据用于进一步处理以获得更好的见解。

流程

  1. 需要分析和关联的docx文件 (html表格和自由浮动文本) 中的非结构化文本数据使用python代码从文档中提取。
  2. 使用代码模式 Extend Watson text classification[3],文本使用Watson NLU进行分类,并进行标记。
  3. 使用代码模式Correlate documents[5],将文本与其他文本关联
  4. 使用python代码过滤结果。
  5. 构建了知识图谱。

此外,你可以通过视频[6]观看知识图谱的构建过程.

所包含的组件

  • IBM Watson Studio: 使用RStudio、Jupyter和Python在一个配置好的协作环境中分析数据,其中包括IBM的value-adds,比如managed Spark。
  • -Watson Natural Language Understanding: 一种IBM云服务,可以使用自然语言理解分析文本,从概念、实体、关键字、类别、情感、关系、语义角色等内容中提取元数据。
  • Jupyter Notebooks: 一个开源的web应用程序,允许你创建和共享包含实时代码、方程式、可视化和解释性文本的文档。

构建步骤

按照以下步骤设置和运行此代码模式,下面将详细描述这些步骤。

  • 创建IBM云服务
  • 使用IBM Watson Studio中的Jupyter Notebooks运行代码
  • 分析结果
1. 创建IBM云服务

创建IBM云服务[7]并将其命名为wdc-NLU-service。

2. 使用IBM Watson Studio中的Jupyter Notebooks运行代码
  1. 创建一个新的Watson Studio项目
  2. 创建notebook
  3. 运行notebook
  4. 上传数据
  5. 保存和分享
2.1 创建一个新的Watson Studio项目
  • 登录到IBM的 Watson Studio,登录后,你将看到仪表板。
  • 通过点击New project并选择Data Science创建一个新项目。
  • 为项目起一个名称并点击Create
  • 注意: 通过在Watson Studio中创建一个项目,一个免费的Object Storage服务和Watson Machine Learning服务将在你的IBM Cloud帐户中创建。选择免费存储类型以避免收费。
2.2 创建notebook
  • 在新建项目Overview面板中,点击右上角的Add to project并选择Notebook资源类型。
  • 填写以下信息:
  • 选择From URL选项卡。(步骤1)
  • 输入notebook的名称和可选项描述。(步骤2)
  • Notebook URL下提供以下URL: https://raw.githubusercontent.com/IBM/build-knowledge-base-with-domain-specific-documents/master/notebooks/knowledge_graph.ipynb。(步骤3)
  • 对于Runtime运行环境,选择Python 3.5。(步骤4)
  • 点击Create按钮。
  • 提示: 一旦成功导入,notebook应该出现在Assets选项卡的Notebook部分。
2.3 运行notebook
  • 选择下拉菜单 Cell > Run All运行notebook,或者使用play按钮自顶向下一次运行单元格。
  • 当单元格运行时,观察输出结果或错误。一个正在运行的单元格将有一个类似于In[*]的标签。一个完成的单元格将有一个运行序列号,而不是星号。
2.4 上传数据

将数据和配置上传到notebook上:

  • notebook使用data[2]中的数据,将数据上传到我们的项目中
  • 在新项目的Overview面板中,单击右上角的Add to project并选择Data资源类型。
  • 屏幕右侧出现的面板将指导你如何上传数据,按照下图中编号的步骤操作。
  • 确保你在Load选项卡上。(步骤1)
  • 单击browse选项。在你的机器上定位到archive.zipconfig_relations.txtconfig_classification.txt文件的位置,并将它们上传。(没有标记步骤)
  • 上传后,转到Files选项卡。(步骤2)
  • 确保文件出现图中的位置。(步骤3)

注意:可以使用你自己的数据和配置文件。如果使用自己的配置文件,请确保符合config_classification.txt文件中给出的JSON结构。

3. 分析结果

当我们浏览notebook时,我们首先要做的是:

  • 配置文件(config_classification.txtconfig_relations.txt)已经被加载进来
  • 使用python包mammoth提取非结构化的信息,Mammoth将.docx文件转换为.html,并分析表格中的文本和自由浮动文本
  • 使用配置文件分析和扩展Watson Natural Language Understanding的结果。
  • 实体使用config_classification.txt文件进行扩展,关系使用config_relationships.txt文件进行扩展。
  • 然后对结果进行过滤和格式化,以获取相关关系并丢弃不相关的关系。
  • 将过滤后的关系发送到notebook中的绘制图形函数,构建知识图谱。

相关链接:

[1]: https://github.com/IBM/build-knowledge-base-with-domain-specific-documents

[2]: https://github.com/IBM/build-knowledge-base-with-domain-specific-documents/tree/master/data

[3]: https://developer.ibm.com/patterns/extend-watson-text-classification/

[4]: https://developer.ibm.com/code/patterns/watson-document-correlation/

[5]: https://github.com/IBM/watson-document-co-relation

[6]: https://www.youtube.com/watch?v=lC2-h2ac_Jg&feature=youtu.be

[7]: https://cloud.ibm.com/catalog/services/natural-language-understanding

本文分享自微信公众号 - 磐创AI(xunixs)

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

原始发表时间:2019-07-29

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏DotNet Core圈圈

使用Jenkins部署.Net Core遇到的几个坑

  这里最应该注意的是操作系统版本和Jenkins的版本,不同的版本,特别是操作系统操作的shell可能千差万别,你会在网上看到各种命令,所以选择好自己的环境。

23540
来自专栏git

react-04

github: https://github.com/callemall/material-ui

9520
来自专栏格姗知识圈

10个Github开源免费且优秀的后台控制面板,你值得收藏

Web 开发中几乎的平台都需要一个后台管理,但是从零开发一套后台控制面板并不容易,幸运的是有很多开源免费的后台控制面板可以给开发者使用,那么有哪些优秀的开源免费...

12120
来自专栏不止dotNET

不断进化的分支和需求管理

昨天有朋友在公众号私信问我几个关于代码分支管理的问题,这几个问题是我去年写的《在团队中使用GitLab中的Merge Request工作模式》一文结尾时抛出的几...

7010
来自专栏不止dotNET

我用过的那些工具

人和动物最大的区别就是人类能够制造和使用工具,在平时的工作和生活中,能够合理使用工具会给我们带来事半功倍的效果。最近的几年一直在使用iOS系统和Mac OSX系...

9910
来自专栏不止dotNET

敏捷下的需求和代码分支管理

在去年的一篇文章《在团队中使用GitLab中的Merge Request工作模式》中简单介绍了下Git的几种模式和在团队中使用的Merge Request的模式...

10110
来自专栏图南科技

php-ext-excel-export扩展使用札记

PHP环境下的导出功能优化改造,单次同步导出数据量在2万之上。原有导出功能使用的PHP5.6+PHPExcel.这一次换成了PHP7.2+php-ext-exc...

17420
来自专栏腾讯云serverless的专栏

云函数场景下的DevOps实践--CODING企业版

云函数scf init 命令可以进行项目初始化操作。基于Git仓库模板项目可以快速创建出一个简单的模板项目,进行进一步的开发。

19040
来自专栏CDA数据分析师

万万没想到,Python 竟能绘制出如此酷炫的三维图

通常我们用 Python 绘制的都是二维平面图,但有时也需要绘制三维场景图,比如像下面这样的:

19020
来自专栏信息安全小学生

学习 Phaser.js HTML5游戏开发-DAY1

Github: https://github.com/photonstorm/phaser

16520

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励