Почему Lisp используется для ИИ?
Я изучал Lisp, чтобы расширить свои горизонты, потому что я слышал, что он используется в программировании ИИ. Проведя некоторое исследование, мне еще предстоит найти примеры ИИ или что-либо на языке, который сделает его более склонным к нему.
Использовался ли Lisp в прошлом, потому что он был доступен, или есть что-то, что мне просто не хватает?
Ответы
Ответ 1
Lisp Используется в ИИ до конца 1980-х годов. Однако в 80-е годы Common Lisp перепродан в бизнес-мире как "язык ИИ"; задержка заставила большинство программистов ИИ на С++ в течение нескольких лет. В наши дни прототипы обычно написаны на более раннем динамическом языке (Perl, Python, Ruby и т.д.), А реализации успешных исследований обычно на C или С++ (иногда Java).
Если вам интересно о 70-х... ну, меня там не было. Но я думаю, что Lisp был успешным в исследовании ИИ по трем причинам (в порядке важности):
- Lisp - отличный инструмент для создания прототипов. Это было самое лучшее в течение очень долгого времени. Lisp по-прежнему отлично справляется с проблемой, которую вы еще не знаете, как решить. Это описание отлично характеризует ИИ.
- Lisp хорошо поддерживает символическое программирование. Старый ИИ также был символическим. Он также был уникальным в этом отношении в течение длительного времени.
- Lisp очень мощный. Различие в коде/данных слабее, поэтому оно кажется более расширяемым, чем другие языки, потому что ваши функции и макросы выглядят как встроенные.
У меня нет старой книги А. И. Норвига, но он должен быть хорошим способом научиться программировать алгоритмы AI в Lisp.
Отказ от ответственности: я студент-градиент в области вычислительной лингвистики. Я знаю, что подполе обработки естественного языка намного лучше, чем другие поля. Может быть, Lisp используется больше в других подполях.
Ответ 2
Lisp используется для ИИ, поскольку он поддерживает реализацию программного обеспечения, которое очень хорошо вычисляет символы. Символы, символические выражения и вычисления с ними лежат в основе Lisp.
Типичные области ИИ для вычисления с символами были: компьютерной алгеброй, теоретическими доказательствами, системами планирования, диагностикой, системами перезаписи, представлением знаний и рассуждениями, логическими языками, машинным переводом, экспертными системами и т.д.
Неудивительно, что многие известные приложения AI в этих доменах были написаны в Lisp:
- Macsyma - первая большая система компьютерной алгебры.
- ACL2 как широко используемый теоретический метод, например, используемый AMD.
- DART как планировщик логистики, используемый во время первой войны в Персидском заливе военными США. Считается, что это приложение Lisp выплатило все инвестиции США в исследования ИИ в то время.
- SPIKE, приложение планирования и планирования для космического телескопа Хаббла. Также используется несколькими другими телескопами.
- CYC, одна из крупнейших программных систем, написанных. Представление и рассуждение в области знания человеческого здравого смысла.
- METAL, одна из первых коммерчески используемых систем перевода на естественном языке.
- American Express 'Assistator Assistator, который проверяет транзакции по кредитным картам.
В этих областях тысячи приложений написаны в Lisp. Очень распространено для них то, что им нужны специальные возможности в области символической обработки. Один реализует специальные языки, которые имеют специальные интерпретаторы/компиляторы в этих доменах поверх Lisp. Lisp позволяет создавать представления для символических данных и программ и может реализовывать все виды механизмов для управления этими выражениями (математические формулы, логические формулы, планы,...).
(Обратите внимание, что в ИИ также используется множество других языков программирования общего назначения. Я попытался ответить, почему именно Lisp используется в ИИ.)
Ответ 3
Одна из причин заключается в том, что он позволяет расширять язык с помощью конструкций, специфичных для вашего домена, что делает его эффективным языком для конкретного домена. Этот метод невероятно мощный, поскольку он позволяет вам рассуждать о проблеме , которую вы решаете, а не о перетасовке бит.
Ответ 4
Моя догадка всегда заключалась в том, что, будучи функциональным языком, он не различает код и данные. Все, включая определения функций и вызовы функций, можно рассматривать как списки и модифицировать, как и любые другие данные.
Таким образом, самоанализирующий, самомодифицирующийся код может быть легко написан.
Ответ 5
Один из возможных ответов заключается в том, что AI представляет собой набор очень сложных проблем, а Lisp - хороший язык для решения сложных задач, а не только AI.
Что это такое: макросы, общие функции и богатая интроспекция позволяют получить сжатый код и легкое введение абстракций домена - это язык, который вы можете сделать более мощным. Для многих проблем, которые не нужны, и это связано с его собственными издержками, но для других проблем, которые необходимы для достижения какого-либо прогресса.
Ответ 6
Я думаю, что неправильно думать об этом только с точки зрения ИИ. Такие вещи, как AI-winter и коммерческие эффекты на общий lisp, отвлекают, если вы спрашиваете, почему он использовался для ИИ, а не почему он не часто используется сейчас...
В любом случае, я думаю, это потому, что большая часть кода AI была в основном исследовательским кодом. lisp - отличный язык для поискового программирования, для реализации сложных алгоритмов, для самомодифицируемого и часто модифицированного кода. Другими словами, для кода исследования.
Сегодня я использую lisp для некоторых из моих исследовательских кодов (математика, обработка сигналов), потому что они более гибкие и мощные, чем большинство языков, но при этом создают более эффективный код, чем большинство языков. Обычно я могу получить производительность в пределах +/- 2, скажем, на скорости С++, но я могу реализовать вещи намного быстрее и справиться со сложностью, которая потребует гораздо большего времени, чем если бы я использовал С++, java, С#.
Тем не менее, это блуждает. Я думаю, что код AI был в основном написан общим lisp на некоторое время, потому что это мощный подход к исследованию кода. Это все еще есть; но поскольку алгоритмы "ИИ" стали лучше поняты и исследованы, части из них были намного легче обучать и использовать, поэтому они появились в языках, отличных от года, на курсах бакалавриата. Оттуда это становится проблемой того, что люди уже знают, какие библиотеки доступны и что хорошо работает для больших групп.
Ответ 7
Я бы предположил, что большой причиной была гибкость списков в качестве базовой структуры данных.
в то время, будучи способным превратить их во всевозможные составные объекты, а новые вещи, такие как пропуски сообщений и полиморфизм, сделали его языком выбора; не специально для ИИ, а для больших, сложных задач. особенно когда они экспериментировали с концепциями.
Ответ 8
Я думаю, что вы правы: Lisp был удобным инструментом для взлома. Это связано с тем, что он не различал много программ и данных. Это позволило хакерам легко манипулировать функциями, точно так же, как и данные.
Но Lisp довольно сложно для людей читать, с его фигурными скобками и без различия между данными и программой. Сегодня я не буду использовать Lisp для любого производственного AI-кода (или, возможно, даже для прототипирования), но предпочел бы python для скриптинга.
Еще одна вещь, которую следует учитывать, это существующие библиотеки/инструменты в /, связанные с языком. Я не могу сравнивать библиотеки Lisp с библиотеками python, но я думаю, что библиотеки и open source имеют гораздо больше времени, чем раньше.
Этот ответ был вдохновлен следующим сравнением между Lisp и python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
Ответ 9
Я помню, что, будучи функциональным языком, Lisp был очень хорошим выбором для реализации рекурсивных алгоритмов. Возможность отслеживать дерево и работать обратный путь имеет важное значение при рассмотрении процессов принятия решений (обход) и конечного результата (лист node).
Это было сказано мне во время курса ИИ в университете, где мы изучали Lisp.
Ответ 10
Более циничный ответ может быть "потому что он потерял политическую войну с ИИ между Японией и США в 1980-х годах". Существует интересное сообщение в котором говорится о влиянии кончины компьютерной системы Fifth Generation на Prolog.