Volt egy jo kis mindentudas egyeteme eloadas ezzel kapcsolatban, itt olvashato:
http://www.mindentudas.hu/szilagyi/20041119szilagyi30.html
Nekem nagyon tetszett ez az eloadas. Szerintem jo iranyban tapogatoznak. Teszek egy joslatot: Ha egyszer lesz valami komolyabb modellje az emberi gondolkodasnak, ahhoz az ilyen jellegu kutatasok vezetnek majd el. Konnyen el tudom kepzelni, hogy ezek a most meg csak nehany embert erdeklo, periferialis temak 100 ev mulva az M.I koraban benne lesznek az alapveto tudomanytortenet konyvekben, mint az elso ertekelheto probalkozasok az emberi gondolkodas modellezese fele.
Szerintetek jo irany ez? Mik a korlatai?
Szerintem ez egy olyan példa, ami már nem nagyon kezelhető azzal az egyszerű modellel amit írtam. Ide már valami fejlettebb ontológia kellene.
De kérdés, hogy pl. a fordítások hány százalékában múlik ilyen nehezen kezelhető döntéseken a korrekt fordítás, és az esetek hány százalékában elegendő az egyszerű modell.
Igy van, mar az sem egyszeru. Marmint hatekonyan. Kulonosen, ha van tobb ezer ilyen reszgraf.
Namost nekem meg olyat kellett implementalnom, hogy minden csomoponthoz van egy set of string, hogy o most aktualisan kiknek az isa-ja (vagyis kik a felmenoi), es akkor illeszkedik a minta, ha van olyan illesztes, hogy a megfelelo grafbeli csomopontoknak rendre a szuloi kozott van a mintabeli csomoponthoz rendelt string.
Nem volt egyszeru az biztos, de viszonylag gyorsra leimplementaltam. Bar meg boven van mit rajta gyorsitani.
Tenyleg, ez egy erdekes dolog: onmodosito CFG nyelvtan. Vajon foglalkozott mar valaki ilyesmivel?
Persze, csak ilyenkor inkább automatáról beszélnek, nem pedig nyelvtanról.
A legtöbb tömörítő algoritmus ilyen. Van egy táblázat, amiben tárolja a helyettesítési szabályokat. Ez kezdetben üres. Az algoritmus olvassa az input-ot, és a táblázatba azokat a helyettesítéséket veszi fel, amelyek a legjobbak tömörítési szempontból.
"Ha egy ilyen minta matchel, akkor mondjuk azt, hogy amire a fo-eleme matchelt, az legyen isa F. Magyarul egy fogalom runtime a kornyzetetol fuggoen kaphat runtime szuloket."
Szerintem már az is rohadt bonyolult feladat, hogy:
adott egy (színezett, irányított) gráf, és el kell dönteni, hogy egy másik gráf tartalmazza-e, mint részgráfot.
Magyarul egy fogalom runtime a kornyzetetol fuggoen kaphat runtime szuloket.
Ez a terminologiaidat hasznalva azt jelenti, hogy a kornyezetfuggetlen nyelvtan azzal a trukkel van kibovitve, hogy modositani tudja onmagat (magukat a generalo szabalyokat, vagyis magat a nyelvtant). Csak CFG-re modositja magat, de modositja.
Az eredmeny gondolom mar kornyezetfuggo ekvivalens lesz.
Tenyleg, ez egy erdekes dolog: onmodosito CFG nyelvtan. Vajon foglalkozott mar valaki ilyesmivel?
Mivel pragmatikusan gondolkodok, azt latom en is, hogy nyilvan nem fogok tokeletes modellt talalni, csak kozelito modellre van esely.
Olyan modellt kell keresni, ami az esetek minel nagyobb szazalekaban mukodik, es meg kelloen egyszeru ahhoz, hogy belathato idon belul le is programozhassuk. Es folyamatosan keresni kell a bovites lehetoseget, hogy a modell az esetek egyre nagyobb szazalekat tudja leirni. Egy forditoprogram-iro mast nem nagyon tehet.
A kritikad szerencsere konstruktiv gondolatokat indukalt bennem. A modellem kovetkezo bovitese jutott eszembe:
Az eddigieken kivul legyen meg egy mintagraf halmazunk. Ezen mintagrafoknak legyen megmondva, hogy melyik a fo-eleme, es legyen meg hozzarendelve egy F fogalom.
Ha egy ilyen minta matchel, akkor mondjuk azt, hogy amire a fo-eleme matchelt, az legyen isa F. Magyarul egy fogalom runtime a kornyzetetol fuggoen kaphat runtime szuloket.
Egy primitiv pelda:
a 'sarga kutya' kifejezes eseten pl. a 'kutya' node megkaphatja a 'sarga' fogalmat mint szulot. (A csomoponthoz az aktualis szuleit igy mar runtime tarolni kell, de egyebkent eddig is taroltam performancia okokbol.)
Szoval eggyel erosebb lett a modell. Majd a gyakorlat biztosan megmutatja, hogy meg ennek is vannak korlatai, de akkor hatha beugrik valami tovabbi bovites/atalakitas, es igy tovabb....
Szerintem a programozási nyelvekben levő -egyszeres vagy többszörös- öröklődés még simán kezelhető környezetfüggetlen nyelvtanokkal.
Ha azt mondod, hogy minden [Főnök] [Alkalmazott], és minden [Főnök] [Döntéshozó] is egyben:
[Főnök] -> [Alkalmazott]
[Főnök] -> [Döntéshozó]
Akkor nem tudod CFG-vel kezelni, ha függ az előfordulási környezetétől, hogy öröklődik-e valamitől. A fenti példánál maradva, az [FBTag] nem [Alkalmazott], mert csak tiszteletdíjat kap, viszont [Főnök] és ezen keresztük [Döntéshozó] is.
Jó, tudom, [i]ezt a konkrét [/i] át lehet alakítani úgy, hogy le lehesen írni környezetfüggetlen módon. Sőt, minden véges példát át lehet alakítani.
De mondok egy példát arra, hogy ez nem mindig triviális.
[Autó] -> [Jármű]
Ez általában igaz. A járművel lehet utazni. Kivéve, ha a jármű még a gyárban van és szereleik, ha az árokban és összetört, ha egy autoszalonban, ha van rajta kerékbilics, stb...
Tulajdonkeppen maskepp fogalmazva azt mondod (ha jol ertem), hogy a single inheritance nem elegseges, de a multiple inheritance mar figyelemremelto eszkoz.
Ezzel teljesen egyetertek, termeszetesen en is multiple inheritance-ben gondolkodom.
(Ugye a single iheritance az, amikor az isa relacio many to one, a multiple inheritance meg az, amikor az isa relacio many to many)
En attol tartok, hogy buki arra utalt, hogy meg a multiple inheritance is tul gyenge eszkoz. (de majd kijavit).
A nagy IT boom idején volt nagy divat a webkeresőkben a web-directory, azaz a weblapok hierarchikus, téma szerinti kategorizálása, biztosan emlékszel még rá. Nem lett sikeres. Véleményem szerint azért, mert egy db kötött hierarchiával dolgozott. Amikor én keresek valamit a neten, első körben csak két kategória létezik: az a dolgog amit keresek, és minden más. Egy fix, sok szintü kategóriafában megtalálni azt amit keresek, kényelmetlen, hosszadalmas, sok overhead-gondolkodást igényel. Amikor viszont a Googleban leszűkítem a keresést két-három szó hozzáadásával, akkor tulajdonképpen saját elképzelésem szerinti kategória darabok szerint sorrendezem a találat listát.
Arra akarok kijukadni, hogy szerintem az egy-kategória rendszerre való törekvés hibás megközelítés, egy-egy fogalomnak számtalan (akár egymástól lényegesen eltérő) kategorizálása lehetséges, és van is. Pl. a "plane" szóhoz fel lehetne rajzolni (hasamra ütök) 20-30 "isa" tree-t. De ezzel nincsen semmi baj. Ha ki tudod választani, hogy a pillanatnyi mondat kontextusban mely "isa" fákban mely nodeoknak felel meg a "plane", akkor szerintem van esélyed túllépni a buki92 által írt problémán.
(Szerintem buki92 azt írja (de majd kijavít), hogy egy CF nyelvtan nem elegséges. De mi van, ha sok CF nyelvtanod van, amelyek között tisztázottak a viszonyok?)
Nem azt írtam, hogy a "kategorizáció" nem szükséges, hanem azt, hogy szükséges de nem elégséges.
Egyébként meg naná, hogy szubjektív vélemény. De nem hiszem, hogy ez most számít. Ami számít: 1. Ha arra építesz egy rendszert, hogy a különféle előfordulásokban keressük azt, ami közös, ami (a többi résztől függetlenül) állandó, akkor egy CFG ekvivalens rendszert fogsz kapni. 2. A természetes nyelvek osztálya bővebb, mint a CF nyelvek osztálya.
Ez az egyik leggyakoribb hiba, amit a AI kapcsán el szoktak követni
Ki és hogyan tudja eldönteni, hogy ki milyen hibákat követ el az AI kapcsán? :) Csak mert tudtommal az egész emberiség alig jutott még tovább a sötétben tapogatózásnál. Vagy ezt inkább csak szubjektív véleménynek szántad?
Vitatod, hogy a kategorizáció az emberi gondolkodás nagyon fontos, talán központi eleme? Vagy vitatod, hogy ezt érdemes kutatni?
Kategorizáció nélkül nem tudnánk beszélni sem. Kategorizáció nélkül nem mondanád a szomszéd kertjében ugató szőrgombolyagra, hogy kutya.
A 'kognitív idegtudomány' című könyv 12. fejezete a következő: 'A perceptuális kategorizáció alapjai'. Amiket ott írnak, az is abban győzött meg, hogy valami természetes fogalomról van szó, hogy tényleg fontos eleme a gondolkodásunknak.
A kategorizáció számomra nem más, mint az a mód, ahogyan az ember digitalizálja az analóg világot. Ahogyan a végtelen sokféle lehetséges állatot bekategorizálja néhány kategóriába (kutya, macska, stb...) Hogy a dolgokról egy digitális kódban: az emberi nyelven kommunikálhassunk.
Tág értelemben amúgy azt is kategorizációnak nevezem, amikor egy beszédhangot az ember bekategorizál egy fonémának. Minden pattern matching (pl. az arcfelismerés is) természeténél fogva kategorizáció.
Persze az én modelljeim biztosan gagyik, ezzel nem vitatkoznék, de azzal már nem értek egyet, hogy a kategorizációt nem érdemes intenzíven kutatni.
Ez az egyik leggyakoribb hiba, amit a AI kapcsán el szoktak követni: feltételezed, hogy az ismeretanyag leírható környezetfüggetlen nyelvtannal. (ajánlott olvasmány: Arisztotelész: Kategóriák)
A hierarchiák, a levezetési fák, és végső soron a "dolgok" a CF nyevek jellemzői. Semmi kétség, az ember imádja, és ahol csak lehet használja a CF nyelvtanokat, de ez nem mindig elég. Ha egy rendszer inherensen a CF nyelvekre épül, akkor az biztosan kevés lesz a "valóság leírásához" és/vagy "az emberi gondolkodás megértéséhez".
A dolgban az a csapda, hogy bármilyen véges minta (korpusz) esetén találsz azt "elég jól közelítő" CFG-t. Tehát amíg példa mondatokon próbálgatod addig tök jól működik, de ha ráereszted egy nagyobb korpuszra, akkor fals eredményt fog produkálni.
Még egy dolog van, amivel jelenleg nem foglalkozom, de a hosszútávon majd szeretnék vele foglalkozni:
Az isa hierarchia és a mintagráfok automatikus tanulása szemantikus korpusz alapján.
Egy ilyen szemantikus korpuszt úgy lehet felépíteni, hogy egy ember egy csomó Gráfkiválasztási feladatnál egy élő ember megmondja, hogy melyik G gráf a helyes döntés.
Valami evolúciós algoritmusra gondoltam: Kezdetben véletlenszerű szabályok és véletlenszerű kategóriahierarchia lenne, majd a kedvező mutációkat megtartanánk, a nem kedvezőeket eldobnánk.
Ennek a részletein még nem sokat gondolkodtam, egyelőre két lábbal állok a földön :) és kézzel hozom létre mind a mintagráfokat mind a kategóriahierarchiát.
Itt most én is csak hangosan gondolkodok, mert ennek még közel sem jártam a végére:
Világos, hogy a bonyolultabb esetekhez valószínűleg nagyobb mintagráfok kellenek. Ha nem akarjuk, hogy ezek számossága elszálljon az égbe a kombinatorikus robbanás miatt, akkor kénytelenek vagyunk ezekben az esetekben a kategóriahierarchiák nagyon magas szintjén lévő (nagyon általános, nagyon absztrakt) dolgokból összerakni ezeket a mintákat. (Ezek száma ugye kicsi)
Tehát valószínűleg érdekes lesz kutatni, hogy melyek azok a nagyon absztrakt, nagyon általános kategóriák (pl. élő élettelen, stb...), amelyek a legjobban használhatóak lesznek a számunkra.
Az még nyitott kérdés, hogy mennyire lesz jó ez a modell a gyakorlatban, így nem tudok még a kérdéseidre érdemben válaszolni. Leimplementáltam, elkezdtem felépíteni az isa hierarchiát és a mintagráfokat, néhány héten belül körvonalazódni fog, hogy hol vannak a határai a dolognak, illetve, hogy az esetek hány %-ával bírkózik meg.
Természetesen minden továbbfejlesztési ötletet szívesen veszek.
Az nem világos még, hogy valóban egyértelműen rendezhetőek fává a fogalmak az isa reláció mentén.
Így, hogy több szülője is lehet egy fogalomnak, azért az esetek többségében elég finom modellt lehet így felépíteni. (Nem véletlenül, mivel az emberi agyban is elég durva 'digitalizálás' (kategorizálás) zajlik, különben nem tudnánk a dolgokról beszélni.) Gondoltam én is arra, hogy ha ez még mindig túl durva modell lesz, akkor lehet csinálni egy Fuzzy jellegű csavart: lehetne mondani, hogy A fogalom isa B fogalom f (floating point 0-tól 1-ig) 'mértékben'.
plane isa weapon plane isa toy plane isa geomteric_object plane isa vehicle plane isa flying_object plane isa engineering_result
plane isa noun
...
Az rendben, hogy a jobboldalon állók jól berendezhetőek egy vagy több fába. Nyilván annál jobb a program, minnél specifikusabb jelentését felismeri a 'plane' szónak az adott kontextusban, de ez adaptív, már az is sok segítség lehet, ha ki tudja zárni a 'geometric_object'-et meg az 'engineering_result'-ot. Egy minta pedig annál 'fittebb', minnél 'közelebb' van az isa fában a 'plane' jelentésének aktuális ismeretével.
Az nem világos még, hogy valóban egyértelműen rendezhetőek fává a fogalmak az isa reláció mentén.
Értem. Ezek mondjuk egyszerű példák, de mi a helyzet bonyolultabb szituációkban, pl. "yuo have to move the plane" esetben (azaz amikor több mintát is találsz a minta adatbázisban)? Vagy mit teszel, ha kis eséllyel van minta az adatbázisban, pl. "place the [toy]plane on the map"?
Egyszerűen minden mintagráfhoz hozzá van rendelve egy floating point szám, mint fitnesszérték. Egy G mondatgráf fitensszértéke egyszerűen a rá illeszkedő mintagráfok fitnesszértékeinek összege.
Vegyünk egy példát:
Legyen a mondat ez:
The plane has arrived.
Mivel a plane szónak két jelentése is van (repülőgép és sík), erre a mondatra 2 gráf hipotézis is kialakul: G1, és G2
Ezek szerencsére annyira egyszerű gráfok, hogy ha az idegidő csomópontját lehagyom, akkor kiteríthetőek egydimenzióba:
G1:
fly->SUBJECT->plane_sík->DET->the
G2:
fly->SUBJECT->plane_repülőgép->DET->the
Az isa adatbázisban benne van a következő:
plane_repülőgép isa VEHICLE
A minták között van a következő:
M : arrive->SUBJECT->VEHICLE : 1.0
(vagyis ezen mintagráf illeszkedése 1.0 fitnessz pontot ér)
Megvizsgáljuk G1-et, tegyük fel, hogy erre éppen egy mintagráf sem illeszkedik. Össz fitnesszpontszáma: 0.0
Megvizsgáljuk G2-t, tegyük fel, hogy erre csak M illeszkedik. Össz fitnesszpontszáma: 1.0
G2 nyert, G2 a jelentés, őt kell magyarra transzformálni, és generálni.
Nekem tetszik, amit csinálsz. Az is, hogy outsiderként ugortál neki, és jutottál el a már artikulálható eredményekig. Arra a szintre, amikor már erdemes lenne a hivatások felé is nyitni.