Определены ли уже предметы, т. Е. Знаете ли вы заранее для каждого предложения, какие слова или последовательности слов представляют предметы?Если вы делаете, я думаю, что вы ищете, это извлечение отношений.
Неуправляемый подход
Простой неконтролируемый подход заключается в поиске шаблонов с использованием тегов части речи, например:
Сначала вы токенизируете и получаете 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-тегов, который является шаблоном, который опосредует отношения между двумя субъектами./ entity / nouns:
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
.Для этого вам понадобится много примеров, это также зависит от того, сколько у вас различных классов / меток.