Почему Lisp используется для искусственного интеллекта?[закрыто]

StackOverflow https://stackoverflow.com/questions/130475

  •  02-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Я думаю, что неправильно думать об этом только в терминах искусственного интеллекта.Такие вещи, как AI-winter и коммерческие эффекты для common lisp, отвлекают, если вы спрашиваете, почему он использовался для AI, а не почему сейчас его не часто используют ...

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top