从句子中提取关系概念

时间:2019-03-03 06:53:52

标签: nlp word2vec word-embedding information-extraction relationship-extraction

是否有当前模型,或者我怎么训练一个包含两个主题的句子的模型:

  

[减数分裂]是[细胞分裂] ...

并确定一个是另一个孩子的概念?在这种情况下,细胞分裂是减数分裂的母体。

1 个答案:

答案 0 :(得分:2)

是否已经确定了主题,即您是否预先知道每个句子的哪些单词或单词序列代表主题?如果您愿意,我认为您正在寻找的是关系提取。

无监督方法

一种简单的无监督方法是使用词性标签(例如:

)查找模式

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

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标记解析特定的模式,该模式可以调解两个主题/实体/名词之间的关系:

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标记:

reverb_pattern.parse(token_pos[1:5])
Tree('S', [Tree('REL_PHRASE', [('is', 'VBZ')]), ('a', 'DT'), ('type', 'NN'), ('of', 'IN')])

如果解析器输出REL_PHRASE,则两个主题之间没有关系。然后,您需要分析所有这些模式并确定代表parent-of关系的模式。例如,通过将它们聚类来实现此目的。

有监督的方法

如果您的句子已经被主题/实体和关系类型标记,即在有监督的情况下,您可以建立一个模型,其中特征可以是两个主题/实体之间的单词以及关系的类型标签。

sent: "[Meiosis] is a type of [cell division.]"
label: parent of

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