Por que o Lisp é usado para IA? [fechadas]

185

Eu tenho aprendido o Lisp a expandir meus horizontes porque ouvi dizer que ele é usado na programação de IA. Depois de explorar um pouco, ainda não encontrei exemplos de IA ou qualquer coisa na linguagem que a tornasse mais inclinada a isso.

O Lisp foi usado no passado porque estava disponível ou há algo que estou perdendo?

Cristián Romo
fonte
5
> ... Por favor, não assuma que o Lisp é útil apenas para Animação e Gráficos,> AI, Bioinformática, B2B e E-Commerce, Mineração de Dados, EDA / Semicondutor> aplicativos, Sistemas especialistas, Finanças, Agentes inteligentes, Conhecimento> Gerenciamento, CAD mecânico , Modelagem e Simulação, Linguagem Natural,> Otimização, Pesquisa, Análise de Risco, Planejamento, Telecomunicações e Criação de Web, apenas porque estas são as únicas coisas a que elas aconteceram. --Kent Pitman
Avi
2
Eu não acho que o Lisp seja útil apenas para IA, estou apenas me perguntando por que é usado para isso.
Cristián Romo
Eu reformularia a pergunta como "quais recursos de um idioma são necessários para a IA difícil?" Essa é uma pergunta válida e útil, e o resultado será que apenas Lisp Forth & assembler têm o que é preciso para fazer uma IA difícil.
Albert van der Horst

Respostas:

126

O Lisp foi usado na IA até o final dos anos 80. Nos anos 80, porém, o Common Lisp foi vendido em excesso ao mundo dos negócios como a "linguagem da IA"; a reação forçou a maioria dos programadores de IA a C ++ por alguns anos. Atualmente, os protótipos geralmente são escritos em uma linguagem dinâmica mais jovem (Perl, Python, Ruby, etc) e as implementações de pesquisas bem-sucedidas geralmente são em C ou C ++ (às vezes Java).

Se você está curioso sobre os anos 70 ... bem, eu não estava lá. Mas acho que o Lisp foi bem-sucedido na pesquisa de IA por três razões (em ordem de importância):

  1. Lisp é uma excelente ferramenta de prototipagem. Foi o melhor por muito tempo. O Lisp ainda é ótimo em resolver um problema que você ainda não sabe resolver. Essa descrição caracteriza a IA perfeitamente.
  2. O Lisp suporta bem a programação simbólica. A IA antiga também era simbólica. Também foi único nesse sentido por um longo tempo.
  3. Lisp é muito poderoso. A distinção de código / dados é mais fraca, por isso parece mais extensível do que outros idiomas, porque suas funções e macros se parecem com o material interno.

Eu não tenho o antigo livro de IA de Peter Norvig , mas é uma boa maneira de aprender a programar algoritmos de IA no Lisp.

Disclaimer: Eu sou um estudante de graduação em linguística computacional. Conheço o subcampo do processamento de linguagem natural muito melhor do que os outros campos. Talvez o Lisp seja usado mais em outros subcampos.

Nathan Shively-Sanders
fonte
33
Lisp é definitivamente ainda está vivo e chutando na aprendizagem de máquina / mundo ILP
HasaniH
13
Eu tive um curso de graduação em IA ministrado em C. Eu tive um curso de pós-graduação em IA ministrado no livro de Norvig. O livro em C focou em algoritmos e estruturas de IA. O livro de Norvig parecia: "vamos aprender LISP enquanto lemos sobre a história da IA". Na minha opinião, uma perda total de tempo.
San Jacinto
7
Uma das razões pelas quais todos parecem sentir falta é que John McCarthy escreveu Lisp e era um cientista da computação muito influente, especificamente no campo da IA. Naturalmente, grande parte de seu trabalho foi implementado no Lisp, e assim o Lisp ganhou uma posição.
usar o seguinte comando
2
O Common Lisp nunca foi concebido para ser a linguagem AI , foi criado para ser usado na indústria. Para pesquisa, o esquema geralmente é usado. E nunca, jamais julgue um idioma por sua idade - não é proporcional à frescura e vice-versa. C é velho, mas legal, então por que a idade de Lisp importa?
Luka Ramishvili
1
Não sei se o Lisp foi usado para IA até o final dos anos 80. No ano de 2016, o MIT continua sendo uma instituição bastante reconhecida no campo da IA. O livro recomendado para robótica de graduação do MIT curso é Artificial Intelligence by Patrick Henry Winston. Na 2ª edição, os capítulos de programação desse livro se ramificaram em seu próprio livro sincronizado - Lisp. Como o nome indica, a programação é totalmente in Lisp. people.csail.mit.edu/phw/Books/LISPBACK.HTML
Hack-R
61

O Lisp é usado para IA porque suporta a implementação de software que calcula muito bem com símbolos. Símbolos, expressões simbólicas e computação com elas estão no cerne do Lisp.

As áreas típicas de IA para computação com símbolos foram: álgebra computacional, prova de teoremas, sistemas de planejamento, diagnóstico, sistemas de reescrita, representação e raciocínio de conhecimento, linguagens lógicas, tradução automática, sistemas especializados e muito mais.

Não é de surpreender que muitos aplicativos de IA famosos nesses domínios tenham sido escritos no Lisp:

  • Macsyma como o primeiro grande sistema de álgebra computacional.
  • ACL2 como um provador de teoremas amplamente utilizado, por exemplo, usado pela AMD.
  • DART como planejador de logística usado durante a primeira guerra do Golfo pelos militares dos EUA. Diz-se que apenas esse aplicativo Lisp pagou todos os investimentos dos EUA em pesquisa de IA naquele momento.
  • SPIKE, o aplicativo de planejamento e programação do Telescópio Espacial Hubble. Também usado por vários outros grandes telescópios.
  • CYC, um dos maiores sistemas de software criados. Representação e raciocínio no domínio do conhecimento do senso comum humano.
  • METAL, um dos primeiros sistemas de tradução de idiomas naturais usados ​​comercialmente.
  • Assistente do Autorizador da American Express, que verifica as transações com cartão de crédito.

Existem milhares de aplicativos nessas áreas escritos em Lisp. Muito comum para eles é que eles precisam de recursos especiais na área de processamento simbólico. Um implementa linguagens especiais que têm intérpretes / compiladores especiais nesses domínios sobre o Lisp. O Lisp permite criar representações para dados e programas simbólicos e pode implementar todos os tipos de máquinas para manipular essas expressões (fórmulas matemáticas, fórmulas lógicas, planos, ...).

(Observe que muitas outras linguagens de programação de uso geral também são usadas na AI. Tentei responder por que especialmente o Lisp é usado na AI.)

Rainer Joswig
fonte
10
Sim, historicamente, a IA era mais sobre computação simbólica do que qualquer outra coisa. O " inverno da IA " nos anos 80 foi provavelmente mais uma crise de IA simbólica - naquele tempo, ressurgiu o interesse em métodos sub-simbólicos (redes neurais, aprendizado de máquina e assim por diante). As implementações de Lisp eram geralmente bastante fracas na computação numérica. Não sei se eles melhoraram nessa frente.
MaD70
2
@ MaD70: o inverno da IA ​​nos anos 80 era sobre IA em geral. Os militares interromperam grande parte do financiamento e a IA falhou principalmente no mercado comercial. Até o material da rede neural que existia naquela época. Se alguém vê a IA como 'novos métodos de desenvolvimento de software' (usando regras, lógica, redes neurais, coleta de lixo, ...) - isso também falhou. Muito disso nem hoje é amplamente utilizado / apreciado.
Rainer Joswig
Minha impressão na época e em retrospecto foi / é diferente: lembro-me claramente do ressurgimento de interesse, tanto na pesquisa quanto no mercado (havia até processadores neurais dedicados), em métodos sub-simbólicos na segunda metade dos anos 80 / início dos anos 90, após décadas de ostracismo (veja minha resposta, onde menciono a influência das críticas de Minsky e Papert aos perceptrons: stackoverflow.com/questions/683124/neural-networks-obsolete/… ).
MaD70
1
A IA simbólica falhou, IMO, por causa do hardware da época (pouco potente / barato) E porque esse contraste severo entre campos simbólicos e sub simbólicos impediu qualquer sinergia. Wrt "ainda hoje amplamente utilizado / apreciado": suspeito que algumas das técnicas desenvolvidas em IA (em ambos os campos) sejam muito mais utilizadas do que se pode pensar (não mais sensacionalistas, felizmente).
MaD70
Apenas um exemplo: no final dos anos 90, alguns de meus conhecidos me perguntaram sobre a viabilidade de um projeto de controle de qualidade no setor têxtil. De cabeça para baixo, mencionei as redes neurais como uma abordagem promissora para esse problema de discriminação (essencialmente classificação de imagens). Com apenas essa sugestão, em algumas semanas eles encontraram um software já desenvolvido, usando redes neurais, e adquiriram seus direitos de distribuição - muito mais sensatos do que embarcar em um projeto envolvendo P&D.
MaD70 02/10/10
22

Um dos motivos é que ele permite estender o idioma com construções específicas para o seu domínio, tornando-o efetivamente um idioma específico do domínio. Essa técnica é incrivelmente poderosa, pois permite que você raciocine sobre o problema que está resolvendo, em vez de embaralhar bits.

dsm
fonte
Você pode fornecer ou vincular um exemplo disso?
DuckMaestro 25/10
9
@ DuckMaestro: Em cerca de 30 minutos de trabalho em macro nesta semana, implementei uma versão ad-hoc com erros do SQL Select. É assim: (consulta SELECT * FROM conjunto de dados WHERE expr).
Paul Nathan
Incorporando um solver álgebra em Lisp youtube.com/... Embedding uma linguagem circuito em Lisp youtube.com/... Embedding Lisp para Lisp youtube.com/... Embedding Prolog em Lisp - Basta assistir toda a série
aoeu256
youtube.com/watch?v=SLcZXbyGC3E <- Este é bom
aoeu256
12

Meu palpite sempre foi que, sendo uma linguagem funcional, ela não diferencia entre código e dados. Tudo, incluindo definições de funções e chamadas de funções, pode ser tratado como lista e modificado como qualquer outro dado.

Portanto, códigos auto-inspecionantes e auto-modificáveis ​​podem ser escritos facilmente.

aib
fonte
10
Isso não é porque é funcional. Prolog tem a mesma propriedade - tudo é um "termo" e termos são dados e também código. (Prolog é uma linguagem de programação lógica e também muito utilizada para AI)
Hugh Allen
O termo extravagante para isso é chamado Homoiconicity - en.wikipedia.org/wiki/Homoiconicity
Morten Jensen
9

Uma resposta possível é que a IA é uma coleção de problemas muito difíceis, e o Lisp é uma boa linguagem para resolver problemas difíceis, não apenas a IA.

Quanto ao motivo: macros, funções genéricas e rica introspecção permitem código conciso e fácil introdução de abstrações de domínio - é uma linguagem que você pode tornar mais poderosa. Para muitos problemas, isso é desnecessário e tem seus próprios custos, mas para outros problemas essa energia é necessária para avançar.

Rico
fonte
7

Eu acho errado pensar nisso apenas em termos de IA. Coisas como o inverno da IA ​​e os efeitos comerciais no ceceio comum são perturbadores se você está perguntando por que foi usado para a IA, não por que não é usado com frequência agora ...

Enfim, acho que é porque a maior parte do código de IA era essencialmente de pesquisa. O Lisp é uma ótima linguagem para programação exploratória, para implementação de algoritmos difíceis, para código auto-modificado e frequentemente modificado. Em outras palavras, para código de pesquisa.

Hoje, uso o lisp para alguns dos meus códigos de pesquisa (matemática, processamento de sinais) porque é mais flexível e poderoso que a maioria das linguagens, enquanto gera um código mais eficiente que a maioria das linguagens. Normalmente, posso obter desempenho com um fator de +/- 2 da velocidade c ++, mas posso implementar as coisas muito mais rapidamente e lidar com a complexidade que levaria muito mais tempo do que eu usaria c ++, java, c #.

Isso está vagando fora do tópico. Eu acho que o código de IA foi escrito principalmente em linguagem comum por um tempo, porque é uma abordagem poderosa para pesquisar código. Ainda é; mas, à medida que os algoritmos de IA se tornaram mais compreendidos e explorados, algumas partes eram muito mais fáceis de ensinar e usar; portanto, eles apareceram nos idiomas de sabor do ano nos cursos de graduação. A partir daí, torna-se uma questão do que as pessoas já sabem, quais bibliotecas estão disponíveis e o que funciona bem para grandes grupos.

simon
fonte
6

Eu acho que um grande motivo foi a flexibilidade das listas como uma estrutura básica de dados.

na época, ser capaz de transformá-los em todos os tipos de objetos compostos e em coisas novas como passagens de mensagens e polimorfismo, tornou a linguagem da escolha; não especificamente para IA, mas para tarefas grandes e complexas. especialmente quando eles estavam experimentando conceitos.

Javier
fonte
4

Eu acho que você está certo: o Lisp foi uma ferramenta útil para invadir as coisas. Isso ocorre porque não distinguiu muito entre programa e dados. Isso permitiu que hackers manipulassem funções com muita facilidade, assim como dados.

Mas o ceceio é bastante difícil para os humanos lerem, com seus aparelhos e a não distinção entre dados e programa. Hoje, não usarei lisp para nenhum código de IA de produção (ou talvez até prototipagem), mas preferiria muito o python para scripts.

Outra coisa a considerar são as bibliotecas / ferramentas existentes em / relacionadas ao idioma. Não estou em condições de comparar bibliotecas lisp com bibliotecas python, mas acho que bibliotecas e código aberto importam muito mais agora do que antes.

Esta resposta foi inspirada na seguinte comparação entre lisp e python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

amit
fonte
2
Pessoalmente, acho o Lisp mais fácil de ler do que a maioria dos idiomas e só o aprendi algumas semanas atrás. O Python é especialmente limpo em comparação com a maioria das linguagens, sim, mas se você comparar o lisp com algo como C ++, é muito mais limpo e fácil de ler. Na minha experiência de qualquer maneira.
Zeusoflightning125
4

Lembro-me de ouvir que, sendo uma linguagem funcional, o Lisp foi uma ótima opção para implementar algoritmos recursivos. Ser capaz de rastrear uma árvore e voltar ao trabalho é essencial ao considerar os processos de tomada de decisão (transversal) e o resultado final (nó da folha).

Isso me foi dito durante um curso de IA na universidade onde estudamos o Lisp.

mlambie
fonte
1
As macros no Lisp são mais poderosas do que qualquer outra coisa, permitindo implementar o OOP em apenas 50 linhas do código Lisp e o REPL permite editar seu programa enquanto ele ainda está em execução ... Somente o Lisp pode editar seu próprio código-fonte facilmente ...
aoeu256