SIML vs AIML
The following comparisons has been done just to reflect the architectural differences. We have no intention of proving the opponent architecture as inferior or to degrade any of its features. At Syn we believe in a humble approach to AI and will never criticise any effort towards improving the current state of AI. Both SIML and AIML server their purpose(s) best. If you are a beginner and can live with simple Chatbot features we ourself encourage you to check AIML but if are an experienced Chatbot developer and wish to use advanced Chatbot technologies in your work then you may try SIML.
Specification Compliance
- Extensible Markup Language (XML) 1.0 (Fifth Edition)
- Emotion Markup Language (EmotionML) 1.0
- Standard ECMA-262 5.1 Edition for JavaScript
Firstly the Generic Comparison
- SIML loads 5X faster than AIML
- SIML Package is extremely small – Network pressure is negligible
- SIML Set operations are super fast operations – Which implies that larger Sets have no impact on SIML Bot
- SIML Regular Expression processor uses state of the art computation algorithms for faster string match
- SIML allows Templates – You can use multiple projects as templates to create Task-Specific Bots
- SIML Bots can internally share their knowledge – This helps in creating Superior Bots
- SIML Bot comes with a Cache Manager – Helps in maintaining optimum memory usage.
- SIML has its own official Bot Studio to help develop multilingual Chatbots
- SIML is powered by Syn.Bot- Which is a Portable Class Library written in pure C#
Markup Language Comparision
Multi-Patterns
SIML allows pattern grouping using Item tags. Syn Chatbot Studio by default comes with an Analyser to ensure there is no pattern conflicts while developing complicated bots.
SIML
<Model>
<Pattern>
<Item>A BIT *</Item>
<Item>A BIT OF *</Item>
<Item>A GREAT DEAL *</Item>
<Item>A LITTLE *</Item>
</Pattern>
<Response>
<GotoMatch />
</Response>
</Model>
AIML
<category>
<pattern>A BIT *</pattern>
<template>
<sr />
</template>
</category>
<category>
<pattern>A BIT OF *</pattern>
<template>
<sr />
</template>
</category>
<category>
<pattern>A GREAT DEAL *</pattern>
<template>
<sr />
</template>
</category>
<category>
<pattern>A LITTLE *</pattern>
<template>
<sr />
</template>
</category>
Regular Expressions
SIML
<Model>
<!-- STATUS here is a any regular expression -->
<Pattern>SWITCH @STATUS</Pattern>
<Response>status changed to <Match /></Response>
</Model>
AIML Does Not Support Regular Expressions
Greedy Sets and Regex
SIML
<Model>
<Pattern>I AM FROM [COUNTRY]</Pattern>
<Response>I like <Match/></Response>
<!--Matches "United States of America"-->
</Model>
AIML
<!-- Country is a SET that has "United States" and "United States of America" -->
<category>
<pattern>
I AM FROM <SET>COUNTRY</SET>
</pattern>
<template>
I like <star/>
</template>
</category>
<!--Matches "United States"-->
Dynamic Sets
SIML Sets can be created within Patterns thereby excluding the need for predefining smaller Sets.
SIML
<Model>
<Pattern>I LIKE THE COLOR (RED|GREEN|BLUE)</Pattern>
<Response>
I like <Match/> too!
</Response>
</Model>
AIML
Does Not Support Dynamic Sets
Nested Modelling
SIML Models are nestable and extends support for dialogue based chatbot systems.
SIML
<Model>
<Pattern>START APPLICATION</Pattern>
<Response>Are you sure ?</Response>
<Model>
<Pattern>YES</Pattern>
<Response>Application started</Response>
</Model>
</Model>
AIML
<category>
<pattern>START APPLICATION</pattern>
<template>Are you sure?</template>
</category>
<category>
<pattern>YES</pattern>
<that>Are you sure?</that>
<template>Application started</template>
</category>
Labeling Responses
SIML allows random responses to have a Label which helps in reducing redundancy of creating knowledge unit for every random output.
SIML
<Model>
<Pattern>HOW ARE YOU</Pattern>
<Response>
<Label>I-am-fine</Label>
<Random>
<Item>I am fine</Item>
<Item>I am doing great</Item>
<Item>Not bad</Item>
<Item>I feel awesome</Item>
</Random>
</Response>
</Model>
<Model>
<Pattern>GOOD TO HEAR THAT</Pattern>
<Previous>I-am-fine</Previous>
<Response>Thank you</Response>
</Model>
AIML
<category>
<pattern>HOW ARE YOU</pattern>
<template>
<random>
<li>I am fine</li>
<li>I am doing great</li>
<li>Not bad</li>
<li>I feel normal</li>
</random>
</template>
</category>
<category>
<pattern>GOOD TO HEAR THAT</pattern>
<that>I am fine</that>
<template>Thank you</template>
</category>
<category>
<pattern>GOOD TO HEAR THAT</pattern>
<that>I am doing great</that>
<template>Thank you</template>
</category>
<category>
<pattern>GOOD TO HEAR THAT</pattern>
<that>Not bad</that>
<template>Thank you</template>
</category>
<category>
<pattern>GOOD TO HEAR THAT</pattern>
<that>I feel normal</that>
<template>Thank you</template>
</category>
Contextual Memory
Every SIML Model represents a unit of knowledge that belongs to a particular Concept. A Concept is SIML is an abstract idea of what the user may input regarding a topic.
SIML
<!-- Context = "User likes and dislikes" -->
<Concept Type="public" Name="User likes and dislikes">
<Model>
<Pattern>I LIKE BACON</Pattern>
<Response>Delicious!</Response>
</Model>
<Model>
<Pattern>RED IS MY FAVORITE COLOR</Pattern>
<Response>Me too</Response>
</Model>
</Concept>
AIML
<!-- Context = SomeFile.Aiml? -->
<category>
<pattern>I LIKE BACON</pattern>
<template>Delicious!</template>
</category>
<category>
<pattern>RED IS MY FAVORITE COLOR</pattern>
<template>Me too</template>
</category>
Listed Settings
SIML stores both Bot and User predicates as list of values.
For example: A Bot or a User may like or dislike or may have some interests in varying numbers. SIML stores predicates as a List of items. Example: a User may like more than 1 movie ( which is obvious ) thus SIML allows storing of such values in a list.
SIML
<Variable Name="FavoriteMovies">
<Value>Contact</Value>
<Value>God Father</Value>
<Value>Green Miles</Value>
<Value>Life Is Beautiful</Value>
</Variable >
AIML
AIML stores Predicates as a single entity –> FavoriteMovie:expendables
The Power of Emotions with EmotionML
W3C created EmotionML as the upcoming standard for representing emotions and its related states. SIML comes with an in-built EmotionML parser to detect and parse emotions.
SIML
<Siml>
<emotionml version="1.0" xmlns="http://www.w3.org/2009/10/emotionml"
dimension-set="http://www.w3.org/TR/emotion-voc/xml#pad-dimensions">
<emotion id="happy1" category-set="http://www.w3.org/TR/emotion-voc/xml#fsre-categories">
<category name="happiness" />
<dimension name="pleasure" value="0.9" />
<dimension name="arousal" value="0.9" />
<dimension name="dominance" value="1.0" />
</emotion>
</emotionml>
</Siml>
AIML
AIML bots are emotionless
True Respect for JavaScript
SIML pushes pattern recognition a step further by creating a Hybrid-Graph system that can support conditions and scripts in place of textual patterns. JavaScript is the world’s favourite Scripting Language and so is ours. With SIML you can use JavaScript for conditional activation of patterns or to generate complex responses.
SIML
<Model>
<Pattern><Js>10 > X;</Js></Pattern>
<Response>Yes it is!</Response>
</Model>
<Model>
<Pattern>Hey JS!</Pattern>
<Response>
<Js>hello();</Js>
</Response>
</Model>
AIML AIML does’t have an internal Js Interpretor
Predictive Randomness
With SIML you can now match bot output to user input using the Phrase
element.
SIML
<Model>
<Pattern>
<Item>WHAT IS YOUR NAME</Item>
<Item>WHAT CAN I CALL YOU</Item>
</Pattern>
<Response>
<Phrase>
<Item>My name is <Bot Get="name" /></Item>
<Item>You can call me <Bot Get="name" /></Item>
</Phrase>
</Response>
</Model>
AIML
AIML Interpretors do not handle this feature
Conditional Patterns
SIML even supports Conditional Patterns.
SIML
<Model>
<Pattern><If User="Is-Master"/></Pattern>
<Response>Welcome back Sir!</Response>
</Model>
AIML
AIML Interpretors cannot handle this feature due to AIML’s static Graph System
Do more with Operators
SIML includes a variety of operators:
- Value
- GreaterThan
- GreaterThanOr
- LessThan
- LessThanOr
- Exists
- Defined
- Not
- Contains
SIML
<Model>
<Pattern>HI THERE</Pattern>
<Response>
<If User="Age" GreaterThan="18">
Well, Hello there!</If>
<Else>Yo!</Else>
</Response>
</Model>
AIML
AIML just offers value=""
comparisons
One element many features vs Many elements many features
With SIML we believe that there’s no need to re-invent the wheel and keep adding new tags for new features when 1 element with 1 attribute can deliver it all.
SIML
<Model>
<Pattern>I AM FROM *</Pattern>
<Response>Vive la <Text Get="Uppercase"><Match /></Text></Response>
</Model>
<Model>
<Pattern>MY NAME IS * </Pattern>
<Response>Hi there <Text Get="Formal"><Match /></Text></Response>
</Model>
AIML
<category>
<pattern>I AM FROM *</pattern>
<template>Vive la <uppercase><star/></uppercase></template>
</category>
<category>
<pattern>MY NAME IS *</pattern>
<template>Hi there <formal><star/></formal></template>
</category>
And More...
- Parameterized Sets
- Repetition Management
- Timed Evaluation of Elements
- Event Handling
- Suggestion Mechanism
- Dynamic Variables
- and so on...