python构建知识图谱_【他山之石】python从零开始构建知识图谱

本文介绍如何利用Python和spaCy库从维基百科数据中构建知识图谱,涵盖句子分割、实体识别、关系抽取和图谱构建等步骤。通过实例展示了知识图谱在数据科学中的应用。
摘要由CSDN通过智能技术生成

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

作者:知乎—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是两个不同的实体。这些节点由代表两个节点之间关系的边连接,也被称为一个三元组。

a58f5ffe43a76209e64971c2853fe8f0.png

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

0b334b989028e049d9cc815d992d4c79.png

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

63405c1dff17501a3865c754be1bc5f6.png

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

fde5633a8e107701fdc724094f5f058d.png

识别实体和它们之间的关系对我们来说不是一项困难的任务,有监督的命名实体识别(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是宾语:

664eeaa71916cc88b2fee1afa652d157.png

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

3、实体识别Entities Recognition

首先我们需要抽取实体,也就是知识图谱上的“节点”: 从一个句子中提取一个单词并不是一项艰巨的任务。借助词性标签,我们可以很容易地做到这一点。名词和专有名词就是我们的实体。但是,当一个实体跨越多个单词时,仅使用POS标记是不够的。我们需要解析句子的依赖树。在下一篇文章中,您可以阅读更多有关依赖解析dependency parsing的内容。 我们使用spaCy库来解析依赖:
import spacynlp = spacy.load('en_core_web_sm')doc = nlp("The 22-year-old recently won ATP Challenger tournament.")for tok in doc:  print(tok.text, "...", tok.dep_)'''输出:The … det22-year … amod– … pun
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值