it-roy-ru.com

Почему LISP используется для ИИ?

Я изучал LISP, чтобы расширить свой кругозор, потому что я слышал, что он используется в программировании ИИ. После некоторого изучения я еще не нашел примеров искусственного интеллекта или чего-либо еще в языке, который бы сделал его более склонным к нему.

Использовался ли LISP в прошлом, потому что он был доступен, или мне чего-то не хватает?

182
Cristián Romo

LISP использовался в искусственном интеллекте до конца 1980-х годов. Однако в 80-х Common LISP был перепродан деловому миру как "язык искусственного интеллекта"; обратная реакция вынудила большинство программистов ИИ на C++ в течение нескольких лет. В наши дни прототипы обычно пишутся на более молодом динамическом языке (Perl, Python, Ruby и т.д.), А реализации успешных исследований обычно на C или C++ (иногда на Java).

Если вам интересно про 70-е ... ну, меня там не было. Но я думаю, что LISP был успешным в исследовании ИИ по трем причинам (в порядке важности):

  1. LISP - отличный инструмент для создания прототипов. Это было лучшим в течение очень долгого времени. LISP по-прежнему хорош в решении проблемы, которую вы еще не знаете, как решить. Это описание прекрасно характеризует ИИ.
  2. LISP хорошо поддерживает символическое программирование. Старый ИИ тоже был символическим. Это было также уникально в этом отношении в течение долгого времени.
  3. LISP очень мощный. Различие кода/данных слабее, поэтому оно кажется более расширяемым, чем другие языки, потому что ваши функции и макросы выглядят как встроенные элементы.

У меня нет старая книга Питера Норвига об ИИ , но это должен быть хороший способ научиться программировать алгоритмы ИИ в LISP.

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

120
Nathan Shively-Sanders

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

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

Тогда неудивительно, что многие известные приложения ИИ в этих областях были написаны на LISP:

  • Macsyma как первая большая система компьютерной алгебры.
  • ACL2 как широко используемый инструмент для доказательства теорем, например, используемый AMD.
  • Дарт как планировщик логистики использовал во время первой войны в Персидском заливе американские военные. Говорят, что только это приложение LISP окупило все американские инвестиции в исследования ИИ в то время.
  • SPIKE, приложение для планирования и планирования космического телескопа Хаббла. Также используется несколько других крупных телескопов.
  • CYC, одна из крупнейших написанных программных систем. Представление и рассуждение в области знаний человеческого здравого смысла.
  • METAL, одна из первых коммерчески используемых систем перевода на естественный язык.
  • Помощник авторизатора American Express, который проверяет транзакции по кредитным картам.

В этих областях есть тысячи приложений, написанных на LISP. Очень распространенным для них является то, что им нужны специальные возможности в области символьной обработки. Один реализует специальные языки, которые имеют специальные интерпретаторы/компиляторы в этих доменах поверх LISP. LISP позволяет создавать представления для символических данных и программ и может реализовывать все виды механизмов для управления этими выражениями (математические формулы, логические формулы, планы и т.д.).

(Обратите внимание, что в AI также используется множество других языков программирования общего назначения. Я попытался ответить, почему в AI особенно используется LISP.)

60
Rainer Joswig

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

22
dsm

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

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

12
aib

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

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

8
Rich

Я думаю, что неправильно думать об этом только с точки зрения ИИ. Такие вещи, как зимний ИИ и коммерческие эффекты на обычном LISP, отвлекают, если вы спрашиваете, почему он использовался для ИИ, а не почему он не часто используется сейчас ...

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

Сегодня я использую LISP для некоторых моих исследовательских программ (математика, обработка сигналов), потому что они более гибкие и мощные, чем большинство языков, и в то же время генерируют более эффективный код, чем большинство языков. Обычно я могу получить производительность с коэффициентом +/- 2, скажем, скорости c ++, но я могу реализовать вещи намного быстрее и справиться со сложностью, которая заняла бы у меня намного больше времени, чем у меня, если бы я использовал c ++, Java, c #.

Это бродит не по теме, хотя. Я думаю, что AI-код некоторое время был написан на общем LISP, потому что это мощный подход к исследованию кода. Это все еще есть; но по мере того, как алгоритмы "ИИ" становились лучше поняты и изучены, некоторые из них стало намного легче учить и использовать, поэтому они появлялись на языках, посвященных духу года, на курсах старшекурсников. Оттуда становится проблемой то, что люди уже знают, какие библиотеки доступны, и что хорошо работает для больших групп.

7
simon

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

в то время, будучи способным превращать их во все виды составных объектов, а также в новые вещи, такие как передача сообщений и полиморфизм, сделали его предпочтительным языком; не специально для ИИ, но для больших, сложных задач. особенно когда они экспериментировали с концепциями.

6
Javier

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

Об этом мне рассказали во время курса ИИ в университете, где мы изучали LISP.

4
mlambie

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

Но LISP довольно трудно читать людям с его скобками и отсутствием различия между данными и программами. Сегодня я не буду использовать LISP для какого-либо производственного кода AI (или, возможно, даже для создания прототипов), но я бы предпочел python для сценариев.

Еще одна вещь, которую следует учитывать, это существующие библиотеки/инструменты в/связанные с языком. Я не в состоянии сравнивать библиотеки LISP с библиотеками python, но я полагаю, что библиотеки и открытый исходный код имеют гораздо большее значение, чем раньше.

Этот ответ был вдохновлен следующим сравнением между LISP и python: http://amitp.blogspot.com/2007/04/LISP-vs-python-syntax.html

4
amit

Более циничным ответом может быть "потому что он проиграл политическую войну ИИ между Японией и США в 1980-х". Это забавно сообщение в блоге, в котором рассказывается о влиянии гибели компьютерной системы пятого поколения на Пролог .

3
Anon