Обзор существующих подходов к рассуждению

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

1. Рассуждение о знаниях против поиска знаний

Представьте, что мы хотим сохранить информацию, указанную в следующем предложении:

«У Чарльза 5-летняя дочь Мэри и 15-летний сын Том»

внутри базы знаний, чтобы мы могли запросить эту информацию позже. Мы могли бы запомнить его в точности таким, какой он есть (т.е. сохранить его как необработанную строку), но это сделало бы такие вещи, как сжатие знаний и эффективный запрос к ним, довольно сложными. Часто предпочтительнее хранить информацию в структурированной форме (например, в виде таблицы или графика и т. Д.).

Поиск знаний

У разных структур есть ограничения и преимущества перед другими. Допустим, мы решили структурировать информацию предложения в виде таблицы. Это может выглядеть примерно так:

Этот тип структуры хорошо подходит для эффективного запроса знаний, которые она содержит (извлечение знаний).

Например:

  • ›› Вопрос: «Какие люди упоминаются в тексте?»

  • ›› Вопрос: «Сколько лет Тому?»

  • ›› Вопрос: «Том - девушка?»

  • ›› Вопрос: «Мэри - один из детей Чарльза?»

Рассуждение знаний

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

  • ›› Вопрос: «Кто моложе, Том или Мэри?»
  • ›› Вопрос: «Чарльз младше Мэри?»
  • ›› Вопрос: «Кто родители Тома?»
  • ›› Вопрос: «Кто братья и сестры Мэри?»
  • ›› Вопрос: «Сколько лет Чарльзу?»

Хотя мы можем довольно легко ответить на приведенные выше вопросы, дав одно и то же предложение. Мы делаем это с помощью рассуждений. На самом деле, мы так часто рассуждаем, что не всегда осознаем, когда делаем это. Если бы мы проанализировали наши мысли, рассуждения, которые мы используем для ответа на вышеперечисленные вопросы, могли бы звучать примерно так:

Q.1) who is younger, Tom or Mary?

Мэри моложе, потому что:

  • Мэри 5 лет («5 лет… по имени Мэри»)
  • Тому 15 («15-летний… по имени Том»)
  • 5 меньше 15
Q.2) is Charles younger than Mary?

Нет. Чарльз не может быть моложе Мэри, потому что:

  • Мэри - ребенок Чарльза («У Чарльза есть… дочь по имени Мэри»)
  • родители рождаются раньше своих детей
Q.3) who are Tom’s parents?

Чарльз - родитель Тома, потому что:

  • Том - ребенок Чарльза («У Чарльза есть… сын по имени Том»)
  • если у вас есть ребенок A, то вы родитель A
Q.4) who are Mary’s siblings?

Том - брат Мэри, потому что:

  • Чарльз - отец Мэри («У Чарльза есть… дочь по имени Мэри»)
  • Чарльз - отец Тома («У Чарльза есть… сын по имени Том»)
  • Кто-то с одним отцом - ваш брат
Q.5) how old is Charles?

Чарльзу определенно больше 15 лет, потому что:

  • Том - сын Чарльза («У Чарльза есть… сын по имени Том»)
  • Тому 15 («… 15 лет… по имени Том»)
  • родитель старше (родился раньше) своего ребенка

Типы рассуждений: дедуктивная и абдуктивная логика

Как вы можете видеть из приведенных выше примеров, фактическая информация, которую мы использовали для заключения наших ответов, была лишь частично извлечена из информации в самом тексте. Мы также используем руководителей, чтобы расширить эти знания, чтобы получить ответы, которые не были явно указаны в тексте. Этот тип рассуждений известен как дедуктивная логика, и выведенная информация обязательно верна до тех пор, пока истинны лежащие в их основе посылки (то есть информация из предложения).

Абдуктивная логика - это еще один тип рассуждений, который мы чаще используем. Последний вопрос - «сколько лет Чарльзу?» - отличный пример того, где мы можем использовать подобные рассуждения, чтобы сделать дополнительный вывод о том, что Чарльз, скорее всего, старше 15. Рассуждения могут выглядеть примерно так:

  • Чарльз, вероятно, уже достиг возраста полового созревания, когда стал родителем (потому что это обычно так - разумное предположение);
  • точный возраст полового созревания варьируется от человека к человеку, но обычно он составляет около подросткового возраста (еще одно справедливое предположение);
  • Таким образом, мы можем с уверенностью предположить, что Чарльз был старше 12 лет, когда стал отцом;
  • и с некоторой степенью уверенности сделать вывод, что Чарльз, скорее всего, старше 27 лет (по крайней мере, 12 лет для полового созревания + 15 лет, чтобы быть старше своего старшего сына).

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

Базы реляционных знаний (например, сети знаний и т. Д.)

Один из способов рассуждать о нашей базе знаний - использовать реляционные структуры, в которых все знания хранятся как отношение к другому элементу знания (формируя большую сеть знаний или реляционный граф). Предложение, хранящееся в нашей базе реляционных знаний, может выглядеть примерно так:

Поиск знаний

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

  • ›› Вопрос: «Какие люди упоминаются в тексте?»

  • ›› Вопрос: «Сколько лет Тому?»

  • ›› Вопрос: «Том - девушка?»

  • ›› Вопрос: «Мэри - один из детей Чарльза?»

Рассуждение знаний

Мы также можем кодировать правила рассуждений для работы с нашей реляционной базой данных. Например, рассуждение, которое мы использовали ранее для того, чтобы вывести кого-то из ваших братьев и сестер, было «Кто-то с одним отцом - ваш брат», что формально можно закодировать следующим образом:

is_sibling_of(PERSON_A, PERSON_B) :- 
   is_child_of(PERSON_A, PERSON_C),
   is_child_of(PERSON_B, PERSON_C), 
   PERSON_A \= PERSON_B.

По сути, это означает, что новый тип отношения (называемый «is_sibling_of / 2») будет автоматически создан в нашей базе данных между любыми двумя объектами (здесь называются общими именами заполнителей PERSON_A и PERSON_B), если первый объект (PERSON_A) является дочерним третьего лица (PERSON_C), а второе лицо (PERSON_B) также является потомком того же третьего лица (PERSON_C). Более того, два объекта (PERSON_A и PERSON_B) не могут быть одинаковыми (PERSON_A \ = PERSON_B).

Если мы закодируем остальные правила рассуждений, использованные при решении приведенных выше ответов, мы можем получить что-то вроде этого:

Теперь мы можем запросить нашу базу знаний о вещах, которые раньше не могли быть в нашей табличной базе знаний, например:

  • ›› Вопрос: «Кто моложе, Том или Мэри?»

  • ›› Вопрос: «Чарльз младше Мэри?»

  • ›› Вопрос: «Кто родители Тома?»

  • ›› Вопрос: «Кто братья и сестры Мэри?»

и так далее…

2. Обоснование ответа на сложные вопросы

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

Теперь предположим, что кто-то выразил довольно сложный запрос, например:

Эй, найди мне ресторан, где продают хорошие суши, недалеко от Чаринг-Кросс, пожалуйста

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

restaurant(PLACE),
sells(PLACE, sushi),
near(PLACE, `Charing Cross`).

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

Единственное значение в нашей небольшой базе данных, которое удовлетворяет всем трем условиям, указанным в запросе, - это ресторан под названием «Сакагура».

Обоснование обработки запросов с отрицаниями

Рассуждение может быть даже полезно для запросов, содержащих отрицания, например:

Покажите мне ресторан возле Чаринг-Кросс, в котором не продают суши

restaurant(PLACE), 
near(PLACE, Charing Cross), 
sells(PLACE, FOOD_TYPE), 
FOOD_TYPE\=sushi.

Здесь мы указываем, что значение переменной FOOD_TYPE не должно быть суши (FOOD_TYPE \ = sushi).

Обоснование для обработки разрешения совместных ссылок

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

У меня есть ключ и замок, поэтому я повернул его и он открыл!

Вопрос в том, что означает каждое «оно»? Замок? Ключ?

Мы знаем, что первое «оно» относится к ключу, а второе «оно» - к замку, но как? Возможно, мы рассудили, что ключ обычно повернут, но не запирается. Точно так же могут быть открыты только замки, но не ключи.

›› Запрос: открывался?

3. Заключение

Мы видели замечательные вещи, которые дает возможность рассуждать на основе нашей базы знаний. Примеры варьируются от получения новых знаний из увиденных знаний, ответов на сложные вопросы, создания новых фактов в нашей базе знаний и разрешения двусмысленностей. Рассуждения явно выходят за рамки данных, представленных в обучающих примерах.

Так что же нас ждет в будущем?
Подсказка: нейросимвольное машинное обучение

Большие языковые модели, такие как BERT, T5 или GPT-3, потребляют большие объемы знаний из огромных объемов текста (например, всей Википедии, всей сети и т. Д.). Эти знания хранятся распределенным образом в базовой нейронной сети вместе с информацией о том, как работает язык (например, порядок слов, грамматика, словарный запас). Это опять же очень мощная парадигма, расширяющая обычную парадигму хранения данных, поскольку эти знания вводятся в нейронную сеть без участия человека. (Очевидно, в то же время знания хранятся неявно и, следовательно, более неясно.)

Гэри Маркус и Николай Розанов в прошлом критиковали чисто нейросетевые подходы, которые просто учатся на входящих данных и создают распределенную версию увиденных знаний. Несмотря на то, что это мощный идеал хранения знаний, существуют ограничения в отношении того, чего можно достичь при хранении и извлечении знаний. Это ограничение является разумным.

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

Это все вопросы, которыми мы в Wluper занимаемся. Так что следите за новостями и следите за нашими предстоящими вакансиями.

Есть комментарии или вопросы? Не стесняйтесь обращаться к нам и оставлять аплодисменты.

Не забывайте подписываться на нас в Twitter и LinkedIn.

использованная литература

Чтобы запустить Python в браузере, попробуйте Colab.
Чтобы запустить Prolog в браузере, попробуйте (https://swish.swi-prolog.org/)