python构建知识图谱_Python从零开始构建知识图谱

“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。

作者:知乎—wxj630

地址:https://www.zhihu.com/people/wxj630

  • 知识图谱是数据科学中最迷人的概念之一
  • 学习如何构建知识图谱来从维基百科页面挖掘信息
  • 您将在Python中动手使用流行的spaCy库构建知识图谱

01

知识图谱

1、什么是知识图谱

We can define a graph as a set of nodes and edges. 知识图谱就是一组节点和边构成的三元组。 这里的节点A和节点B是两个不同的实体。这些节点由代表两个节点之间关系的边连接,也被称为一个三元组。

python构建知识图谱_Python从零开始构建知识图谱_第1张图片

例如头实体“普京”和尾实体“俄罗斯”的关系是“是总统”:

python构建知识图谱_Python从零开始构建知识图谱_第2张图片

还可以增加“普京在克格勃工作过”的三元组:

python构建知识图谱_Python从零开始构建知识图谱_第3张图片

还可以增加“俄罗斯是APEC组织成员”的三元组:

python构建知识图谱_Python从零开始构建知识图谱_第4张图片

识别实体和它们之间的关系对我们来说不是一项困难的任务,有监督的命名实体识别(NER)和关系抽取都有比较成熟的模型。但是标注一个大规模的实体和关系的数据集是需要巨大投入的。 因此作为初学者,我们使用 句子分割、依赖解析、词性标注和实体识别等NLP技术来实现实体识别、关系抽取、知识图谱构建。

2、句子分割Sentence Segmentation

构建知识图的第一步是将文本文档或文章分解成句子。然后,我们将选出只有一个主语和一个宾语的句子。让我们看看下面的示例文本: “Indian tennis player Sumit Nagal moved up six places from 135 to a career-best 129 in the latest men’s singles ranking. The 22-year-old recently won the ATP Challenger tournament. He made his Grand Slam debut against Federer in the 2019 US Open. Nagal won the first set.”
在最新的男子单打排名中,印度网球选手纳加尔(Sumit Nagal)上升了6位,从135名上升到职业生涯最好的129名。这位22岁的选手最近赢得了ATP挑战赛的冠军。在2019年的美国网球公开赛上,他迎来了自己的大满贯处子秀,对手是费德勒。纳加尔赢了第一盘。 将文本分割成句子:
  1. Indian tennis player Sumit Nagal moved up six places from 135 to a career-best 129 in the latest men’s singles ranking
  2. The 22-year-old recently won the ATP Challenger tournament
  3. He made his Grand Slam debut against Federer in the 2019 US Open
  4. Nagal won the first set
在这四个句子中,我们将选出第二个和第四个句子,因为它们分别包含一个主语和一个宾语。在第二句话中,22-year-old是主语,宾语是ATP挑战者锦标赛。在第四句中,主语是Nagal,first set是宾语:

python构建知识图谱_Python从零开始构建知识图谱_第5张图片

但是我们没办法每个句子都人工抽取,因此需要使用实体识别和关系抽取技术。

3、实体识别Entities Recognition

首先我们需要抽取实体,也就是知识图谱上的“节点”: 从一个句子中提取一个单词并不是一项艰巨的任务。借助词性标签,我们可以很容易地做到这一点。名词和专有名词就是我们的实体。但是,当一个实体跨越多个单词时,仅使用POS标记是不够的。我们需要解析句子的依赖树。在下一篇文章中,您可以阅读更多有关依赖解析dependency parsing的内容。 我们使用spaCy库来解析依赖:
impo

你可能感兴趣的:(python构建知识图谱)