2008-09-24 26 views
169

Tôi đã học Lisp để mở rộng tầm nhìn của mình bởi vì tôi đã nghe nói rằng nó được sử dụng trong lập trình AI. Sau khi thực hiện một số khám phá, tôi vẫn chưa tìm thấy ví dụ AI hoặc bất cứ điều gì trong ngôn ngữ mà sẽ làm cho nó nghiêng về phía nó.Tại sao Lisp được sử dụng cho AI?

Có phải Lisp đã từng được sử dụng trong quá khứ vì nó đã có sẵn hay có thứ gì đó mà tôi chỉ thiếu?

+4

>… Vui lòng không giả định Lisp chỉ hữu ích cho Hoạt ảnh và Đồ họa, > AI, Tin sinh học, B2B và Thương mại điện tử, Khai thác dữ liệu, EDA/Semiconductor > ứng dụng, Hệ thống chuyên gia, Tài chính, Đại lý thông minh, Kiến thức > Quản lý, CAD cơ khí, Mô hình hóa và Mô phỏng, Ngôn ngữ tự nhiên, > Tối ưu hóa, nghiên cứu, phân tích rủi ro, lập kế hoạch, viễn thông và web > Chỉ vì đây là những điều duy nhất chúng xảy ra với > danh sách. --Kent Pitman – Avi

+1

Tôi không nghĩ rằng Lisp chỉ hữu ích cho AI, tôi chỉ tự hỏi tại sao nó được sử dụng cho nó. –

+0

Tôi sẽ thuật lại câu hỏi là "những tính năng của ngôn ngữ nào là cần thiết cho AI khó?" Đây là một câu hỏi hợp lý và hữu ích, và kết quả sẽ là chỉ có Lisp Forth & assembler có những gì nó cần để làm AI nặng. –

Trả lời

112

Lisp được sử dụng trong AI cho đến cuối những năm 1980. Trong những năm 80, mặc dù, Common Lisp đã được bán cho thế giới kinh doanh như là "ngôn ngữ AI"; phản ứng dữ dội buộc hầu hết các lập trình viên AI tới C++ trong một vài năm. Những ngày này, nguyên mẫu thường được viết bằng một ngôn ngữ động trẻ hơn (Perl, Python, Ruby, vv) và triển khai các nghiên cứu thành công thường là trong C hoặc C++ (đôi khi Java).

Nếu bạn tò mò về những năm 70 ... vâng, tôi đã không ở đó. Nhưng tôi nghĩ Lisp đã thành công trong nghiên cứu AI vì ba lý do (theo thứ tự quan trọng):

  1. Lisp là một công cụ tạo mẫu tuyệt vời. Đó là là tốt nhất trong một thời gian rất dài. Lisp vẫn tuyệt vời trong việc giải quyết một vấn đề mà bạn chưa biết cách giải quyết. Mô tả đó mô tả đặc tính của AI một cách hoàn hảo.
  2. Lisp hỗ trợ lập trình biểu tượng tốt. Old AI cũng là biểu tượng. Nó cũng là duy nhất trong lĩnh vực này trong một thời gian dài.
  3. Lisp rất mạnh mẽ. Phân biệt mã/dữ liệu yếu hơn để nó cảm thấy có thể mở rộng hơn các ngôn ngữ khác vì các chức năng và macro của bạn trông giống như các công cụ tích hợp sẵn.

Tôi không có Peter Norvig's old AI book, nhưng nó được coi là một cách hay để học lập trình thuật toán AI trong Lisp.

Tuyên bố từ chối trách nhiệm: Tôi là sinh viên tốt nghiệp về ngôn ngữ học tính toán. Tôi biết lĩnh vực xử lý ngôn ngữ tự nhiên tốt hơn rất nhiều so với các lĩnh vực khác. Có lẽ Lisp được sử dụng nhiều hơn trong các trường con khác.

+30

Lisp chắc chắn vẫn còn sống và đá trong thế giới máy học/ILP – SpaceghostAli

+10

Tôi đã có một khóa học đại học trong AI dạy trong C. Tôi đã có một khóa học sau đại học trong AI được giảng dạy từ cuốn sách của Norvig. Cuốn sách trong C tập trung vào các thuật toán và cấu trúc AI. Cuốn sách của Norvig cảm thấy như: "chúng ta hãy học LISP trong khi chúng ta đọc về lịch sử AI." Theo ý kiến ​​của tôi, một thời gian hoàn thành. –

+7

Một lý do mà mọi người dường như bỏ lỡ là John McCarthy đã viết Lisp và là một nhà khoa học máy tính rất có ảnh hưởng, đặc biệt trong lĩnh vực AI. Đương nhiên, rất nhiều công việc của ông đã được thực hiện tại Lisp, và do đó Lisp đã đạt được một chỗ đứng. – cha0site

6

Tôi đoán rằng một lý do lớn là tính linh hoạt của danh sách dưới dạng cấu trúc dữ liệu cơ bản.

vào thời điểm đó, có thể biến chúng thành tất cả các loại đối tượng hỗn hợp và những thứ mới như thông điệp và đa hình, làm cho ngôn ngữ đó trở thành ngôn ngữ được lựa chọn; không dành riêng cho AI, nhưng đối với các nhiệm vụ lớn, phức tạp. đặc biệt là khi họ đang thử nghiệm các khái niệm.

12

Tôi đoán luôn là ngôn ngữ chức năng, nó không phân biệt giữa mã và dữ liệu. Tất cả mọi thứ, bao gồm các định nghĩa chức năng và các cuộc gọi chức năng có thể được coi là danh sách và được sửa đổi giống như bất kỳ phần dữ liệu nào khác.

Vì vậy, tự kiểm tra, tự sửa đổi mã có thể được viết dễ dàng.

+10

Đó không phải vì nó hoạt động. Prolog có cùng thuộc tính - mọi thứ đều là "thuật ngữ" và các thuật ngữ là dữ liệu cũng như mã. (Prolog là một ngôn ngữ lập trình logic và cũng được sử dụng rất nhiều cho AI) –

4

Tôi nghĩ bạn nói đúng: Lisp là một công cụ tiện dụng để hack mọi thứ. Điều này là do nó không phân biệt nhiều giữa chương trình và dữ liệu. Điều này cho phép tin tặc thao tác các chức năng rất dễ dàng, giống như dữ liệu.

Nhưng lisp là khá khó khăn cho con người để đọc, với niềng răng và không phân biệt giữa dữ liệu và chương trình. Hôm nay, tôi sẽ không sử dụng lisp cho bất kỳ mã AI sản xuất (hoặc thậm chí có thể prototyping) nhưng rất nhiều sẽ thích python cho kịch bản.

Một điều cần xem xét là các thư viện/công cụ hiện có trong/liên quan đến ngôn ngữ. Tôi không ở trong một vị trí để so sánh các thư viện lisp với các thư viện python, nhưng tôi đoán các thư viện và nguồn mở quan trọng hơn rất nhiều so với trước đây.

Câu trả lời này được lấy cảm hứng từ sự so sánh sau đây giữa lisp và python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html

+2

Cá nhân tôi tìm thấy Lisp dễ đọc hơn hầu hết các ngôn ngữ và tôi chỉ học nó một vài tuần trước. Python là đặc biệt sạch sẽ so với hầu hết các ngôn ngữ, có, nhưng nếu bạn so sánh lisp với một cái gì đó như C++ nó là xa sạch hơn và dễ dàng hơn để đọc. Theo kinh nghiệm của tôi. – Zeusoflightning125

7

Một câu trả lời có thể là AI là một tập hợp các vấn đề rất khó, và Lisp là một ngôn ngữ tốt để giải quyết các vấn đề khó khăn, không chỉ AI.

Vì sao đó là: macro, hàm tổng quát và nội suy phong phú cho phép viết mã ngắn gọn và dễ dàng giới thiệu tóm tắt miền - đó là ngôn ngữ mà bạn có thể làm mạnh hơn. Đối với rất nhiều vấn đề đó là không cần thiết, và nó đi kèm với chi phí của riêng mình, nhưng đối với các vấn đề khác mà quyền lực là cần thiết để thực hiện bất kỳ tiến bộ.

22

Một lý do là nó cho phép bạn mở rộng ngôn ngữ bằng các cấu trúc cụ thể cho tên miền của bạn, làm cho nó hiệu quả, một ngôn ngữ cụ thể theo miền. Kỹ thuật này cực kỳ mạnh mẽ vì nó cho phép bạn giải thích về vấn đề mà bạn đang giải quyết, thay vì về việc xáo trộn các bit.

+0

Bạn có thể cung cấp hoặc liên kết đến một ví dụ về điều này không? – DuckMaestro

+8

@DuckMaestro: Trong khoảng 30 phút làm việc macro trong tuần này, tôi đã triển khai một phiên bản lỗi đặc biệt của SQL Select. Nó đi như thế này: (truy vấn SELECT * FROM dataset WHERE expr). –

4

Tôi nhớ đã nghe điều đó, là một ngôn ngữ chức năng, Lisp là một lựa chọn rất tốt để triển khai các thuật toán đệ quy. Có khả năng theo dõi một cây và làm việc theo cách của bạn trở lại là rất cần thiết khi xem xét các quá trình ra quyết định (traversal) và kết quả cuối cùng (nút lá).

Điều này đã được nói với tôi trong một khóa học AI tại trường đại học nơi chúng tôi nghiên cứu Lisp.

7

Tôi nghĩ rằng đó là sai lầm khi nghĩ về điều này chỉ bằng AI. Những thứ như AI-mùa đông và hiệu ứng thương mại trên lisp phổ biến là mất tập trung nếu bạn đang hỏi tại sao nó được sử dụng cho AI, không phải lý do tại sao nó không ... Điện thoại

Dù sao, tôi nghĩ rằng đó là vì hầu hết AI mã là mã nghiên cứu cơ bản. Lisp là một ngôn ngữ tuyệt vời cho lập trình thám hiểm, để thực hiện các thuật toán khó, để tự sửa đổi và thường xuyên sửa đổi mã. Nói cách khác, đối với mã nghiên cứu.

Hôm nay tôi sử dụng một số mã nghiên cứu (toán học, xử lý tín hiệu) vì nó linh hoạt và mạnh mẽ hơn hầu hết các ngôn ngữ trong khi vẫn tạo mã hiệu quả hơn hầu hết các ngôn ngữ. Tôi thường có thể nhận được hiệu suất trong khoảng +/- 2 nói tốc độ C++, nhưng tôi có thể thực hiện nhanh hơn nhiều, và xử lý phức tạp mà có thể mất nhiều thời gian hơn tôi nếu tôi sử dụng C++, java, C#.

Mặc dù vậy, chủ đề này vẫn đang đi lạc. Tôi nghĩ rằng mã AI chủ yếu được viết trong lisp chung một thời gian bởi vì nó là một cách tiếp cận mạnh mẽ để nghiên cứu mã. Nó vẫn là; nhưng khi thuật toán 'AI' trở nên được hiểu và khám phá tốt hơn, các phần của chúng dễ dạy và sử dụng hơn nhiều, vì vậy chúng xuất hiện trong các ngôn ngữ có hương vị của năm trong các khóa học trải qua. Từ đó, nó trở thành một vấn đề của những gì mọi người đã biết, những thư viện nào có sẵn, và những gì hoạt động tốt cho các nhóm lớn.

57

Lisp được sử dụng cho AI vì nó hỗ trợ việc triển khai phần mềm tính toán với các ký hiệu rất tốt. Biểu tượng, biểu thức biểu tượng và tính toán với những biểu tượng là cốt lõi của Lisp.

Khu vực AI điển hình cho máy tính có ký hiệu là: đại số máy tính, chứng minh định lý, hệ thống lập kế hoạch, chẩn đoán, viết lại hệ thống, biểu diễn tri thức và lý luận, ngôn ngữ logic, dịch máy, hệ thống chuyên gia và hơn thế nữa.

Đó là sau đó không có gì ngạc nhiên khi nhiều ứng dụng AI nổi tiếng trong các lĩnh vực này được viết bằng Lisp:

  • Macsyma như hệ thống đại số máy tính lớn đầu tiên.
  • ACL2 là một định lý được sử dụng rộng rãi, ví dụ được sử dụng bởi AMD.
  • DART là công cụ lập kế hoạch hậu cần được sử dụng trong cuộc chiến vùng Vịnh đầu tiên của quân đội Hoa Kỳ. Ứng dụng Lisp này một mình được cho là đã trả lại cho tất cả các khoản đầu tư của Mỹ trong nghiên cứu AI tại thời điểm đó.
  • SPIKE, ứng dụng lập kế hoạch và lập lịch cho Kính viễn vọng Không gian Hubble. Cũng được sử dụng bởi một số kính viễn vọng lớn khác.
  • CYC, một trong những hệ thống phần mềm lớn nhất được viết. Đại diện và lý luận trong lĩnh vực kiến ​​thức thông thường của con người.
  • KIM LOẠI, một trong những hệ thống dịch ngôn ngữ tự nhiên được sử dụng thương mại đầu tiên.
  • Trợ lý ủy quyền của American Express, kiểm tra các giao dịch thẻ tín dụng.

Có hàng nghìn ứng dụng trong các khu vực này được viết bằng Lisp. Rất phổ biến cho những người đó là họ cần những khả năng đặc biệt trong lĩnh vực xử lý biểu tượng. Một thực hiện ngôn ngữ đặc biệt có phiên dịch đặc biệt/trình biên dịch trong các lĩnh vực này trên đầu trang của Lisp. Lisp cho phép một để tạo ra các biểu diễn cho dữ liệu biểu tượng và các chương trình và có thể thực hiện tất cả các loại máy móc để thao tác các biểu thức này (công thức toán học, công thức logic, kế hoạch, ...).

(Lưu ý rằng rất nhiều ngôn ngữ lập trình mục đích chung khác được sử dụng trong AI, quá. Tôi đã cố gắng để trả lời tại sao đặc biệt là Lisp được sử dụng trong AI.)

+9

Có, trong lịch sử AI đã được nhiều hơn về tính toán biểu tượng hơn bất cứ điều gì khác. Các "* AI mùa đông *" trong những năm 80 có lẽ là một cuộc khủng hoảng của ** biểu tượng ** AI - trong thời gian đó có một sự hồi sinh quan tâm trong các phương pháp biểu tượng phụ (mạng thần kinh, học máy và vv). Triển khai Lisp thường khá yếu ở tính toán số. Tôi không biết liệu họ có cải tiến ở mặt trận này hay không. – MaD70

+2

@ MaD70: mùa đông AI vào những năm 80 là về AI nói chung. Quân đội đã ngừng nhiều tiền tài trợ và AI hầu như không thành công trong thị trường thương mại. Ngay cả những thứ mạng thần kinh đã tồn tại vào thời điểm đó. Nếu người ta thấy rằng AI sau đó là 'các phương pháp phát triển phần mềm mới' (sử dụng các quy tắc, logic, mạng nơ-ron, thu gom rác thải, ...) - điều đó cũng thất bại. Phần lớn trong số đó thậm chí còn không được sử dụng rộng rãi/thích ngày nay. –

+0

Ấn tượng của tôi vào lúc đó và nhìn lại là/khác: tôi nhớ rõ ràng sự hồi sinh của sự quan tâm, cả trong nghiên cứu và trên thị trường (thậm chí có cả bộ vi xử lý thần kinh chuyên dụng), trong các phương pháp biểu tượng phụ trong nửa sau thập niên 80/đầu thập niên 90, sau nhiều thập kỷ của chủ nghĩa tẩy chay (xem câu trả lời của tôi, nơi tôi đề cập đến ảnh hưởng của lời chỉ trích Minsky & Papert về perceptrons: http://stackoverflow.com/questions/683124/neural-networks-obsolete/1581071#1581071). – MaD70

Các vấn đề liên quan