0

我有大约 7.000 个句子,为此我使用 SpaCy 完成了改进的名称实体识别(即,针对特定实体)。现在我想做关系提取(基本上是因果推理),我不知道如何使用NER来提供训练集。

据我所知,执行关系提取有不同的方法:

  • 1) 手写图案
  • 2)监督机器学习
  • 3)半监督机器学习

因为我想使用有监督的机器学习,所以我需要训练数据。

如果有人能给我一些指导,那就太好了,非常感谢。这是我的数据框的屏幕截图,实体由定制的 spaCy 模型提供。我可以访问每个句子的句法依赖性和词性标签,如 spaCy 给出的:

在此处输入图像描述

4

1 回答 1

2

您的数据集似乎是某种技术写作,结构非常好,因此词性标签可能足以进行您想要的提取。

我建议您阅读这篇论文,并了解使用识别关系进行开放信息提取的基于 pos-tags 的模式

下面的一段代码用词性标签标记发送,然后查找与调用的混响模式匹配的序列。

import nltk

verb = "<ADV>*<AUX>*<VBN><IN|PART>*<ADV>*"
word = "<NOUN|ADJ|ADV|DET|ADP>"
preposition = "<ADP|ADJ>"

rel_pattern = "( %s (%s* (%s)+ )? )+ " % (verb, word, preposition)
grammar_long = '''REL_PHRASE: {%s}''' % rel_pattern
reverb_pattern = nltk.RegexpParser(grammar_long)

sent = "where the equation caused by the eccentricity is maximum."
sent_pos_tags = nltk.tag.pos_tag("where the equation caused by the eccentricity is maximum".split())

for x in reverb_pattern.parse(tags):
  if isinstance(x, nltk.Tree) and x.label() == 'REL_PHRASE':
     rel_phrase = " ".join([t[0] for t in x.leaves()])
    print(rel_phrase)

缺少一点是找到最接近模式右侧和左侧的名词短语,但我将其留作练习。我还写了一篇博客文章,其中包含更详细的示例。我希望它有所帮助。

于 2019-08-05T19:25:49.217 回答