извлечение пользовательских именованных объектов

Я пытаюсь реализовать NER (извлечение именованных объектов), используя Stanford NLP. конечной целью является преобразование свободного текста в формат запроса. Я создал собственный словарь и могу извлекать сущности и строить запросы.

people who are from newyork

я составлю запрос

     select * from people where region = 'newyork'

но проблема возникает, когда утверждение отрицается

люди не из Нью-Йорка

Как извлечь из этого высказывания негативный сценарий? Возможен ли какой-либо способ даже за пределами Стэнфордского НЛП?

Любая помощь приветствуется


person tourist    schedule 14.09.2016    source источник


Ответы (2)


Я знаю 2 возможности реализовать отношение отрицания:

  • Определите пользовательское свойство «не ..." и применяйте его везде.
  • Используйте базу знаний, извлеките МЕСТОПОЛОЖЕНИЯ из данных, определите «не из smth» как «МЕСТОПОЛОЖЕНИЕ не smth».

Я успешно использовал второй подход, но мне удалось ограничить свою область до конечного набора субъектов и отношений. Я нашел типизированные зависимости Стэнфорда невероятно полезными, они могут помочь и вам (найти эти from smth связи).

person dveim    schedule 14.09.2016
comment
Я попробовал первый подход. Проблема с описанным выше подходом заключается в том, что если в предложении есть несколько отрицаний, мы не можем видеть, какая сущность была отвергнута. - person tourist; 14.09.2016
comment
Недостатком первого подхода является то, что вам нужно иметь N отрицаний на N сущностей. По сути, количество дополнительных свойств растет слишком быстро. Попробуйте второй подход, он имеет дополнительное преимущество - вы можете сопоставить свои отношения с некоторыми БД и использовать SQL для запроса информации. - person dveim; 14.09.2016

То, что вы хотите сделать, называется «интерфейсом естественного языка к базе данных», и Standford NLP NER (на основе моделей последовательности CRF) может быть неподходящим решением для этой задачи. NER на основе CRF хорош, когда значение именованного объекта зависит от семантического контекста предложения: имен людей, названий компаний, стран и т. д. Для обучения распознавателя используется аннотированный текст с помеченными именами, и этот подход фактически непригоден для именованных объектов из базы данных. .

В этом случае распознаватели на основе правил намного лучше:

  • вам не нужно их обучать: достаточно поддерживать актуальность словарей, используемых механизмом правил (список имен таблиц данных, их столбцов и т. д.)
  • вы можете легко добавить нужные вам пользовательские парсеры: для дат, для чисел/условий, логических операторов (типа "не", "или", "и")

Вы можете взглянуть на мою библиотеку, специально написанную для распознавания запросов на естественном языке: NLQuery.

person Vitaliy Fedorchenko    schedule 21.09.2016