ELIZA - Al- Xoramiy nomidagi Toshkent Axborot Texnalogiyalari Universiteti
- Sun’iy intellekt va neyron tarmoqlari fanidan Mustaqil ish
ELIZA haqida? - Odamlar bilan tabiiy til o'zaro ta'siriga ega kompyuter dasturi yani odam bilan suhbatni davom ettirishga harakat qiladigan bot dasturi.
- 1966 yilda MITda Jozef Vayzenbaum tomonidan ishlab chiqilgan
- Nomi Pigmalion haqidagi afsonaga ishoradir
Eliza qanday ishlaydi? - 1) Kalit so'zlar uchun kiritilgan jumlalarni skanerlaydi
- Kalit so'zlar daraja/ustunlik raqamiga ega bo'lishi mumkin
- Vergul/nuqta chegaralovchilari -> faqat bitta iboralar
- 2) Kiritilgan gaplarni o'zgartirish qoidalariga ko'ra tahlil qiladi - gapni qismlarga ajratadi kalit so'z + transformatsiya qoidasi = skript
- 3) Dekompozitsiya qoidalari bilan bog'liq qayta yig'ish qoidalari asosida yaratilgan javoblar.
Texnik muammolar - kalit so'zlarni aniqlash,
- minimal kontekstni kashf qilish,
- tegishli transformatsiya qoidalarini tanlash,
- yo'qligida javoblar avlodikalit so'zlar, va
- ELIZA "skriptlari" uchun yakuniy imkoniyatlarni ta'minlash
Misol - ELIZA ning oddiy, ammo samarali dasturi bir xil vaziyatli NLP sifatida ishlaydi, chunki u berilgan kontekst uchun semantik ma'nolar bilan to'ldirilgan katta ma'lumotlar bazasiga ega bo'lishi shart emas; ELIZA ma'noga ahamiyat bermaydi.
- Masalan “meni boshim og‘riyapti”
- Qanchadan beri boshingiz og‘riyapti??
Elizaning ishlash jarayoni - Katta ma'lumotlar bazasini talab qilmaydi
- va “suhbatdosh" tomonidan ELIZA aytgan so'zlarning yashirin ma'nosini taxmin qilish
Dasturiy kod qismi - import string
- import re
- import random
- class Eliza:
- def __init__(self):
- self.keys = list(map(lambda x: re.compile(x[0], re.IGNORECASE), gPats))
- self.values = list(map(lambda x: x[1], gPats))
- def translate(self, text, vocabulary):
- words = text.lower().split()
- keys = vocabulary.keys();
- for i in range(0, len(words)):
- if words[i] in keys:
- words[i] = vocabulary[words[i]]
- return ' '.join(words)
-
def respond(self, text): - def respond(self, text):
- # find a match among keys
- for i in range(0, len(self.keys)):
- match = self.keys[i].match(text)
- if match:
- resp = random.choice(self.values[i])
- pos = resp.find('%')
- while pos > -1:
- num = int(resp[pos+1:pos+2])
- resp = resp[:pos] + \
- self.translate(match.group(num), gReflections) + \
- resp[pos+2:]
- pos = resp.find('%')
- if resp[-2:] == '?.': resp = resp[:-2] + '.'
- if resp[-2:] == '??': resp = resp[:-2] + '?'
- return resp
- return None
- gPats = [
- [r'Menga (.*) kerak',
- [ "Nima uchun sizga %1 kerak?",
- "Bu sizga %1 ni olishga yordam beradimi?",
- "Sizga %1 kerakmi?"]],
- [r'Nega siz ([^\?]*)\??',
- [ "Siz meni %1 emas deb o'ylaysizmi?",
- "Ehtimol, men %1 ga erishaman.",
- "Haqiqatan ham %1 qilishimni xohlaysizmi?"]],
- [r'Nega men ([^\?]*)\?? qila olmayman',
- [ "Siz %1 ga ega bo'lishingiz kerak deb o'ylaysizmi?",
- "Agar sizda %1 bo'lsa, nima qilgan bo'lardingiz?",
- "Bilmayman -- nega siz %1 qila olmaysiz?",
- "Siz haqiqatan ham sinab ko'rdingizmi?"]],
Do'stlaringiz bilan baham: |