10.5. Az internetes bevásárlás világa

Ebben az alfejezetben az internetes bevásárlással kapcsolatos tudás egy részét fogjuk kódolni. Egy olyan vásárló-kutató ágenst fogunk tervezni, amely segíti a vásárlónak az interneten megtalálni a termékek ajánlatait. A vásárló ágens a vásárlótól a termék leírását kapja és feladata a termék eladását hirdető weblapok listáját előállítani. Egyes esetekben a vásárló leírása pontos lesz, mint amilyen például a Coolpix 995 digitális fényképezőgép – a feladat ekkor a legjobb ajánlatot tevő boltot megtalálni. Más esetekben a leírás csak részben lesz specifikált, mint például a 300 dollárnál olcsóbb digitális fényképezőgép, és az ágens kénytelen lesz különböző termékeket összehasonlítani.

A vásárló ágens környezete az egész világháló – ami semmiképpen sem egy játékkörnyezet. Ugyanaz a komplex, folyamatosan evolváló környezet, amit az emberek milliói mindennap használnak. Az ágens érzetei weblapok, de amíg egy emberi webfelhasználó a lapokat a képernyőre kivetített pixelek formájában látja, a vásárló ágens a lapokat karakterfüzérek alakjában fogja érzékelni, ahol közönséges szavak keverednek a HTML jelölőnyelv formattáló utasításaival. A 10.7. ábra egy weblapot mutat és a hozzá tartozó HTML-karakterfüzért. A vásárló ágens érzékelési problémájának lényege a hasznos információnak az ilyen fajtájú érzetből való kiemelése.

Világos, hogy weblapokat érzékelni egyszerűbb, mint mondjuk, Kairóban taxi vezetése közben érzékeléseket szerezni. Az internetes érzékelés mégsem mentes a bonyodalmaktól. A 10.7. ábrán látható weblap igen egyszerű a valódi vásárlási lapokhoz képest, ahol találkozni lehet olyan elemekkel, mint sütik, Java, Javascript, Flash, robot kizáró protokollok, elgépelt HTML, hangfájlok, filmfelvételek és egy JPEG kép részeként megjelenő szövegek. Egy ágens, amely képes az internet egészével elbánni, majdnem olyan bonyolult, mint egy robot, amely a valódi világban képes mozogni. Mi egy egyszerű ágensre összpontosítunk, amely e bonyodalmak zömét nem fogja figyelembe venni.

Az ágens első feladata, hogy releváns termékajánlatokat találjon (majd később meglátjuk, hogy a releváns ajánlatok közül hogyan kell kiválasztani a legjobbat). Legyen a lekérdezés a terméknek a felhasználó által begépelt leírása (például „laptop”), akkor egy weblap a lekérdezés szempontjából releváns ajánlat, ha a lap releváns és tényleg egy ajánlat. A lappal kapcsolatos URL-t is nyomon fogjuk követni:

RelevánsAjánlat(lap, url, lekérdezés) Releváns(lap, url, lekérdezés) Ajánlat(lap)

A legmodernebb laptopot bemutató lap releváns lenne, ha azonban a vásárlásra nem ad lehetőséget, nem ajánlat. Egyelőre azt fogjuk mondani, hogy egy lap ajánlat, ha a lapon egy HTML-hivatkozáson, vagy űrlapon belül a „vásárol” vagy az „ára” szavakat tartalmazza. Más szóval, ha a lap tartalmaz egy „<a … vásárol … </a>” alakú füzért, akkor ez egy ajánlat. A „vásárol” helyett lehetne az „ára”, illetve az „a” helyett a „form”. Felírhatjuk ennek axiomatikus alakját:

10.7. ábra - Egy absztrakt online bolt weblapja, ahogy egy böngészőt használó ember látja (felül), és a hozzá tartozó HTML-füzér, ahogy azt a böngésző vagy a vásárló ágens látja (alul). A HTML-ben a < és a > közötti karakterek a jelölő direktívák, amelyek meghatározzák, hogy a lapot hogyan kell kijelezni. Az <i>Válasszon</i> füzér például jelzi, hogy dőlt betűre kell átkapcsolni, a Válasszon szót kijelezni és a dőlt betű használatát befejezni. Egy lapazonosító, mint amilyen a http://absz-bolt.com/zene az ún. egységes erőforrás azonosító (uniform resource locator, URL).Az <a href="url">hivatkozás</a> bejelölés jelzi, hogy az url felé létesíteni kell egy hipertextkapcsolatot a hivatkozó szöveg (anchor text) hivatkozással.
Egy absztrakt online bolt weblapja, ahogy egy böngészőt használó ember látja (felül), és a hozzá tartozó HTML-füzér, ahogy azt a böngésző vagy a vásárló ágens látja (alul). A HTML-ben a < és a > közötti karakterek a jelölő direktívák, amelyek meghatározzák, hogy a lapot hogyan kell kijelezni. Az <i>Válasszon</i> füzér például jelzi, hogy dőlt betűre kell átkapcsolni, a Válasszon szót kijelezni és a dőlt betű használatát befejezni. Egy lapazonosító, mint amilyen a http://absz-bolt.com/zene az ún. egységes erőforrás azonosító (uniform resource locator, URL).Az <a href="url">hivatkozás</a> bejelölés jelzi, hogy az url felé létesíteni kell egy hipertextkapcsolatot a hivatkozó szöveg (anchor text) hivatkozással.

Ajánlat(lap) ⇔ (Címkében(„a”, füzér, lap) ∨

Címkében(„form”, füzér, lap))

∧ (Benne(„vásárol”, füzér)) ∨ Benne(„ára”, füzér))

Címkében(„címke”, füzér, lap) ⇔ Benne(„<” + címke + füzér + „</” + címke, lap)

Benne(alfüzér, füzér) ⇔ ∃i füzér[i : i + Hossza(alfüzér)] = alfüzér

Most szükséges releváns lapokat találni. A stratégia az online bolt honlapjától kezdeni, és azokkal a lapokkal foglalkozni, amelyet a releváns linkek mentén el lehet érni.[100] Ágensünk számos boltról fog tudni, például:

Amazon OnlineBolt HonLap(Amazon, amazon.com”)

Ebay OnlineBolt HonLap(Ebay, ebay.com”)

ÁltBolt OnlineBolt HonLap(ÁltBolt, ált-bolt.com”)

E boltok termékeit termékkategóriákba sorolják, és a fő kategóriákhoz linkeket biztosítanak a honlaptól kiindulva. Kisebb kategóriákat a releváns linkek láncának követésével lehet elérni, és végül az ajánlatokhoz is eljutunk. Más szóval, egy lap a lekérdezés szempontjából releváns, ha a bolt honlapjától a releváns kategóriakapcsolat láncán át elérhető, és egy további link követésével a termékajánlathoz is eljutunk:

Releváns(lap, url, lekérdezés) ⇔

bolt, hon boltOnLineBoltHonlap(bolt,hon)

∧ ∃url2RelevánsLánc(hon, url2, lekérdezés) ∧ Link(url2, url)

lap = VeddElőLapot(url)

A Link(tól, ig) predikátum jelentése, hogy a tól URL-től az ig URL-ig létezik egy hiperhivatkozás (lásd 10.13. feladat). Hogy a RelevánsLánc-ot definiálhassuk, nem valamilyen régi hiperhivatkozást kell követnünk, hanem azokat, amelyeknél a csatolt hivatkozó szöveg jelzi, hogy a hivatkozás a lekérdezés szempontjából releváns. Erre a LinkSzöveg(tól, ig, szöveg)-et fogjuk használni, melynek jelentése, hogy létezik egy hivatkozás tól-tól ig-ig, szöveg-gel mint hivatkozó szöveggel. A start és a vége URL-ek közötti hivatkozáslánc a d leírás szempontjából releváns, ha minden hivatkozás hivatkozó szövege a d szempontjából releváns kategórianév. A lánc létezését egy rekurzív definíció biztosítja, az üres lánccal (start = vége) mint kiinduló állapottal:

RelevánsLánc(start, vége, lekérdezés) ⇔ (start = vége)

∨ (∃u, szöveg LinkSzöveg(start, u, szöveg)

RelevánsKategóriaNév(lekérdezés, szöveg)

RelevánsLánc(u, vége, lekérdezés))

Most definiálnunk kell, hogy egy lekérdezés szempontjából egy szöveg mikor lesz egy RelevánsKategóriaNév. Először tudnunk kell a füzéreket és az általuk megnevezett kategóriákat kapcsolatba hozni. Jó lesz erre a Név(s, c), amely azt állítja, hogy az s füzér a c kategória neve – mondhatjuk például hogy Név(„laptop”, LaptopSzámítógép). A Név predikátumra további példák a 10.8. ábrán találhatók. A következő a relevancia definiálása. Tegyük fel, hogy a lekérdezés a „laptop”. RelevánsKategóriaNév(lekérdezés, szöveg) igaz lesz, feltéve, hogy az alábbiak közül egy teljesül:

  • A szöveg és a lekérdezés ugyanazt a kategóriát nevezi meg – például „laptop számítógép” és „laptop”.

  • A szöveg egy szuperkategóriát nevez meg, mint például „számítógép”.

  • A szöveg egy alkategóriát nevez meg, mint például „ultrakönnyű laptop”.

A RelevánsKategóriaNév logikai definíciója az alábbi:

RelevánsKategóriaNév(lekérdezés, szöveg) ⇔

c1, c2Név(lekérdezés, c1) ∧ Név(szöveg, c2) ∧ (c1c2) ∨ (c2c1) (10.1)

Máskülönben a hivatkozó szöveg irreleváns, mert egy, ezen a vonulaton kívüli kategóriát nevez meg, mint például a „mainframe számítógép” vagy „pázsit és kert”.

Hogy képesek legyünk releváns kapcsolatokat követni, lényeges, hogy rendelkeznünk kell a termékek gazdag kategóriahierarchiájával. E hierarchia legfelső része hasonlíthat például a 10.8. ábrán látható hierarchiára. Nem lenne jó ötlet az összes lehetséges bevásárlási kategóriát listázni, mert a bevásárlónak mindig lehetnek új kívánalmai, és a termékgyártók mindig új termékekkel fognak előrukkolni, hogy a vásárlókat kielégítsék (elektromos térdmelegítő?). Egy, mondjuk ezer kategóriából álló ontológia azonban a vásárlók többsége számára hasznos eszköznek fog bizonyulni.

10.8. ábra - (a) A termékkategóriák taxonómiája. (b) Ezen kategóriák számára a hivatkozó szövegek.
(a) A termékkategóriák taxonómiája. (b) Ezen kategóriák számára a hivatkozó szövegek.

A termékhierarchián túlmenően rendelkeznünk kell a kategórianevek gazdag szótárával. Az élet sokkal egyszerűbb lenne, ha a kategóriák és az azokat megnevező füzérek között egy-egyértelmű kapcsolat állna fenn. A szinonima (synonymy) problémáját – két név, például „laptop számítógép” és „laptop” ugyanazon kategória számára – már láttuk. Van még továbbá az egyértelműsítés (ambiguity) problémája – egy név két vagy több különböző kategória számára. Ha például a 10.8. (b) ábrán látható tudásbázishoz a:

Név(„CD”, DiplomataJármű)

mondatot is hozzáadjuk, akkor a „CD” két különböző kategóriát fog megnevezni.

A szinonimák és az egyértelműsítés lényegesen megnövelheti az ágens által követendő utak számát, és néha megnehezítheti annak eldöntését, hogy egy adott lap tényleg releváns-e. Sokkal komolyabb probléma, hogy a felhasználó által begépelhető leírások vagy a bolt által használt kategórianevek választéka igen széles lehet. A link például a „laptop”-ról szólhat, holott a tudásbázis csak „laptopok”-ról tud, vagy pedig a felhasználó „egy számítógépet” keres, „amely elférne a Boeing 737 turistaosztályán az étkezőasztalkán”. Lehetetlen előre végig felsorolni egy kategória megnevezéseinek minden változatát, így az ágensnek bizonyos esetekben tovább kell következtetnie, hogy kiderítse, érvényes-e a Név reláció. A legrosszabb esetben ez a természetes nyelv teljes megértését igényelné, mely téma tárgyalását a 22. fejezetig késleltetjük. A gyakorlatban néhány egyszerű szabály, mint például engedélyezni, hogy a „laptop” illeszkedjen a „laptopok” kategóriára, igen jól szuperál. A 10.5. feladatban megkérjük majd az olvasót, hogy egy ilyen szabálykészletet fejlesszen ki, azt követően, hogy az online boltokban egy kicsit körbenézett.

Az előbbi bekezdésben megadott logikai definíció, valamint a termékkategóriákat és a megnevezési konvenciókat tartalmazó megfelelő tudásbázisok birtokában készek vagyunk-e már, hogy a lekérdezésünkre vonatkozó releváns ajánlatok halmazát kikövetkeztető algoritmust alkalmazzuk? Még nem! A hiányzó elem a VeddElőLapot(url) függvény, amely egy adott url címen lévő HTML lapra hivatkozik. Az ágens nem rendelkezik a tudásbázisában minden URL lap tartalmával, és az ilyen tartalom kitalálására vonatkozó explicit szabályokkal sem rendelkezik. Ehelyett elintézhetjük, hogy amikor egy részcél a VeddElőLapot függvényre hivatkozik, a megfelelő HTTP eljárás fog meghívódni. A következtető gép számára ily módon mintha az egész világháló jelenne meg a tudásbázisában. Ez az ún. procedurális kibővítésként (procedural attachment) ismert általános módszer egy példája, ahol az egyes predikátumokat és függvényeket speciális rendeltetésű eljárásokkal kezeljük.

10.5.1. Ajánlatok összehasonlítása

Tegyük fel, hogy az előbbi részfejezet következtetési eljárása a „laptop” lekérdezésünkre több ajánlatlapot is adott vissza. Az ajánlatok összehasonlításához az ágensnek a lapokból releváns információt – ár, sebesség, diszkkapacitás, súly stb. – ki kell nyerni. Az előbb említett okoknál fogva, valódi weblapok esetén, ez igen nehéz feladatnak bizonyulhat. E probléma kezelésének megszokott módja a lapról információt kinyerő ún. csomagolóprogramok (wrappers) használata. Az információkinyerés technológiájával a 23.3. alfejezetben foglalkozunk. Egyelőre feltételezzük, hogy csomagolóprogram létezik, és egy lap és a tudásbázis birtokában a tudásbázishoz tényeket ad hozzá. A lapra tipikusan csomagolóprogramok egész hierarchiáját lehetne alkalmazni. Egy általánosat a dátumok és az árak kinyeréséhez, egy specifikusabbat, hogy a számítógépes termékek attribútumait találja meg, végül, ha szükséges, egy weboldal-specifikust, amely az adott bolt weboldalformátumát is tudja. Ha az ált-bolt.com egy weboldalt tartalmaz:

YVM ThinkBook 970. Ára: 300.000.- Ft

szöveggel, amit mindenféle technikai specifikáció követ, a csomagolótól elvárnánk, hogy az alábbi információt nyerje ki:

lc, ajánlat lcLaptopSzámítógép ajánlatTermékAjánlat

KépernyőNagyság(lc, Cm(32)) ∧ KépernyőTípus(lc, SzínLCD) ∧

MemóriaNagyság(lc, Mbyte(512)) ∧ CPUSebesség(lc, GHz(2,4)) ∧

AjánlottTermék(ajánlat, lc) ∧ Bolt(ajánlat, AbsztBolt) ∧

URL(ajánlat, „abszt-bolt.com/szg/34356.html”) ∧

Ára(ajánlat, Ft(300000)) ∧ Dátum(ajánlat, Ma)

Ez a példa néhány olyan problémát hivatott megmutatni, amelyek akkor jelentkeznek, ha a kereskedelmi tranzakciókhoz szükséges tudásszervezést komolyan vesszük. Vegyük észre például, hogy az ár az ajánlatnak, és nem magának a terméknek az attribútuma. Ez fontos, mert egy adott bolt ajánlata napról napra változhat, akár ugyanarra az egyedi laptopra nézve. Egyes kategóriák esetén – mint például a házak és a festmények esetén – ugyanazt az egyedi objektumot különböző közvetítők egy időben különböző áron is ajánlhatják. Több bonyodalom is elképzelhető, amelyek kezelésével nem foglalkoztunk. Ilyen például annak a lehetősége, hogy az ár függhet a fizetés módjától, vagy hogy a vásárlóra bizonyos kedvezmények vonatkozhatnak. Összegezve, sok érdekes munka még hátramaradt.

Az utolsó feladat a kiemelt ajánlatok összehasonlítása. Tekintsük például az alábbi három ajánlatot:

A: 2,4 GHz CPU, 512 Mbyte RAM, 80 Gbyte diszk, DVD, CDRW, 350000 Ft

B: 2,0 GHz CPU, 1 Gbyte RAM, 120 Gbyte diszk, DVD, CDRW, 400000 Ft

C: 2,2 GHz CPU, 512 Mbyte RAM, 80 Gbyte diszk, DVD, CDRW, 400000 Ft

A C-t az A dominálja. Az A olcsóbb és gyorsabb, különben ugyanolyan. Általánosságban azt mondjuk, hogy X dominálja Y-t, ha X legalább egy attribútum esetében kedvezőbb értékű, és semmilyen más attribútum esetében sem rosszabb. Az A és a B közül egyik sem dominálja a másikat. Hogy megállapítsuk, melyik a jobb, tudnunk kell, hogy a vásárló hogyan mérlegeli a CPU sebességét és árát a memóriához és a diszkkapacitáshoz képest. Többszörös attribútum esetében a preferenciák általános tárgyalását a 16.4. alfejezet tartalmazza. Most az ágensünk egyszerűen ki fogja jelezni a vásárló leírásával megegyező, nem dominált ajánlatok listáját. Ebben a példában sem az A, sem a B nem dominált. Jegyezzük meg, hogy ez az eredmény azon a feltevésen alapul, hogy mindenki jobban kedveli az olcsóbb árakat, a gyorsabb processzorokat és a nagyobb tárat. Bizonyos attribútumok, mint például a notebook képernyőmérete, a vásárló partikuláris preferenciáitól függenek (a hordozhatóság a láthatósággal szemben). Az ilyenekről a vásárló ágensnek a felhasználót kell kérdeznie.

A leírt vásárló ágens egy egyszerű rendszer, és számos finomítása lehetséges. Mégis elegendő a képessége arra, hogy a megfelelő területspecifikus tudással a vásárlót ténylegesen tudja segíteni. Deklaratív konstrukciója miatt könnyen felskálázható bonyolultabb alkalmazásokhoz. Ennek az alfejezetnek a fő célja az volt, hogy kimutassuk, hogy bizonyos tudásreprezentáció – különösképpen a termék hierarchiája – szükséges az ilyen típusú ágensek számára, és ha már az ilyen formájú tudás rendelkezésre áll, a többi már nem is olyan nehéz egy tudásalapú ágens számára.



[100] A hivatkozáskövető stratégia alternatívája egy internetkereső gépnek a használata. Az internetkeresésről, az információkinyerés mögött húzódó technológiákról a 23.2. alfejezetben lesz szó.