Маркировка семантической роли с использованием NLTK

У меня есть список предложений, и я хочу проанализировать каждое предложение и определить семантические роли в этом предложении. Как это сделать?

Я наткнулся на PropBankCorpusReader в модуле NLTK, который добавляет информацию о семантической маркировке в Penn Treebank. Также мои исследования в Интернете показывают, что этот модуль используется для выполнения семантической маркировки роли.

Однако я не могу найти небольшой HOWTO, который помогает мне понять, как мы можем использовать PropBankCorpusReader для выполнения SRL на арбитальном тексте.

Следовательно, может ли кто-нибудь указать примеры использования PropbankCorpusReader для выполнения SRL на суровых предложениях?

Ответ 1

SRL - это вовсе не тривиальная проблема, а не то, что можно сделать из коробки с помощью nltk.

Вы можете разбить задачу SRL на 3 отдельных этапа:

  • Идентификация предиката.
  • Выполнение значения смысла слова в предикате для определения того, какие семантические аргументы он принимает.
  • Идентификация семантических аргументов в предложении.

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

Некоторые документы, которые вы можете проверить, следующие:

Марковский логический подход многообещающий, но по моему опыту он сталкивается с серьезными проблемами масштабируемости (я только когда-либо использовал Alchemy, хотя Alchemy Lite выглядит интересным). Это не огромная работа по внедрению какого-то классификатора с использованием данных nltk Propbank, а некоторые из классификаторов полки уже существуют в Python.

EDIT: Это задание из Эдинбургского университета дает некоторые примеры того, как анализировать данные Propbank и часть школьного проекта. Я реализовал полный парсер функций Propbank, хотя функции специально предназначены для использования в Markov Logic Networks в стиле Меза-Руис и Ридель (2009).

Ответ 2

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

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

PractnlpTools: https://pypi.python.org/pypi/practnlptools/1.0

Сайт поддержки GitHub: https://github.com/biplab-iitb/practNLPTools

Ответ 3

Проверьте эту новую новую библиотеку python (в зависимости от NLTK) https://pypi.python.org/pypi/nlpnet/... это POS и SRL.