სიმბოლური AI Jupyter ნოუთბუქი · Python

ცხოველთა საექსპერტო სისტემის დანერგვა

ეს არის პრაქტიკული ნოუთბუქი. წაიკითხე კოდი და შედეგები აქ, ან გაუშვი ინტერაქტიულად Google Colab-ში ან Jupyter-ში.

მაგალითი AI დამწყებთათვის სასწავლო პროგრამა-დან.

ამ ნიმუშში ჩვენ განვახორციელებთ ცოდნაზე დაფუძნებულ მარტივ სისტემას, რათა განვსაზღვროთ ცხოველი ზოგიერთი ფიზიკური მახასიათებლების საფუძველზე. სისტემა შეიძლება წარმოდგენილი იყოს შემდეგი AND-OR ხით (ეს არის მთელი ხის ნაწილი, ჩვენ შეგვიძლია მარტივად დავამატოთ კიდევ რამდენიმე წესი):

ჩვენი საკუთარი საექსპერტო სისტემების გარსი ჩამორჩენილი დასკვნის საშუალებით

შევეცადოთ განვსაზღვროთ ცოდნის წარმოდგენის მარტივი ენა წარმოების წესებზე დაყრდნობით. ჩვენ გამოვიყენებთ პითონის კლასებს, როგორც საკვანძო სიტყვებს წესების დასადგენად. არსებითად იქნებოდა 3 ტიპის კლასი:

  • Ask წარმოადგენს შეკითხვას, რომელიც უნდა დაუსვას მომხმარებელს. ის შეიცავს შესაძლო პასუხების კომპლექტს.
  • If წარმოადგენს წესს და ეს მხოლოდ სინტაქსური შაქარია წესის შინაარსის შესანახად
  • AND/OR არის კლასები, რომლებიც წარმოადგენენ ხის და/ან ტოტებს. ისინი უბრალოდ ინახავენ არგუმენტების სიას შიგნით. კოდის გასამარტივებლად, ყველა ფუნქციონალობა განისაზღვრება მშობლის კლასში Content
იტვირთება…

ჩვენს სისტემაში სამუშაო მეხსიერება შეიცავს ფაქტების სიას, როგორც ატრიბუტ-მნიშვნელობის წყვილებს. ცოდნის ბაზა შეიძლება განისაზღვროს, როგორც ერთი დიდი ლექსიკონი, რომელიც ასახავს მოქმედებებს (ახალი ფაქტები, რომლებიც უნდა იყოს ჩასმული სამუშაო მეხსიერებაში) პირობებთან, გამოხატული როგორც AND-OR გამონათქვამები. ასევე, ზოგიერთი ფაქტი შეიძლება იყოს Ask-ed.

იტვირთება…

უკან დასკვნის შესასრულებლად, ჩვენ განვსაზღვრავთ Knowledgebase კლასს. ის შეიცავს:

  • სამუშაო memory - ლექსიკონი, რომელიც ასახავს მნიშვნელობებს ატრიბუტებს
  • ცოდნის ბაზა rules ზემოთ განსაზღვრულ ფორმატში

ორი ძირითადი მეთოდია:

  • get ატრიბუტის მნიშვნელობის მისაღებად, საჭიროების შემთხვევაში დასკვნის გაკეთება. მაგალითად, get('color') მიიღებს ფერის სლოტის მნიშვნელობას (საჭიროების შემთხვევაში ითხოვს მნიშვნელობას და ინახავს მნიშვნელობას შემდგომი გამოყენებისთვის სამუშაო მეხსიერებაში). თუ ჩვენ ვთხოვთ get('color:blue'), ის ითხოვს ფერს და შემდეგ დააბრუნებს y/n მნიშვნელობას ფერის მიხედვით.
  • eval ასრულებს ფაქტობრივ დასკვნას, ანუ კვეთს AND/OR ხეს, აფასებს ქვემიზნებს და ა.შ.
იტვირთება…

ახლა მოდით განვსაზღვროთ ჩვენი ცხოველთა ცოდნის ბაზა და ჩავატაროთ კონსულტაცია. გაითვალისწინეთ, რომ ეს ზარი დაგისვამთ კითხვებს. თქვენ შეგიძლიათ უპასუხოთ აკრეფით y/n დიახ-არა კითხვებისთვის, ან ნომრის (0..N) მითითებით კითხვებისთვის, რომელთა პასუხები უფრო გრძელია, მრავალჯერადი არჩევანით.

იტვირთება…
გამოტანა
hair
y/n
sharp teeth
y/n
claws
y/n
forward-looking eyes
y/n
color
0. red-brown
1. black and white
2. other
has hooves
y/n
long neck
y/n
long legs
y/n
pattern
0. dark stripes
1. dark spots
'giraffe'

Experta-ს გამოყენება წინსვლის დასკვნისთვის

შემდეგ მაგალითში, ჩვენ შევეცდებით განვახორციელოთ წინა დასკვნა ცოდნის წარმოდგენის ერთ-ერთი ბიბლიოთეკის გამოყენებით, ექსპერტი. Experta არის ბიბლიოთეკა Python-ში წინა დასკვნის სისტემების შესაქმნელად, რომელიც შექმნილია კლასიკური ძველი სისტემის კლიპები-ის მსგავსი.

ჩვენ ასევე შეგვეძლო განგვეხორციელებინა წინ მიჯაჭვულობა მრავალი პრობლემის გარეშე, მაგრამ გულუბრყვილო განხორციელებები, როგორც წესი, არც თუ ისე ეფექტურია. უფრო ეფექტური წესების შესატყვისად გამოიყენება სპეციალური ალგორითმი რეტე.

იტვირთება…
გამოტანა
Collecting git+https://github.com/nilp0inter/experta
  Cloning https://github.com/nilp0inter/experta to /tmp/pip-req-build-7qurtwk3
  Running command git clone --filter=blob:none --quiet https://github.com/nilp0inter/experta /tmp/pip-req-build-7qurtwk3
  Resolved https://github.com/nilp0inter/experta to commit c6d5834b123861f5ae09e7d07027dc98bec58741
  Installing build dependencies ... [?25ldone
[?25h  Getting requirements to build wheel ... [?25ldone
[?25h  Preparing metadata (pyproject.toml) ... [?25ldone
[?25hRequirement already satisfied: frozendict~=2.4.6 in /opt/conda/envs/ai4beg/lib/python3.12/site-packages (from experta==1.9.5.dev1) (2.4.7)
Collecting schema~=0.6.7 (from experta==1.9.5.dev1)
  Downloading schema-0.6.8-py2.py3-none-any.whl.metadata (14 kB)
Downloading schema-0.6.8-py2.py3-none-any.whl (14 kB)
Building wheels for collected packages: experta
  Building wheel for experta (pyproject.toml) ... [?25ldone
[?25h  Created wheel for experta: filename=experta-1.9.5.dev1-py3-none-any.whl size=34804 sha256=888c459512a5e713f4b674caa9a0f96cfdf07ec0d6eb56cc318ce0653d218014
  Stored in directory: /tmp/pip-ephem-wheel-cache-1eeii9zy/wheels/3d/e8/bb/22d7956359603fa8dd679aa09f5b8efb3f29991c3986fdc787
Successfully built experta
Installing collected packages: schema, experta
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2/2 [experta]
Successfully installed experta-1.9.5.dev1 schema-0.6.8
იტვირთება…

ჩვენ განვსაზღვრავთ ჩვენს სისტემას, როგორც კლასს, რომელიც ქვეკლასებს KnowledgeEngine. თითოეული წესი განისაზღვრება ცალკეული ფუნქციით @Rule ანოტაციით, რომელიც განსაზღვრავს, როდის უნდა გააქტიურდეს წესი. წესის შიგნით, ჩვენ შეგვიძლია დავამატოთ ახალი ფაქტები declare ფუნქციის გამოყენებით, და ამ ფაქტების დამატება გამოიწვევს კიდევ რამდენიმე წესს, რომელიც გამოიძახება წინა დასკვნის ძრავით.

იტვირთება…

მას შემდეგ, რაც ჩვენ განვსაზღვრავთ ცოდნის ბაზას, ჩვენ ვავსებთ ჩვენს სამუშაო მეხსიერებას რამდენიმე საწყისი ფაქტებით და შემდეგ გამოვიძახებთ run() მეთოდს დასკვნის შესასრულებლად. შედეგად, თქვენ ხედავთ, რომ სამუშაო მეხსიერებას ემატება ახალი დასკვნა ფაქტები, მათ შორის ცხოველის შესახებ საბოლოო ფაქტი (თუ ჩვენ სწორად დავაყენეთ ყველა საწყისი ფაქტი).

იტვირთება…
გამოტანა
Animal is tiger
FactList([(0, InitialFact()),
          (1, Fact(color='red-brown')),
          (2, Fact(pattern='dark stripes')),
          (3, Fact('sharp teeth')),
          (4, Fact('claws')),
          (5, Fact('forward looking eyes')),
          (6, Fact('gives milk')),
          (7, Fact('mammal')),
          (8, Fact('carnivor')),
          (9, Fact(animal='tiger'))])

ეს გაკვეთილი არის Microsoft “AI for Beginners” კურსის ქართული თარგმანი, გავრცელებული MIT ლიცენზიით.