НЛП, чтобы найти отношения между сущностями

В настоящее время я понимаю, что можно извлекать объекты из текстового документа с помощью таких наборов инструментов, как OpenNLP, Stanford NLP.

Однако есть ли способ найти отношения между этими объектами?

Например, рассмотрим следующий текст:

"Некоторые из вас, возможно, знают, что на прошлой неделе я провел в ЦЕРН, европейской лаборатории физики высоких энергий, где в июле прошлого года был открыт знаменитый бозон Хиггса. Каждый раз, когда я приезжаю в ЦЕРН, я испытываю глубокое чувство благоговения. Из кратких посещений в течение многих лет я был там в течение трех месяцев в конце 1990-х в качестве приглашенного ученого, работая над физикой ранней Вселенной, пытаясь понять, как связать Вселенную, которую мы видим сегодня, с тем, что, возможно, произошло в ее младенчестве. "

Сущности: Я (автор), ЦЕРН, бозон Хиггса

Отношения: - Я "посетил" ЦЕРН - ЦЕРН "обнаружил" бозон Хиггса

Спасибо.


person Soumya Simanta    schedule 06.03.2013    source источник
comment
Вы должны посмотреть на entity linking, anaphora resolution   -  person alvas    schedule 07.03.2013
comment
@ 2er0 - есть хорошая ссылка или отправная точка для этого?   -  person Soumya Simanta    schedule 07.03.2013
comment
проверьте эту конференцию на nist.gov/tac/2013/KBP/EntityLinking/ index.html   -  person alvas    schedule 07.03.2013
comment
Перед любым entity linking вы должны проверить Name Entity Recognition nltk.googlecode.com/svn /trunk/doc/book/ch07.html, чтобы знать, что что-то является сущностью. Затем их связывание позволит вам узнать, какие сущности одинаковы. Тогда вам нужно найти что-то еще, что связывает отношения. Возможно slot-filling.   -  person alvas    schedule 07.03.2013
comment
ваша задача довольно большая, поэтому разбейте ее на: NER, затем entity linking, а затем slot-filling. На самом деле весь набор задач может быть полной knowledge base population задачей. =) Google больше, я не эксперт в этом, но я сделал некоторую работу ранее.   -  person alvas    schedule 07.03.2013


Ответы (5)


Вы можете извлекать глаголы вместе с их зависимостями, например, с помощью Stanford Parser. Например, вы можете получить «цепочки зависимостей», например

"I :: spent :: at :: CERN". 

Гораздо сложнее признать, что «я провел в ЦЕРН», «я посетил ЦЕРН» и «ЦЕРН организовал мой визит» (и т. д.) обозначают одно и то же событие. Изучение того, как это можно сделать, выходит за рамки вопроса SO, но вы можете прочитать литературу по распознаванию парафраз (вот один обзорный документ). Существует также связанный вопрос по SO.

Как только вы сможете сгруппировать похожие цепочки, вам нужно будет найти способ пометить их. Вы можете просто выбрать глагол из наиболее часто встречающейся цепочки в кластере.

Однако если у вас есть предопределенный набор типов отношений, которые вы хотите извлечь, и множество текстов, аннотированных вручную для этих отношений, то подход может быть совсем другим, например, использование машинного обучения, чтобы научиться распознавать тип отношения на основе на аннотированных данных.

person vpekar    schedule 07.03.2013

Да, конечно. Это называется Извлечение отношений. Стэнфорд разработал несколько полезных инструментов для работы над этой проблемой.

Вот сайт: http://deepdive.stanford.edu/relation_extraction Вот репозиторий github: https://github.com/philipperemy/Stanford-OpenIE-Python

В общем, вот как работает этот процесс.

results = entract_entity_relations("Barack Obama was born in Hawaii.")
print(results)
# [['Barack Obama','was born in', 'Hawaii']]

Некоторое значение имеет то, что извлекаются только триплеты формы (subject,predicate,object).

person DataDao    schedule 28.10.2018

Не знаю, интересно ли вам, но CoreNLP добавил новый аннотатор под названием OpenIE (извлечение открытой информации), который должен выполнять то, что вы ищете. Проверьте это: OpenIE

person Emre Colak    schedule 24.03.2017

Подобно синтаксическому анализатору Стэнфорда, вы также можете использовать Google Language API, где вы отправляете строку и получаете ответ дерева зависимостей.

Вы можете сначала протестировать этот API, чтобы убедиться, что он хорошо работает с вашим корпусом: https://cloud.google.com/natural-language/

Результатом здесь является триплет объекта предиката субъекта (SPO), где ваш предикат описывает отношение. Вам нужно будет просмотреть граф зависимостей и написать скрипт для анализа триплета.

person saucy wombat    schedule 31.01.2018

Существует множество способов извлечения отношений. Как упомянули коллеги, вы должны знать о NER и разрешении кореферентности. Разные техники требуют разных подходов. В настоящее время дистанционное наблюдение наиболее распространено, и для обнаружения связи между сущностями они использовали FREEBASE.

person Zia    schedule 26.02.2019