[英]Extract relationship concepts from sentences
是否有當前模型或我如何訓練一個模型,該模型涉及兩個主題,如:
[減數分裂]是一種[細胞分裂] ......
並決定一個是另一個的孩子或父母概念? 在這種情況下,細胞分裂是減數分裂的父母。
是否已經確定了主題,即,您是否事先知道每個句子的單詞或單詞序列代表主語? 如果你這樣做,我認為你正在尋找的是關系提取。
一種簡單的無監督方法是使用詞性標簽查找模式,例如:
首先,您為每個句子標記並獲取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
。 你需要很多例子,它還取決於你有多少不同的類/標簽。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.