“他山之石,可以攻玉”,站在巨人的肩膀才能看得更高,走得更远。在科研的道路上,更需借助东风才能更快前行。为此,我们特别搜集整理了一些实用的代码链接,数据集,软件,编程技巧等,开辟“他山之石”专栏,助你乘风破浪,一路奋勇向前,敬请关注。
作者:知乎—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是两个不同的实体。这些节点由代表两个节点之间关系的边连接,也被称为一个三元组。 例如头实体“普京”和尾实体“俄罗斯”的关系是“是总统”: 还可以增加“普京在克格勃工作过”的三元组: 还可以增加“俄罗斯是APEC组织成员”的三元组: 识别实体和它们之间的关系对我们来说不是一项困难的任务,有监督的命名实体识别(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年的美国网球公开赛上,他迎来了自己的大满贯处子秀,对手是费德勒。纳加尔赢了第一盘。 将文本分割成句子:
- 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
3、实体识别Entities Recognition
首先我们需要抽取实体,也就是知识图谱上的“节点”: 从一个句子中提取一个单词并不是一项艰巨的任务。借助词性标签,我们可以很容易地做到这一点。名词和专有名词就是我们的实体。但是,当一个实体跨越多个单词时,仅使用POS标记是不够的。我们需要解析句子的依赖树。在下一篇文章中,您可以阅读更多有关依赖解析dependency parsing的内容。 我们使用spaCy库来解析依赖:
import spacy
nlp = 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 … det
22-year … amod
– … pun