The microtheories and language of CYC KB 890919 Artificiell Intelligens II Linköpings Universitet Ht 2010 (Kompletterad ht 2012)
Innehållsförteckning 1 Inledning... 1 2 Uppbyggnad av CYC... 2 2.1 Kunskapsbasen... 2 2.2 Inferensmotorn... 2 2.3 Språket CycL... 3 2.3.1 Konstanter och funktioner... 3 2.3.4 Formler, regler och variabler... 3 2.4 Tolken för Naturligt språk och den semantiska Intergrationsbussen... 4 2.5 Utvecklingsverktyg... 5 3 Användning av CYC... 6 3.1 Framtida användningsområden... 6 4 Kritik mot CYC... 7 5 Diskussion... 8 Referenser... 10 Böcker... 10 Online... 10
1 Inledning Sökandet efter en sann artificiell intellegens har varit svår och lång. År 1984 startade Douglas Lenat projektet Cyc som skulle bli ett system som skulle representera all tillgänglig kunskap i form av fakta och tumregler om vardagslivet. På detta vis ansåg Douglas Lenat att sann artificiell intellegens skulle uppnås. Det vill säga med hjälp av en stor mängd kunskap skulle man inom artificiell intelligens kunna skapa något som liknar sunt förnuft. Vilket i sin tur innebär att program eventuellt skulle kunna förstå enkla faktum som människor brukar ta för givet. Cyc är ontologi, en stor kunskapsbas i vilket en stor mängd information och så kallad kunskap är samlad. För att kunna representera så mycket kunskap som möjligt är kunskapsbasen indelad i mikroteorier (microtheories). Dessa mikroteorier används sedan för att representera alla tänkbara olika aspekter av världen. Några av dessa mikroteorier är fokuserade på särskilda domäner, medans andra är fokuserade på till exempel tidsintervaller eller någon annan mer detaljerad nivå. På detta viset kan Cyc representera flera relationer, inkluderat sådana som kan ses som motsägelsefulla. Ett exempel på detta är ord som till exempel light och saw. Syftet med detta projekt är alltså att beskriva hur Cyc är uppbyggd Sida 1 av 10
2 Uppbyggnad av CYC Cyc består av 6 delar, eller så kallade komponenter som beroende av varandra; kunskapsbasen, inferensmotorn, språket CycL, Tolken för Naturligt språk, Semantiska Intergrationsbussen, och utvecklingsvertyg. 2.1 Kunskapsbasen Cyc kunskapsbas, som även fått förkortningen Cyc KB, består för tillfället av nära fem miljoner faktan/påståenden (assertions) som skapar relationer av ungefär femhundratusen termer som även innehåller cirka femtontusen predikat (till exempel status och relationer). Dessa faktan/påstående blir fler och fler med hjälp av både utomstående information från människor som jobbar med projektet, och av kunskapsbasen själv som tagit fram informationen genom en inferens-processer (se 2.2 Inferensmotorn). Kunskapen som lagras i Cyc KB skrivs i språket CycL (se 2.3 Språket CycL), som baseras främst på först ordningens predikatlogik, och tolkas sedan av en inferensmotor. Kunskapen kan delas in i två huvudgrupper; fakta och regler. Dessa delas i sin tur in i diverse kategorier med hjälp av de mikroteorierna (som betecknas Mt) som nämndes tidigare. Mikroteorierna är samlingar fakta och begrepp som till hör den specifika kategorien, exempel vis skulle #SHistoryMt kategorisera fakta och begrepp för historia. Då mikroteorierna, till skillnad från kunskapsbasen i sig, behöver vara fri från logiska motsägelser kan de delas in i flera kategorier och subkategorier, samt kan be kategoriserad hierarktiskt. Exempelvis en katt är ett djur. Att en katt är ett djur är en relativt simpel fakta/kunskap/information och varje form av fakta kan vara termer, tillstånd eller relationer som isa (is a = är en/ett). Regler å andra sidan är mer komplicerad kunskap så som att en bokaffär säljer böcker. De formuleras ofta med hjälp av kvantifierare, då det underlättar vid inkodning och vid tolkning. Dessa Termer och regler beskrivs närmare under 2.3 Språket CycL 2.2 Inferensmotorn För att kunna ta fram den information som finns i kunskapsbasen används Cycs inferensmotor. Den använder tekniker av kunskapsrepresentation (kallade inferensprocesser) som till exempel arv av egenskaper och dylikt för att nå fram till relevant svar. Motorn kan dessutom dra diverse egna slutsatser så som modus ponens (om x är sann är y sann, x är sann, alltså är y sann), modus tollens (om x är sann är y sann, y är falsk, alltså är x falsk), samt kvantifikationer. I och med att infernsmotorn kan dra dessa slutsatser kan mer information läggas in i de olika kategorierna och blir då en anledning till att kunskapsbasen växer. Ett snabbt resultat kan uppnås då kunskapsbasen söks igenom med hjälp av en best-firstsearch algoritm, som använder en egen heuristik, samt på grund av att mikroteorierna begränsar sökrymden. Detta kan ses som en postitiv effek, men det innebär också att sökningen inte blir komplett, det vill säga att det inte är säkert att en lösning hittas varje gång. I systemet existerar olika sorters inferens som fokuserar på rätt specifika klasser har det i inferensmotorn utvecklats individuella moduler som hanskas med dessa klasser. Det finns exempelvis moduler som hanterar matematisk inferens eller temporala resonemang, och Sida 2 av 10
dylikt. Vilken inferensmodul som används beror på vad som ska hämtas ur kunskapsbasen, men också på hur frågan som ställs till systemet är skriven. 2.3 Språket CycL För att kommunicera med CYC behövs förståelse för CycL som är det formella språk utvecklat för användning inom just CYC. Det baseras i främst på första ordnignens predikatlogik, men det kan också hantera ekvivalensrelationer, skolimisering, och default reasoning. Språket använder sig av termer för att beskriva allt från något som kan vara en funktion eller ett argument till ett predikat. De vanligaste termerna tas upp nedan 2.3.1 Konstanter och funktioner Konstanter är de termer som är grunden i det ordförråd som är CycL, vilket innebär att de kan representera samlingar med allt från specifika objekt till koncept och funktioner. Alla dessa konstanter skrivs ut som unika namn med hjälpa av tecknen #$ före namnet på konstanten. Konstanten för ett specifikt objekt som ett namn eller ett land representeras då #$AnnaSvedberg eller #$Sweden, samtidigt som en konstant för en samlingskategori skulle representeras #$Countries. Namnet på bessa objekt påbörjas alltid av en stor bokstav. Objekt som är en del av en samling eller en kategorie kallas för instans. #$Sweden är då en instans i #$Countries. Namnet på konstanten behöver inte ha med innehållet i samlingen eller kategorin att göra, men har oftast det för att underlätta identifieringen av kategorin utan behovet att gå in djupare i detalj i varje kategori och dess relationer. Som nämnts ovan är konstanter även namn på funktioner. En funktion påbörjas med en storbokstav och avslutas med Fn och kan på så sätt skiljas från konstanter som representerar exempevis ett objekt. En funktion frambringar nya termer från de termer givna av användarna. Exempelvis om en användare ger systemet funktionen #$BrothersFn och ett argument som beskriver en samling (eller ett objekt) av pojkar så tar systemet fram en samling av de bröder som tillhör samlingen. Det finns dock funktioner som inte fungerar och namnges som de just beskrivna. Dessa funktioner är så kallade sanningsfunktioner, som appliceras på en eller fler termer och genererar sant eller falskt. Exempelvis är sanningsfunktionen #$brothers sann om två argumenten (de två konstanterna) är bröder. En sanningfunktion känns igen då de efter #$ börjar med en liten bokstav och kan delas upp i predikat (så som #$isa eller #$genls), logiska konnektiv (så som #$and, #$or, #$not eller #$implies), och kvantifierare (så som #$forall eller #$thereexists). Huruvida något är sannt beror på kontexten som är representerad i systemet som mikroteorier. 2.3.4 Formler, regler och variabler Det är formler som ger kunskap till Cyc, genom att användea sig av kombinationer av termer och funktioner för att generera information till systemet. Varje formel tar en funktion eller sanningsfunktion med ett eller flera argument som sedan representerar fakta eller regler inom paranteser. Fakta kan ofta representeras exempelvis med ett predikat och några få argument. De vanligaste predikaten är då #$isa, vilket syftar till att ett objekt är en del av en samling, och #$genis, vilket betyder att kategorier är en subkategori till en annan. Dessa kan Sida 3 av 10
representers på följande sätt (#$isa#$katt#$djur), vilket betyder att katt är ett djur, och (#$genis#$car#$vehicle). Regler å andra sidan är ofta lite mer komplexa och kan behöva representeras med formler i andra formler, exempelvis (#$implies(#$owns #$Malin #$Parlan)(#$objectFoundInLocation $#Parlan $#MalinsGarage)). Denna regel betyder att om Malin äger objektet Parlan så finns den i Malins garage och en regel som är fokuserade på ett specifikt objekt. För att inte behöva skriva en formel (eller i vissa fall flera) för varje konstant använder CYC generella formler som innehåller variabler. Variabler är en nödvändighet för att kunna uttrycka de konstanter som inte har en identitet. När varibel skrivs ut skriver man först ett frågetecken följt av ett variablenamn, exmpelvis är?obj en varibel för ett okänt objekt.. Detta namn behöver inte var mer anvacerat än ett x, då betydelsen beror på kontexten. Dock kan tydlighet, så som till exempel ett generellt namn, vara bra när mer än en variabel förekommer. En regel med variabler skulle då kunna representeras på följande vis (#$implies(#$and(#$isa?obj?subset)(#$genis?subset?superset))(#$isa?obj?superset)). Alla dessa formler kan en gång ha varit del av en mening i naturligt språk och i CYC finns även en komponent som tolkar det naturliga språket och omvandlar det till formler. 2.4 Tolken för Naturligt språk och den semantiska Intergrationsbussen The Natural Language Processing Subsystem är en tolk för naturligt språk, som främst består av tre komponenter; ett lexikon, en syntaxanalyserare, samt en semantisk tolk. Dessa tre delar tolkar och analyserar de strängar som finns i Cyc KB, som nu består av ett naturligt engelskt språk. Det första steget från naturligt språk till CycL är lexikonet. Lexikonet består konstanter som representerar engelska ord och relevant information om ordets syntaxiska och semantiska betydelser. När en mening ska anayseras skickas det först till lexikonet. Om en mening skickas in till lexikonet inser man att det skulle kunna finnas ord som har mer än en betydelse som till exempel ordet light i meningen Emma wore the light top to school, som kan vara ett verb, ett substantiv och ett adjektiv. Meningen skickas vidare i systemet till syntaxanalyseraren. Det är syntaxanalyseraren som avgör vilken struktur som är mest lämplig genom att bygga upp träd med alla tänkbara tolkningar som syntaktiskt korrekta. Vilket innebär att i meningen i avsnittet ovan skulle ordet ligth tolkas som ett adjektiv. Det finns dock meningar som kan få fler syntaktiskt korrekta tolkningar. Vi människor kan då oftast avgöra vilken som är mest logisk, men det kan inte en dator och vi de tillfällena skickas meningen vidare till den semantiska tolken. Med hjälp av principer av Monatgue-semantiken (grammatik som använder sig av formell logik i uppbyggnad av träd) omvandlar den semantiska tolken meningen till formler. Då den semantiska tolken vet att det meningsbärande ordet oftast är ett verb är den främst verbdriven. Varje verb har nämligen i lexikonet templets som är mallar för vad som vanligast att följa just det verbet. Det innebär att den semantiska tolken kontrolerar mot lexikonet för att se vad som skulle passa bäst efter verbet. Om meningar med fler än en syntaktiskt korrekt tolkning Sida 4 av 10
har analyserats kommer den semantiska tolken kunna välja den tolkning som även är semantiskt korrekt. Därefter finns materialet med CYCs kunskapsbas. De meningar som lagts in i kunskapsbasen är skrivit i naturligt språk och härstammar ofta från samma källa (exempelvis texter inlagt av användare). Fungerar det att lägga in kunskap från andra källor? Det finns mycket kunskap i världen i många olika former, och ibland vill man kunna använda kunskap från en annan källa och applicera den i CYC. Med hjälp av den semantiska integrationsbussen kan kunskap från till exempel internet, databaser och andra liknande källor läsas in och tolkas i CYC. Den semantiska intergrationsbussen används för just detta genom att lagra påståenden (assertions) och regler som innebär att texter kan läsas av tolken för naturligt språk och på så sätt intergrera olika källor. 2.5 Utvecklingsverktyg Den sista komponenten i CYC är de utvecklingsverktyg som användes för att användaren ska kunna interagera lättare med systemt. Dessa verktyg gör att användaren kan utöka, förändra och söka i kunskapsbasen. Det verktyg som används mest är en browser baserad på html. Med denna browser kan användaren söka i kunskapsbasen och se vad en term har för påståenden (assertions), samt redigera kunskapsbasen. Det finns även andra verktyg som till exempel en redigerare för lexikonet. Sida 5 av 10
3 Användning av CYC Då CYC började utvecklas 1984 var det ett projekt med ganska höga risker som kanske inte skulle fungera. Tanken bakom projektet var att ta fram en maskin som kan ta emot och svara på frågor på ett naturligt språk. I dag är CYC enligt Cycorp (företaget som utvecklar Cyc) ett fungerande program med flera potentiella användningsområden. Ett av dessa potentiella användningsområden är OpenCYC som innehåller delar av kunskapsbasen och dess verktyg och som även allmänheten har tillgång till. Cycorp ser gärna att OpenCYC används av allmänheten och den är därför gratis. De föreslår att ontologin kan används till bland annat semantisk dataintergration, textförståelse, och artificiell intelligens i spel. Det går att antingen ladda ner eller att användas på en HTML-browser. Ett annat användningsområden är en application baserad på Cyc är Cyc Analytic Environment (CAE) som är semantisk plattform med databaser. CAE tolkar frågor från en användare och hittar informationkällor som behövs för att ge ett svar. Den analys som görs när frågan ställs görs i flera steg för att se om det kan finnas olika kopplingar mellan bland annat personer, händelser, nu och då, med mera. Exempel på olika databaser som använder eller planeras använda sig av CAE är; Medical Record Anlysis, Intelligence/Counter-terrorism Analysis, och Financial Analysis. Ett tredje användningsområde är CycSecure, som är ett verktyg för hantera säkerhetsrisker och nätverksintrång. Med hjälp av CYCs ontologi och resoneringsförmåga kan CycSecure analysera och fatta beslut om till exempel en organisations nätverks sårbarheter. Detta kan den göra genom att låta användare interagera med en modell på så sätt att användaren kan använda verktyg som ger honom eller henne så pass mycket eller lite information som de behöver för att komma med förslag på förändringar i modellen. Genom att arbeta med modellen istället för deras riktiga nät kan de se effekter av handlinar eller förändringar som ännu inte är utförda. Det kan också ge en administratör information om vart det kan finnas eventuella sårbarheter. 3.1 Framtida användningsområden På Cycorps hemsida nämns några områden de tror att Cyc eventuellt kommer att användas i framtiden. De är som följer: Hos förmedlingar av varor och tjänster online För smarta gränsnitt Intelligenta karaktärssimuleringar för spel Bättre maskinöversättning Bättre taligenkänning Sofistikerade användarmodelleringar Rådtjänster så som shopping-assistenter online. Sida 6 av 10
4 Kritik mot CYC En del kritik har uppstått kring CYC-projektet och enligt Cycorp själva kommer detta främst ifrån konkurenter och personer som inte förstår sig på systmet. Den mesta kritiken uppstod innan OpenCyc släpptes och las till vila i och med det. Det finns dock viss kritik som lever kvar. Till och börja med finns det efter släppet av OpenCYC kritik den data som finns i CYCs kunskapsbas. Informationen hämtas från hetrogena databaser och skrivs sedan om till CycLfraser manuellt, vilket kritiker menar på att Cycorp får det att framstå som att komponenterna i CYC skriver om information till CycL Detta är någonting som Cycorp hävdar att de försöker lösa och de menar på att om de får tid på sig lär de inte ge upp i första taget. Det för diskussionen fram mot de tvivel som finns över vilken ambitionsnivå som CYC-projektet lagts på. Det finns tvivel på att projektet inte kommer bli klart då det alltid dyker upp något nytt samtidigt som Cycorp verkar mena på att de är i fas med utvecklingen. Det finns också annan kritik gällande informationen som finns lagrad i kunskapsbasen. Kritiken rör uppdelningen av ontologin, det vill säga att vissa indelningar och ärvningar inte alltid verkar stämma överrens med verkligheten. Detta kommer från personer som anser sig vara ontologiexperter och som Cycorp menar på ser problem i vissa koncept som till exempel vissa instanser som inte nödvändigtvis är fel (enligt Cycorp). Även den information som finns lagrad i varje instans verkar vara under granskning. Det finns kritik som riktar sig mot kunskapsrelevansen och vem som sätter gränserna för vad som är relevant att få fram vid en sökning. Till detta hittas inga kommentarer från Cycorp. De nämner dock att andra problem vid sökningen har hittats. Vid ett universitet i Kanada upptäcktes problem vid sökningar i kunskapsbasen. De upptäckte att för att en sökning ska vara effektiv måste ett djup sättas för sökalgoritmen. För att hitta detta djup krävs kunskap om vad man söker, vilket innebär att två sökningar måste göras. En för att hitta djupet och en för att nå svaret på frågan som söktes från början. Sida 7 av 10
5 Diskussion Det framgår tydligt att Douglas Lenat har en stor vision för CYC-projektet. Han verkar vilja se att Cyc på något sätt ska finnas representerat och/eller implementerat i allting som görs i framtiden främst inom artificiell intelligens, men också i det vardagliga livet, det vill säga hemma, på jobbet, i skolorna, på sjukhus, i domstolar, etcetera. Denna tanke är något långsökt och för att det verkligen ska kunna uppnås finns det flera steg som måste gås igenom. För det första skulle CYC behöva vara helt färdigutvecklat och finnas på samtliga språk. Då måste även betydligt mycket mer information behöva finnas i kunskapsbasen, vilket i sin tur skulle innebära att det lär behövas fler termer och formler, och då behövs fler mikroteorier som kan hjälpa till att kategorisera alla termer. Bara detta känns som en nära omöjlig uppgift. Utöver ovan nämnda skulle CYC behöva vara den enda kunskapsbasen för att inte behöva konkurera med andra. Detta i sig kan bli svårt om kritiken som projektet har fått spelar in i människor beslut om att använda CYC, en annan kunskapsbas eller ingen alls. Alla människro är olika och i och med det har de olika åsikter om mycket. En sådan sak som att bestämma vad som är relevant information att nå när man söker i CYC blir en utmaning i sig. Oavsett vart man söker information finns det (enligt mig själv) överflödig information vilket skulle kunna bero på att männsikor har, precis som jag nämnt ovan, olika syn på vad som är relevant. Det är trots allt ingen omöjlighet att mer data kan läggas in i systemet, men det skulle ta tid då det enligt kritiken (under 4. Kritik mot CYC) påpekas att CycL-fraserna måste läggas in manuellt. För att spara tid och på så sätt kanske locka till sig fler användare skulle CYC behöva kunna föra in information och data i systemet på egen hand. Det vill säga omvandla naturligt språk till CycL-fraser som Cycorp hävdar att sysmet kan. I så fall skulle CYC även kunna hämta information från andra källor och databaser. Det för diskussionen vidare till vad det skulle innebära att om Cyc hämtade data själv från andra databaser är det inte säkert att den informationen som finns på den eller de databaserna är sanna eller inte. Det skulle också skapa debatter, då vi människor har olika uppfattningar om vad som är sant och falskt. Det skulle kanske kunna lösas genom att CYC alltid väljer det mest logiska alternativet, men å andra sidan skulle inte alla hålla med att det var rätt ändå. En annan aspekt som skulle vara viktig för att systemet ska kunna användas i det vardagliga livet är att det bör ha ett enkelt söksystem som är lättförståeligt för de flesta människorna. Att behöva söka två gånger, en för att hitta djupet och en för att nå svaret på frågan som söktes från början, är i min mening inget optimalt system för allmänheten. Att ändra sökalgoritmen något skulle kanske kunna föra Cycorp närmare mot sin grundares mål. Om Cyc någon gång skulle bli fullt färdigutvecklad (det vill säga att det som nämnts tidigare i diskussionen gäller och att allt det som Cyc har fått kritik mot skulle vara löst) och vi skulle kunna använda det i vardagen skulle det kanske vara en ganska bra utveckling. Det skulle dock kunna innebära att en del av de jobb som vi är vana finns i vårt samhälle skulle kunna bli överflödiga. Allt detta är är bara spekulationer och vad framtiden har beredskap för oss är svårt att säga, därför fokuseras resterande av diskussionen på vad som faktiskt finns för tillfället. Sida 8 av 10
Idag har Cycorp flera projekt som involverar CYC KB, bland annat OpenCYC, CAE, och CycSecure. Att öppna upp kunskapsbasen till allmänheten kan ses som både positivt och negativt. I och med att mer personer får tillgång till kunskapsbasen desto mer information kan lagras, samtidigt som det inte är omöjligt att felaktig eller överflödig information också kommer läggas in. Här verkar Cycorp ha tänkte till och ger bara tillgång till vissa delar och verktyg till systemet. På så sätt kan de åtminstone minska risken för att något händer systemet. Det innebär också att det finns delar som allmänheten inte får tillgång till vilket i sin tur också har sina för- och nackdelar. Att inte ge dem tillgång till allating innebär att företaget fortfarande har delar de kan kontrolera och styra. Huruvida det är en fördel eller nackdel är upp till individen att avgöra. Jag anser att viss tillgång till systemet är bättre än ingen tillgång. Att använda sig av den semantiska plattformen för databaser Cyc Analytic Environment (CAE) är ett annat sätt att ge tillgång till material på ett smidigt sätt. Det verkar som om denna plattform ska användas främst av personer med yrken inom vilket de relevanta databaserna lagrar information. Även om det ibland känns som om det redan finns liknande applikationer så är det nog ett nyttigt användningsområde då det kanske vidgar den information som personerna redan besitter, men å andra sidan kansek det ger överflödig information. Detta är något som än en gång kommer skilja sig från individ till individ Oavsett vilket användningsområde som intresserar en person så finns det för- och nackdelar med det. Det som å andra sidan inte riktigt framgår är hur bra de olika användningsområdena fungerar och huruvida de kan coexistera med varandra. Är de beroene av varandra? Visst är samtliga användningsområden kopplade till CYC KB, men finns det andra gemensamma faktorer eller skiljer det på sig så pass mycket att jämförelser inte är relevanta att göra. En annan aspekt gällande CYC och dess användningsområden som har fastnat i mina tankar är varför de tar fram och utvecklar användningsområden för ett system som inte verkar vara klart? I och för sig kan det vara bra att ta fram användningsområden för att veta vart produkten eller systemet är på väg, men samtidigt måste systemet kunna utföra de uppgifter som förväntas annars är risken att flera aspekter faller istället för bara någon eller några få. Sida 9 av 10
Referenser Böcker Stuart, Norvig. Artificial Intelligence A Morderna Approach 2 nd Edition. pp. 363-366. 2003. Prentice Hall Online about Cycorp, http://cyc.com/cyc/company/about, 2010-09-24 Cyc-based applications, http://www.cyc.com/cyc/technology/whatiscyc_dir/company/applications, 2010-09-27 How does Cyc reason?, http://cyc.com/cyc/technology/whatiscyc_dir/howdoescycreason, 2010-09-24 OpenCyc, Documentation, http://opencyc.org/doc, 2010-09-30 The Syntax of CycL, http://www.cyc.com/cycdoc/ref/cycl-syntax.html, 2010-09-26 What s in Cyc?, http://cyc.com/cyc/technology/whatiscyc_dir/whatsincyc, 2010-09-24 What is Cyc?, http://cyc.com/cyc/technology/whatiscyc, 2010-09-24 Sida 10 av 10