Project CyN
Project CyN is the merger of a AIML interpreter used to develop chat bots with the OpenCyc inference engine. This unique tool allows the product of one of the largest, continuous AI projects to be accessed by one of the largest chat bot development community. Basically Cyc + Program N = CyN.
One of the first questions that interested programmers want to know about OpenCyc is what kind of natural language interface is there and can they talk with it. And one of the things that interested programmers who learn AIML ask is how to make their chat bots appear smarter. CyN tries to address the desires of both communities.
Also See: Special AI Tools
TECHNOLOGY AREA: Natural language chat bot development system
OBJECTIVE: Cyn (source code) is an AIML interpreter that can access OpenCyc.
DESCRIPTION: CyN is a modification of Program N by Gary Dubuque at http://www.aimlpad.com .
- A desktop AIML interpreter for the Windows environment.
- Can access OpenCyc and use it to make AIML side decisions, and use OpenCyc information.
- Provides a basic IRC capability to Program N with basic logging
- Provides a basic web server capability to Program N with basic logging
- Adds some additional selection options to Program N
System goals:
-
provide a pattern based parser for use with OpenCyc suitable for chatbots / virtual human experimentation and basic knowledge entry of logical relationships
-
be an interpreter that allowed an easy way to interface AIML to OpenCyc
-
create a set of example AIML categories to answer questions using OpenCyc
-
provide a tool for experimentation with both systems
-
provide a natural language front-end ahead of the current OpenCyc schedule
-
be a tool capable of creating a “personality” for OpenCyc systems
-
be a scaleable tool (AIML sets have 40,000 language patterns and full Cyc has 1.6 million facts)
-
be a tool that can be integrated with other systems
- be open; based on Program N it is free to download, modify and reuse
CyN is not:
- A full natural language parser for OpenCyc. It can provide basic pattern template based parsing.
- A full chat bot. The basic system is an interpreter. It still requires a full AIML set.
- A drop-in, general purpose, natural language AI. Ideally it should function as an AIML bot with an inference engine. Details can be found in the description .pdf
- Finished. This is the sort of project that is never finished, because better functionality can always be added. Please let us know of additional functionality needed. More categories of language patterns can always be written.
CONTAINS: C code for windows executable, along with necessary data files.
RECOMMENDATION:
- Visit http://www.daxtron.com/AIMLBots.html for background on AIML.
- Visit http://www.alicebot.org for details on AIML. Look for the AIML tutorials.
- Visit http://www.aimlpad.com for details of Program N. Look for the Program N tutorials.
- Visit http://www.opencyc.org for details on OpenCyc. Look for the CycL tutorials.
ADDITIONAL WORK REQUIRED:
- Tighter integration with OpenCyc for linguistic and logical information. Pending C version of CycLink.
- OpenCyc KE definitions for all logical predicates.
- AIML definition of all OpenCyc logical predicates
DOWNLOAD 2004-01-25 version: Cyn (source code) Includes basic CyN interpreter and nano-IRC client. Goes to a IRC-channel and responds to private messages sent to it. See option.ini file.
DOWNLOAD 2004-03-18 version: Cyn (source code+Win32 EXE) Includes basic CyN interpreter and nano-IRC client and micro-web server. See option.ini and CynDiff.txt file.
SourceForge 2004-04-02: Program N with CyN (source code+Win32 EXE on SourceForge) CyN's innovations have been assmilated back into Program-N which now has a SourceForge site. The new Program-N also has a a serverside Java Script engine. Probably the best site for the latest code.
Publications :
Living in CyN : Mating AIML and Cyc Together with Program N
KEYWORDS: Natural language parser, CycL, OpenCyc, AIML, Chat bot
Example Dialog:
Is a human a mammal ?
Affarmitive. I agree.
is a dog a vegetable ?
Nope. I can't prove that.
is kino alive ?
Affarmitive. I agree.
is a lion a animal ?
Affarmitive. I think so.
is a lion a product ?
Nope. I can't prove that.
is a lion a thing ?
Affarmitive. I beleive that.
is a dog a plant ?
Nope. I can't prove that.
Name some plant
FloweringPlant
is a dog a person
Negative. I can't say that.
who is a cyclist
I think CycAdministrator is a cyclist.
Is CycAdministrator a cyclist
Right. I agree.
Is CycAdministrator a person ?
Affarmitive. I agree.
Who is a student?
I think Self is a student. <-- one of the things in the system profile
Are you a studen ? <-- note: fi-complete fixed the typo and guessed right
Right. I think so.
guess studen
I think studen means #$Student to Cyc
What do you want ?
I want Susan to like Self.
What do you want ?
I want Self to like Self.
[Since the cyc explainer is not avaiable yet through the API I asked OpenCyc through the web browser and got the following justification]
Mt : DAX-SelfAwareMt
EL Query :
(desires Self ?WHAT)
Answer Bindings :
?WHAT ? (likes-Generic Self Self)
Justifications :
(implies
(isa ?ANYONE Person)
(desires Self
(likes-Generic ?ANYONE Self))) in DAX-SelfAwareMt
:ISA (isa Self Person) in DAX-SelfAwareMt
Hence the system wants to like itself.
Make Rover a Dog
200 #$Rover
200 T
Make Skippy a Dog
200 #$Skippy
200 T
Is Skippy a Dog ?
Affarmitive. I agree.
Is Rover a Dog ?
Right. I agree.
Is Skippy a Person ?
No. I can't prove that.
What is Skippy?
200 (((?REPLY . #$Thing)) ((?REPLY . #$Individual)) ((?REPLY . #$Dog)))
Is skippy a mammal ?
Right. I agree.
Is skippy a animal ?
Affarmitive. I beleive that.
is skippy a person ?
No. Not that I know of.
What is rover ?
200 (((?REPLY . #$Thing)) ((?REPLY . #$Individual)) ((?REPLY . #$Dog)))
Forget Skippy is a Dog
()
What is Skippy ?
FALSE
Is skippy a mammal ?
Negative. I can't prove that.
Basic Explaination Debug Dialog:
<kinoc2> guess pistol
<Cyn> I think PISTOL means #$Pistol to Cyc
<kinoc2> what is a pistol
<Cyn> Generalizations:200 (((?WHAT . #$ComplexPhysicalObject))
((?WHAT . #$Product)) ((?WHAT . #$PartiallyTangibleProduct)) ((?WHAT
. #$SolidTangibleThing)) ((?WHAT . #$SolidTangibleProduct)) ((?WHAT .
#$PhysicalDevice)) ((?WHAT . #$TwoOrHigherDimensionalThing))
<Cyn> ((?WHAT . #$SpatialThing)) ((?WHAT .
#$SpatialThing-Localized)) ((?WHAT . #$SomethingExisting)) ((?WHAT .
#$PartiallyTangible)) ((?WHAT . #$InanimateThing)) ((?WHAT .
#$InanimateThing-NonNatural)) ((?WHAT . #$Thing)) ((?WHAT .
#$Individual)) ((?WHAT . #$T
<Cyn> emporalThing)) ((?WHAT . #$Artifact-Generic)) ((?WHAT .
#$Artifact)) ((?WHAT . #$Weapon)) ((?WHAT . #$Gun)) ((?WHAT .
#$Gun-Portable)) ((?WHAT . #$Handgun)) ((?WHAT . #$Pistol)))
<Cyn> ((?WHAT . #$PartiallyIntangible)) ((?WHAT . #$Intangible))
((?WHAT . #$MathematicalOrComputationalThing)) ((?WHAT .
#$MathematicalThing)) ((?WHAT . #$Thing)) ((?WHAT .
#$SetOrCollection)) ((?WHAT . #$Collection)) ((?WHAT .
#$FirstOrderCollection)) ((?WHAT
<Cyn> . #$StuffType)) ((?WHAT . #$TemporalStuffType)) ((?WHAT .
#$ExistingObjectType)))
<kinoc2> name some pistol
<Cyn> Pistol-9mm
<kinoc2> is a Pistol-9mm a weapon
<Cyn> Right. I beleive that.
<kinoc2> why is that ?
<Cyn> "pistol - 9mm" is a kind of "pistol" . "pistol" is a
kind of "handgun" . "handgun" is a kind of "gun - portable" .
"gun - portable" is a kind of "gun" . "gun" is a kind of
"weapon" .
<kinoc2> is a dog a person ?
<Cyn> No. I can't prove that.
<kinoc2> explain why dog is not person
<Cyn> "dog" is a kind of "domesticated animals" .
"domesticated animals" is a kind of "non-human animal" .
"non-human animal" is disjoint with "person" .
<kinoc2> explain why car is not plant
<Cyn> "car" is a kind of "motor vehicle" . "motor vehicle"
is a kind of "land vehicle" . "land vehicle" is a kind of
"transportation device" . "transportation device" is disjoint
with "naturally-occurring substance" . "plant material" is a
kind of "naturally-occurring substance" . "plant" is a kind of
"plant material" .