首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从句子中提取关系概念

从句子中提取关系概念
EN

Stack Overflow用户
提问于 2019-03-03 06:53:51
回答 1查看 211关注 0票数 4

现在是否有一个模型,或者我如何训练一个包含两个主题的句子的模型:

减数分裂是一种细胞分裂。

决定其中一个是另一个的孩子还是父母的概念?在这种情况下,细胞分裂是减数分裂的母体。

EN

回答 1

Stack Overflow用户

发布于 2019-03-03 11:20:35

主语是否已经被识别,也就是说,你是否事先知道每句话中哪些词或单词序列代表了主语?如果你这样做,我认为你正在寻找的是关系提取。

无监督逼近

一种简单的无监督方法是使用语音标记查找模式,例如:

首先,对每个句子进行标记并获取PoS标记:

代码语言:javascript
复制
sentence = "Meiosis is a type of cell division."
tokens = nltk.word_tokenize("Meiosis is a type of cell division.")
tokens
['Meiosis', 'is', 'a', 'type', 'of', 'cell', 'division', '.']

token_pos = nltk.pos_tag(tokens)
token_pos
[('Meiosis', 'NN'), ('is', 'VBZ'), ('a', 'DT'), ('type', 'NN'), ('of', 'IN'),
 ('cell', 'NN'), ('division', 'NN'), ('.', '.')]

然后构建一个解析器,根据PoS标记解析特定的模式,这是一种调解两个主题/实体/名词之间关系的模式:

代码语言:javascript
复制
verb = "<VB|VBD|VBG|VBN|VBP|VBZ>*<RB|RBR|RBS>*"
word = "<NN|NNS|NNP|NNPS|JJ|JJR|JJS|RB|WP>"
preposition = "<IN>"
rel_pattern = "({}|{}{}|{}{}*{})+ ".format(verb, verb, preposition, verb, word, preposition)
grammar_long = '''REL_PHRASE: {%s}''' % rel_pattern
reverb_pattern = nltk.RegexpParser(grammar_long)

注意:此模式基于本文:http://www.aclweb.org/anthology/D11-1142

然后,您可以将解析器应用于所有标记/PoS-标记,但属于主题/实体的标记除外:

代码语言:javascript
复制
reverb_pattern.parse(token_pos[1:5])
Tree('S', [Tree('REL_PHRASE', [('is', 'VBZ')]), ('a', 'DT'), ('type', 'NN'), ('of', 'IN')])

如果解析器输出一个REL_PHRASE,则这两个主题之间存在关系。然后,您需要分析所有这些模式,并决定哪一个表示parent-of关系。例如,实现这一目标的一种方法是对它们进行聚类。

监督逼近

如果您的句子已经用主题/实体和关系类型(即有监督的场景)标记,那么您可以建立一个模型,其中特征可以是两个主题/实体之间的单词和标签的关系类型。

代码语言:javascript
复制
sent: "[Meiosis] is a type of [cell division.]"
label: parent of

您可以构建is a type of的向量表示,并训练分类器来预测标签parent of。为此,您将需要许多示例,这还取决于您有多少不同的类/标签。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54966341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档