Подтвердить что ты не робот

Алгоритм отклонения предложений

Мне было интересно, если кто-нибудь был знаком с любыми попытками отрицания алгоритмического предложения.

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

Очевидно, что достижение этого с высокой степенью точности, вероятно, выходит за рамки текущей НЛП, но я уверен, что была какая-то работа по этому вопросу. Если кто-нибудь знает о какой-либо работе, позаботьтесь о том, чтобы указать мне на некоторые документы?

4b9b3361

Ответ 1

Пока я не знаю какой-либо работы, которая специально смотрит на автоматическое создание отрицательных предложений, я полагаю, что хорошим местом для начала было бы прочитать работу лингвистики в формальная семантика и pragmatics. Хорошим доступным введением было бы книга Стивена Левинсона Прагматики.

Одна проблема, с которой, я думаю, вы столкнетесь, заключается в том, что очень сложно свести на нет всю информацию, передаваемую предложением. Например, возьмите:

John fixed the vase that he broke.

Даже если вы измените это на Джон не зафиксировал вазу, которую он сломал, есть presupposition что есть ваза и что Джон сломал ее.

Аналогично, просто отрицая предложение Джон не прекратил употреблять наркотики, поскольку Джон прекратил употреблять наркотики, все еще передает, что Джон в какой-то момент употреблял наркотики. Более глубокое отрицание было бы Джон никогда не употреблял наркотики.

Некоторая работа над обработкой естественного языка (NLP), которую вы можете посмотреть, - это MacCartney and Manning 2007 Естественная логика для текстового вывода. В этой статье они используют понятие Джордж Лакофф из Natural Logic и Sanchez Valencia для вычисления монотонности для создания программного обеспечения, которое автоматически определяет, влечет ли одно предложение другое. Вероятно, вы могли бы использовать некоторые свои методы для обнаружения неспособности искусственно конструировать отрицательные и противоречивые предложения.

Ответ 2

Наивный способ, конечно, состоит в том, чтобы попытаться добавить "не" сразу после {am, are, is}. Я понятия не имею, как это будет работать в вашей настройке, но, вероятно, это будет работать только с предложениями типа "предикат".

Ответ 3

Там аналогичный процесс для логики первого порядка. Обычный алгоритм состоит в отображении P в not P, а затем выполняет действительные переводы для перемещения not где-то удобно, например:

Original:    (not R(x) => exists(y) (O(y) and P(x, y)))
Negate it:   not (not R(x) => exists(y) (O(y) and P(x, y)))
Rearrange:   not (R(x) or exists(y) (O(y) and P(x, y)))
             not R(x) and not exists(y) (O(y) and P(x, y))
             not R(x) and forall(y) not (O(y) and P(x, y))
             not R(x) and forall(y) (not O(y) or not P(x, y))

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

Естественный язык намного сложнее, чем логика первого порядка, конечно... но если вы можете разобрать предложение во что-то, где слова "не", "и", "или", "существует" и т.д. можно идентифицировать, тогда вы должны иметь возможность выполнять аналогичные переводы.

Ответ 4

Я бы рекомендовал проверить wordnet. Вы можете использовать его для поиска антонимов для слова, поэтому вы могли бы заменить "плохо" "нехорошо", поскольку плохое является антонимом добра. NLTK имеет простой интерфейс python для wordnet.

Ответ 5

Для простых предложений синтаксический анализ ищет наречия или прилагательные, учитывая английские грамматические правила и заменяя антоним, если существует только одно значение. В противном случае используйте правильное английское правило отрицания для отрицания глагола (т.е. Is → is not).

Алгоритм высокого уровня:

  • Посмотрите каждое слово для этого типа (существительное, глагол, прилагательное, наречие, соединение и т.д.).
  • Вывести структуру предложения из последовательностей слов (ваше предложение было: статья, существительное, глагол, прилагательное/наречие; это, как известно, простое предложение.)
  • Для простых предложений выберите одно обратимое слово и инвертируйте его. Либо используя антоним, либо отрицая глагол.

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