CONVERSATION SYSTEM - 0910.97
notes, ideas, etc
for a conversation system
to pass the turing test
hey.. this is a mess right now.. actually, it's all set
up to be converted into html chunks.. :)
once i get code written for that, i'll index all this automatically
and make it all pretty and searchable..
but that's later..
right now I just wanted to get it into the computer.
- michal / sabren
----------------------------------------------------------------------
0912.97
split function in perl will make an array of words out of
a string (you specify the seperator)
0926.97 Neural networks
NN's can be trained to give certain responses based on criteria.
If there were a way to classify the incoming message and then
respond with a learned type of response... It's like rotating
the input through hilbert space... (?)
A conversation system has to be flexible. It would be
cool to have several abilities/objects/systems... Neural nets,
markov chains, meta/milton models with libraries and databases
of predefined deep structures.. meta modelers to extract more
information.. spider programs and scouts to seek new info from
the web and learn about it... multiprocessing / event driven
stuff so the system could distract users, talk to several users..
It could even get live input from scouts on IRC talking to human
beings. It could talk to you while its scouts sent out messages
and when they returned with knowledge, could suddenly "remember"
All of this could be tied together with self-adapting code.
drivers
All of these behaviors should evolve. That is, I can give
the program all the abilities it needs by giving it very
basic skills. I might even create some more complex
systems.. But they won't be limited to how I would do
things.. I can provide a basic script, but like everything
else, it would be subject to evolution.
thinknet
My old 386 is so much more powerful than one neuron. Yet
I can easily outthink poor GURU. But what if a million
people on the internet each had a copy of my program running,
and the programs could talk? It would be hell on bandwith...
On the other hand, it could learn so much faster.
(Note on that: I'd obviously (?) lose control of the program
if i did it this way... No one knows who i am, but if
I were to develop the idea in a book first.. I'd get
the fame and recognition.. I'd also have a better thought out
program, and there'd be more people working on the idea. (thus,
I'm linking brains memetically as well as computers via the
net).. Hey, this could be part of the book, too.. People
could teach one copy of the program, and the knowledge would
spread instantly!)
memetics: survival of the fittest .. gossip
Strands of the code could mate when meeting.. new
installations would always be derived from one or more
existing strands... from time to time, more popular strands
would "eat" the others... The idea being that strands that
were fun to talk to, or worth talking to, would survive, and
spread their memes. Others could model them.
It could evolve & spread by becoming more and more useful to
humans... simply by natural selection.. so the internet would
grow to have personal friendships with individuals, and ideas
would easily spread to where they needed to go: gossip!
Imagine someone telling a new idea to the net.. It can only
happen with $1,000,000 but the net knows everyone and passes
the idea on to an investor, or a philanthropist.. and s/he
sends the money... suddenly everyone interested in the subject
hears about the new business. wow!
1007.97 Breeding a silver tongued devil
Computer code is a language. I want to make code that
generates language. Language making language!
Now, what if I made a simple program that knew how to
create, random, syntactically correct language, maybe
using a formal system. That program could easily become
a standard subroutine in a computer language. I could
then feed the particulars of the computer language into
that procedure, and the language could replicate itself.
I get the intuition that the computer could be programmed
in English!
Passing the turing test will wipe out the need for any
other computer language! Perhaps such a program would
even become a universal translator!
1018.97 reference books.. :)
It should have an online word menu to quickly gain access
to a small body of knowledge about a particular subject.
Also, a dictionary, maybe a thesaurus, a book of names, and
a small encyclopedia..
1125.97 objects
Words are objects. They derive from other words & interact with
each other based on simple rules of syntax. Could each word
object have a method to clarify itself?
Pronouns would try to determine their referrents. Nouns chunk
down (pet becomes cat).
Nothing hard about that, but which words are "class" words,
which are pronouns, etc?
0105.98 Hacking Eliza
0201.98 Network-Based Expert systems
Hey! Not all expert systems are rule-based!!
When more causal information is available, then other
representotions may be more pertinent, such as networks
that link state nodes (representing parts of the physical
system in question) by arcs representing causal relations
- William B Gevarter (??) in Applications in Artificial Intelligence
(stephen Andriole, ed) Examples: "CADUCEUS", "PROSPECTOR"
LADDER: What (be) the (attributes) of (ship-description)
(it uses patterns like that)
scripts
Players: customer, server, cashier
Props: restaurant, table, menu, food, check, payment, tip
Actions:
- customer goes to restaurant
- customer goes to table
- server brings menu
- etc..
I could do cool stuff with this.. consider:
a week is 7 days.
a day is:
- wake up - get dressed
- eat breakfast
- go to work/school
- eat lunch
- more work/school
- go home
- do fun stuff
- go to bed
an Xrefed script would be an ideal way to meta/milton something:
general script points to more detailed script.. chunk up, chunk
down, etc...
0125.98 Stacks for Keeping track of Threads
If you have an outcome in mind, all you have to do is change
your behavior until you get what you want. So what if I started
that way? Have a stack, and pop an outcome onto the stack:
"Convince them I'm human" or "Lead them into a state".. Chunk
up a lot...
Expect a certain quality of answer.. "what response am I looking
for?" .. It could be a specific word, or whatever... Like yes
or no, or an equivalent.
In any case, we can now stack realities, open and close loops, etc.
-> what about SS type language?
0125.98 Elements of NLP Chat
0126.98 Database ideas for Expert System
Assert
Add to assertion hash.
Query all rules that ref it.
If any rule completely fires, rut its macro.
principle
Whether or not you are an expert, you can build
... up the kind of knowledge base ... by recording
a large number of examples or instances of.. observations
and what actually happened...
- mike van horn, understanding expert systems
algorithms
- generate & test
- forward chaining
- data driven
- few facts, many solutions
- backward chaining
- many facts
- few solutions
- recursion
abstractor
"the cat is ugly" --> "Art1 n1 v1 adj1"..
(convert to string)
Now, use formal system (transformational grammarish) to
change the sentence and respond:
"v1 art1 n1 adj1" --> "is the cat ugly?"
or, as a metamodeler, "how do you know the cat is ugly?"
what if i used an expert system to parse? word could be
noun, verb, etc, so we use backward chaining....
synonyms are important! we could llok for verbs, nouns,
or feeling words, names, etc...
what about a "dictionary" of sets:
ID WORD DEF(92l3847923847tbqjxteohk)
where DEF is a huge bitmap of sets to which a word can belong..
What if I could keep track of successful strategies?
What if I could compress a sentence to a (type of sentence)
.. and use a markov chain to discover the (type of sentence)
best used for a response?
What about using NLP modelling tools to generate expert system
rules?
In a forward-chaining system, you can simplify rules as you
learn:
- if (has tail), (barks), (eats kibble) then (is dog)
- Assert (has tail)
- rule shortens to: if (barks), (eats kibble) then (is dog)
0129.98 Rules as Objects, Rules as DB
Rules have properties:
- a truth value (fuzzy?)/certainty
- an if clause
- a then clause
- An else clause?!?
What about a broadcasting procedure?
imagine a database:
... something's lacking though in defining a truth for each
consequence... blah.. probably makes more sense to use an
expert system, but...
What about submodalities? various attributes for each object.
Or store sentences with lots of adverbs, adjectives, etc..
Assert: big green [monster]
Assert: big [city] (tokyo)
Assert: [monster] eating [city]
consider: every xyz can't abc --> no xyz can abc.
0130.98 Some thoughts while studying perl
"If" has another mode in english: what if?
Perl uses nulls, empty arrays, "", or 0 to be false...
I think i could do a lot of lrisp stuff using perl's array
handling.
0131.98 Esperanto
You know, this program, to pass the turing test, doesn't have
to know very much, or produce eloquent responses. Those are
good attributes, but not essential. Essential is having a
coherent conversation. For that, the program has to understand
language. But english is way too complex to understand. The
grammar, spelling, etc, varies way too much.
I've always thought that esperanto would be easier to work in.
You know which words are nouns, which are verbs, etc. Word order
doesn't really matter, or at least is not as strict. Plus there's
dictionaries online... All I'd have to worry about is.. formulating
a useful reply in english... And it wouldn't have to be a
translator.. It could just convey a grammatically correct sentence
back to the user...
- Input
- "translate" to simple esperanto
- ? - various processes
- generate esperanto response
- filter back into english
0202.98 Some thoughts for Loebner about...
mind reading
Why has the user asked a question or given a statement?
How can I second guess them?
eg: do you know what time it is?
Can you XXX?
Ah.. Computer must garner presuppostions and act on embedded
commands.. :)
object-oriented esperanto
scripts, yes.. and objects... or classes..
> John is a man
: what does he look like? ; john has looks
; he also has (probably)
; clothes, a car(?), a job
; parents, family
so.. if i know that a person has a gender, an age, etc.,
i can meta-model that. how old are you? are you a man or
a woman? what do you do for a living? for fun?
Keeping track of this stuff is so much easier in Esperanto!!
Just tack on a prefix.. (look up in dictionary to see how it
should appear)
Perhaps each object could have a rule base for polymorphism..
"If gender is male and age > 18 then reclassify as MAN"
consider:
| Male | Female |
| Old Man | Old Woman |
| Man | Woman |
| Boy | Girl |
| Little Boy | Little Girl |
| Baby |
Ellipsis: leaving out words
anaphor: pronoun/phrases pointing back to nouns..
Hey! What about the socratic method for leading/dominating
the conversation?
Question: what does the program do when no one's talking to
it? If its rep system is useful enough, it could just come up
with hypothetical situations and act them out. Or explore
mixes and matches.. It could daydream! Think! Hmm...
It could have problems to solve and try to solve them..
OOP/Inheritance means using syllogisms. If joe is a
man, and men are mortal, then joe is mortal. Ah.
What if the system talked to itself? Kind of like IRC.
The user inputs a question, and all these bots talk to it..
But only one message gets through.. Or maybe 1 or 2 or 3.
This could be how it thinks... User input would just add to
the current dialog... One bot could report on the topic..
"I was just thinking about xyz..." In fact, it could be our
(us as humans) liasons to the electronic tribe/hive mind.
But how to pick the best result?
Somehow, we have to have an ability to figure out what makes
sense next. Perhaps an abstraction: A text becomes a series of
classes, each represented by a symbol. Then compress sentences
into symbol-words and use a markov chain to see what type of
sentence is likely to follow...??
Evolving Sabrina (an a-life chatbot)
| word |
id |
kn/adv/adj/etc |
definition |
| (esperanto)? |
| an english/esperanto word (or any language) |
primary key |
parts of speech |
256 char string.. 128 values.. (binary string) |
(maybe) word in esperanto |
rule bases: use genetic algorithm to generate
0226.98 "neural net"
2^64 = 1.8446x10^19
256^64 = 1.3408x10^154
A 64-byte internal experience offers a lot of room to play.
an inconceivable number of options / combinations / permutations
i may need to generalize a bit... i'm in this state.. what's
most appropriate of these 1,000 actions? ... maybe...
0313.98 The Modeler
Given a totally empty neural net, an initial null 64-tuple
and a set of books to read, sabrina would probably not learn
much.. she'd not really experience anything... absolute zen.
given a totally random net (meaning a large dictionary of
random 64-tuples) she'd *probably* start to notice patterns.
Words like "the" would begin to lose meaning.. They'd get
associated with everything..
0417.98 Meta-modelery
- deletion
- are there verbs in sentence with missing arguments?
- passive voice
- i'm (verb - running, etc.)
- i feel xyz...
- perhaps special parsing for non E' sentences?
- -ing words
- note some sentences have 2 verbs <-like that
- adjectives - the bored man said hi. (bored about what?)
(said hi to whom?)
- comparatives - more xyz, faster/better/smarter - than what?
- suprelatives - best most worst - compared to what?
- clearly/obviously - to whom?
(p.68 of StrucI - "it is" test)
- Modal operators of necessity - have to, must, etc
(what would happen..?)
- Modal ops of possibility - impossible, can't, may not
(what prevents?)
- distortion
0418.98 Active Listening
Sabrina could have a thesaurus, and rank words based on
frequency/simplicity.. Then she could take a sentence, change
a couple words, turn others into pronouns, and otherwise pace
what the user/client is saying...
0418.98 Client-Server
It would be kinda cool if I had a sabrina-server and all
kinds of clients.... One client for the mud, one for
IRC.. a command line one.. One that could search the web..
The server could keep track of multiple conversations..
So, if I said "tell _stile_ i said hi," then any client
that talks to stile - whether its irc, in response to
an email, or on the mud... or whatever.. the client will
tell the server "hey, stile's here"... and the server
will say, "tell him michal said hi".. and the client will
say, "hey stile -> michal said hi!"
0420.98 Anti-Math and Isomorphic Engines
I get the feeling that one way a sentence could be compressed
is as an Anti-Math story.
The above sentence might look like this, for example: |++++++|*|
It would be nice to have some more advanced symbols, though..
Like "many" (small numbers are covered already).. and
possibility.. And maybe some meta-symbols.. for "it would be
nice" or "this would suck"..
It seems anti-math stories are inherently archetypical.. Perhaps
we could use some Jungian archetype symbols as well, and their
likely interactions (heck, we could just use a daily horoscope,
or tv guide as an experiment) (WOOHOO! FINALLY A USE FOR
TELEVIDEOGUIDEOMANCY!!!!!!) :) :) :) :)
Anyway, once we can abstract an english story to an anti-math
story, then we could have a routine that re-told the story
using different objects or different people...
Now, if we came up with a sort of genetic evolution or even
RANDOM storytelling made up of anti-math stories strung together,
then not only could we tell new stories, but we could offer
metaphors, etc that relate to the client's experience.
0420.98 Clarity, Sabrina, and these notes
In typing these up, I've realised that they're not very clear.
That's fine. They'll be the first test for Sabrina-as-Meta
modeler.
0421.98 64tuples, from Alex
> I took a look at your notes, and I like the idea of the 64-byte submod
> anchors. My idea is, when the anchor is fired, it should be somehow
> averaged in two different proportions with the current 64-tuple and one
> goes into the current experience, the other replaces the anchor. That
> way, you can change and reset anchors more realistically. I don't know
> if you want to do this, but it might be a good idea to make the
> proportions evolutionary or learned or something.