如何编码标签以进行关系提取

数据挖掘 深度学习 nlp 命名实体识别
2022-02-24 04:47:09

我正在尝试从文本中提取关系。所以,让我们看下面的文字“他去看电影。但是,他们去上学了”

所以,这里的关系是“他和电影”,“他们和学校”。我怎么可能将这些编码为标签。我最初的想法是将所有代词标记为 1,将名词标记为 2。但是,有没有更好的方法来做到这一点?

1个回答

我会建议使用 spaCy 之类的东西来解析句子这将能够为你建立这样的关系。

然后就是提取关系并决定如何标记它们的问题。让我们看一个小例子。想象一下你的大文本块包含许多句子。我们首先解析大块,然后可以(可选地)提取我们关心的句子:

import spacy

nlp = spacy.load('en_core_web_sm')      # this defines our 'parser' for English
doc = nlp(big_block_of_text)            # you may want to clean the text beforehand

假设我们只想要包含单词 'went' 的句子:

sents = [sent for sent in doc.sents if 'went' in sent.string]

这是一个语法走下解析树的示例。我说语义是因为我们使用语法词性来有条件地导航(使用例如名词):

for sent in sents:                          # loop over each sentence
    for word in sent:                       # analyse each word
        if word.pos_ == 'NOUN':             # if it is a noun
            for child in word.children:     # find children (go down the tree)
                if child.pos_ == 'NOUN':    # select only nouns from the children
                    print(word, child)

我相信这个片段会提取您给定示例中的对,因此希望输出确实是:

"He movie"
"they school"

您可以使用许多其他词性来更具体或匹配其他用例 - 查看相关的 spaCy 文档


如何对目标词之间的关系进行实际编码将取决于它们的最终目的,即您最终想要对编码做什么。你现在有了名词对。如果您想保留它们实际来自何处(来自哪些句子)的知识,您确实可以建立一个层次结构,为原始句子保留一个代码,然后为每对单词保留一个代码。