SemanticNetworksForSearch

I’ve been playing around with SemanticNetworks, and experimenting with using them in rather different ways then they’re usually intended.

Example: frame.py

Check this out --

In my program, I get the prompt:

 >>? 

Now, I want to know, what data did I enter around the symbol, “tuplegraph?”

And so I type:

 >>? tuplegraph

…and it gives me back:

 <tuplegraph describes semanticnetwork>
 <tuplegraph shouldbeableto selfnormalize> 156
 <tuplegraph like mud> 158
 <reasoners pave tuplegraph> 157, 158
 <tuplegraph as space> 158
 <tuplegraph usuallyfor calculating> 158
 <tuplegraph as makingcontinents> 158
 <tuplegraph partof logicengine>
 <tuplegraph as memorypalace> 158
 <tuplegraph as ideamap> 158

What this does, is tells me, all these different paths into and out of the symbol “tuplegraph.”

It means that, there’s an idea, in “frame #158,” that says, “tuplegraph as space.” (Among other things.)

So, now I want to see that- I want say, “Show me frame #158?”

 >>? F158
 
   (#158)  the Tuplegraph as a Space
    C:\tagged\tripled.txt
 
 
 Tuple graphs and reasoning engines are **usually,** **generally,** presented as
 tools for *calculating.*  You put in your knowledge, you crank a few turns, and
 out comes your answer.  Here is a *different vision:* Using them to *create* and
  *pave* spaces for *browsing.*  That's what my frame system does here.  Rules ca
 n be used to enforce consistency and evenness and to declare routes (such as rev
 erse routes,) and to discover new connections.  The tuples themselves form a map
 , like in a MUD.  That map is used to localize and contextualize related thought
 s.  So it is like making continents and placing things on them, like a memory pa
 lace, rather than solving a particular equation.  This is an insight that follow
 s from the interrelationship between knowledge representation and search:  All s
 earch requires knowledge representation, to declare the parameters of the search
 .  The better the knowledge representation, the more defined the search, the bet
 ter the results.
 
 * tuplegraph as ideamap
 * tuplegraph as space
 * ideamap for contextualizing
 * tuplegraph as memorypalace
 * betterkr leadsto bettersearch
 * tuplegraph as makingcontinents
 * ideamap a map
 * reasoner usuallyfor calculating
 * search -- knowledgerepresentation
 * tuplegraph usuallyfor calculating
 * tuplegraph like mud
 * reasoners pave tuplegraph
 
 >>?

You can see that the bulk of the frame is text, the text of an idea.

And then you can see, at the bottom there, a number of triple relationships that are “trapped” by the idea.

Now, we see, “reasoners pave tuplegraph,” there at the bottom- let’s sort of “zoom in” on that.

 >>? reasoners
 <reasoner plural reasoners>
 <reasoners pave tuplegraph> 157, 158
 <reasoners could searchbytime> 157
 <idea about reasoners> 157
 <reasoners could searchbyrelatedknowledge> 157
 <reasoners apply logicrules> 157
 <question leadsto reasoners> 144
 <classicalforwardchainingreasoners are reasoners> 157
 <reasoners dontneedto figureouteverything> 157
 <reasoners canbe forwardchainingreasoners> 157
 <reasoners canbe reversechainingreasoners> 157
 <reasoners couldbe softwareagents> 157
 <reasoners could runcontinuously> 157

Ah! We see that frames #157 & #144 have some things to say about reasoners!

Let’s look at something sort of “out of the way” – frame #144 asserts that “question leadsto reasoners.” What’s that all about?

 >>? F144
 
   (#144)  (no title)
    C:\tagged\tripled.txt
 
 
 "What kinds of machines can answer questions, using the Semantic Web?"
 
 * question about semanticweb
 * question leadsto reasoners
 * question about questions
 * question about machines
 * question leadsto expertsystems
 * question about answer
 >>?

This is in fact a question that leads to reasoners.

So, What's Going On Here?

I’m still playing around with this idea, but it seems to me that the idea is about:

That is, semantic networks are almost always used to enter data, that you then run some rules over, and then you get out a calculation. At least, that’s what every textbook explanation of them that I’ve ever seen seems to imply. So, in some ways, this is a radical misuse of semantic networks.

In progress…

(Internet connection flaky at the new place; Uploading while I still can.., even though not complete.)

Further Adventures

Just yesterday, I had the (to me) shocking idea of: “Why not embed semantic statements within the text?”

I am very excited now, about the idea of a wiki that does this, I think it’s a very easy thing to do. I finished my first SemanticNetworksForSearch program a couple days ago, and already, I’m excited about my next one. I’ve already started writing data in the format that will be interpreted. It looks a little something like this.

…let’s see… I need something to crib…

CwordProblem!

 When used as a modifier, the words collaborative, cooperative, and collective
 are often used interchangeably. For example, one may speak of a collaborative
 effort and later refer to it as a collective effort. This is not necessarily
 a problem. In many cases, these terms can be loosely understood to mean that
 a group of people are involved and the conversation survives just fine.
 
 [[cwordproblem aboutword collaborative]]
 [[cwordproblem aboutword cooperative]]
 [[cwordproblem aboutword collective]]

(Note: I have made a shorthand notation,

 [[cwordproblem aboutword collaborative/cooperative/collective]]

…that just evaluates to the above.)

 [[cwordproblem confusedwords]]
 [[question about definition]]
 
 However, in an environment such as CommunityWiki, the discussion may
 get quite specific about, well, groups of people. So perhaps it makes
 sense here to clarify.
 
 [[cwordproblem problemfor communitywiki/peopletalkingaboutgroups]]
 
 Collective
 Used to refer to something (such as effort or action) that is assembled
 or accumulated from individuals. It is important to note that these individuals
 are not necessarily involved or aware of the assembly or accumulation. For
 example, a collective decision to go to a movie may feel inclusive, but the
 collective wisdom of Google’s page rank algorithm is not assembled by or for
 the individual page authors.
 
 [[collective means "assembled by individuals, not necessarily aware of assembly"]]
 [[decisiontogotomovie exampleof collective]]
 [[pagerank exampleof collective]]
 
 Collaborative
 Implies that people are making efforts to work together and with purpose,
 usually around a project such as collaborative TheoryBuilding, or BarnRaising.
 
 [[collaborative means "people making effort to work together"]]
 [[theorybuilding exampleof collaborative]]
 [[barnraising exampleof collaborative]]
 
 Cooperative
 Also working together, but usually where there is an understood, mutual benefit
 (as in a non-zero sum game), and often requiring compromise, such as when
 resisting pure self-interested behavior. This key differentiator may involve
 acquiescing, complying, or binding oneself to a SocialContract – for example,
 by conforming to a set of rules or agreeing to behave a certain way in the
 future.
 
 [[cooperative means "working together for mutual benefit"]]
 [[cooperative like businessdeal]]
 [[cooperative oftenrequires compromise]]
 [[compromise mayinvolve acquiesce/comply/bindtosocialcontract/conform/rules/agreeing]]

It should also be possible to use special macros like “$HERE” to talk about a line number in the file, or “$SECTION” to refer to logical divisions, and the like.

I’ve been experimenting with marking my ideas like this, and exploring around them.

I can’t say it’s been everything that I’ve hoped for, but it’s been very interesting. You can see how ideas overlap; It feels subjectively like walking around in a Memory Palace.

I do think it’s a good idea, and I’ll be continuing my attempts with it. I’ve been evolving practices of what is good to do, what is not good to do. (I discovered the value of 1-uples, and 2-uples, for instance. “Tagging” is basically just 1-upling everything. See also: TriplesBad.)

It’s really nice to finally be able to distinguish between, say:

 idea on 2001-09-11

…and, …

 idea about 2001-09-11

…which, is just impossible using tags. (It’s just all: “idea”, “2001-09-11”)

I like to tag with like 20 tags, especially if it’s a page I really care about.

My problem is that I increasingly get irrelevant results, because I have no ability to tell how the tags are connected to one another.

Further, when I make a “miss,” I can’t “browse around,” and find it. The literal connection of tags works much better, I find, than tag clouds.

That said: I will never trust a notekeeping system until I’ve used it for at least 6 months, and see what I can get out of it, and what I can’t.

Like Categories

You can sort of think of this as “Really smart categories.

We put a CategoryPage? link at the bottom of a page, and now we say, “Oh, that page now belongs to that category.” We can generate lists of categories and such. Be putting category page links on category pages, we can even generate a tree of all categories, and such: Such is the power of the 2-uple. It’s great.

With these things, we can now ask the computer:

It can feel like you’re making a copy of all the info, and in a way, you are. But you’re stressing, and quasi-structuring, which means that you can start navigating the mirror world of ideas, like you would navigate through a museum.

Coaxing Queries

Now, to ask the computer these questions, you have to know CommunityWiki-query-language. You have to know things like, “CommunityWiki calls this relationship “exampleof,” rather than “example.”

Because, different people are going to be using different things.

But it occurs to me that we can train systems for what I’ve been calling “magnetic binding.” Things where it goes: “Okay, you’re new here? Let’s give you some suggestions, about how to put your queries together.”

Conceivably, we can say, “These English words are mistaken for this term of our query system. If you see a new user struggling to put together queries, suggest these possibilities, and show the user how we define them.”

 exampleof means "?foo exampleof ?bar is how we say that ''foo'' is a fair example of ''bar.''  If you are looking for examples, use this."
 exampleof frequentmistake "example"/"demonstrationof"/"demonstration"

In this way, I would think, it should be able to help coax users’ queries into sensible smart machine queries.

One nice thing doing it in a wiki environment, is that, as people make mistakes, and as people go, “Hey, I’m trying to ask it this, how do I do that?” …and then we can go, “Oh, that is a sensible way of asking that. Our word is “foo,” but let’s correct the frequentmistakes entry for foo to include bar. There you go.”

That is, it has this principle of IncrementalIntelligence?, which I’ve come to really appreciate.

I will probably experiment with this myself, on my computer.

Built in database support.

One nice thing here is that, if you need a database, you have one.

You just start:

 (peopledb lionkimbro LionKimbro 29 yellow programmer)
 (peopledb amberstraub AmberStraub 30 red referralscoordinator)
 (peopledb sakura nopageyet 5 pink monster)

…and there you go.

If you want it in a different form, just introduce rules.

 (peopledb ?person ?page ?age ?favoritecolor ?job) => (?person job ?job)

Sophisticated Embedding

I suspect it would be possible to do more sophisticated embedding.

 [Q:] How many licks does it take to get to the center of a tootsie roll?
 
 [A:] 46
 [A:] 964
 [A:] 3954
 [A:] I don't know, let's ask the Owl.

(Sorry, AmericanCulturalAssumptions?.)

If you found you were doing a lot of Q&A, you could automatically generate structures that say “here’s a question, here are where to find answers.”

For whatever domain you were in, you could make a wiki-like semantic markup, to make it for possible searches in there, or for niftier visualizations of the memory palace when you step into the data mirror world.

See Also

Have you considered using your semantic network as input to some graph visualization software like GraphViz? Of course, you lose some of the interesting qualitative features, but other interesting qualities might emerge from the spacial relationship representation, and it makes it possible to use some additional tools to learn things about the semantic network you are analyzing, such as clustering algorithms.

Not only have I considered it, I’ve tried it out, with data.

But the automation is somewhat tricky, for totally pedestrian and implementation-specific reasons, and I didn’t think the output was sufficiently helpful, so I’ve clipped that code.

To do the visualization right is somewhat tricky, and involves a lot of statistics and so on. It’s more number-crunching, and API play, than visualization.

I’ve rewritten my CW semantic network program, and made it for more social bookmarking. I’m about to host it on TaoRiver?. General interest in this seems to be low. From the SemanticWeb community, I’ve heard some praise. We’ll see; I really need to play with this for a few more months, to really understand how to do the tagging “right.”

It was the same way for me with tagging; It took me a while to figure out how I wanted to tag bookmarks, and so on.

For your information, I’m currently being compelled to consider ‘tagging’ in several new contexts and it really has expanded my appeciation of both the complexities and opportunities inherent in this simple concept. These are two specific examples …

  • FlickR supports tagging (and a fair bit of boolean logic for the tags.) If one views FlickR as a very large and active community whose members are interested in sharing images, then the problems of finding images and attracting viewers become quite interesting.
  • We’re launching a derivative mapping system, based on google maps. It has a couple of ‘different’ design assumptions. Specifically …
    • (a) It is desgned to support an unlimited number of Pins on each and every possible lattitude and longitude intersection, currently with 6 decimals of precision. The only way of filtering the pins that are displayed is by using a tag string that ‘grows’ longer to filter out more of the Pins. (Think about an overlappig of the concepts of LocalNames, acronyms and aliases, and Personal macros)
    • (b) It is completely Open (allowing each Pin to be either Public or Private and can be Owned) and it allows HTML to be placed in the Pin’s “balloon”. If any of this catches you interest, I can crete “tutorials” in either or both of these environments.
    • By the way, I’m thinking it might be interesting to try to map SecondLife.

Wow! That’s a really good idea!

So, if I type in “mcdonalds seattle”, it only shows mcdonalds in Seattle. Or I type “garden”, I see all the gardens, and then “japanese garden,” and it limits it to just the Japanese-style gardens.

That’s really cool!

When you make the site public, I’d definitely like to see it.

Can you make it so that people can upload their own enormous PNG images, to use as maps?

Of course, Yes!
But there really is no need to upload the file since it’s trivial to link to the components, even to content on your own computer (e.g. the backgound PNGs which can be distributed independantly as VirtualTiles? (Watch google ‘assemble’ its maps by looking at low altitude views to appreciate how this can be done). I’ve found this to be a concept that people have a hard time grasping the significance of, so it you want to explore this further, I’d be pleased to. You have but to ask.
– Hans

Hi Lion. I saw your note on my page and took a look at what you’re doing. It’s remarkably similar to what I’m doing, which is effectively harvesting AssertionPlugin instances off of wiki pages, each instance a tuple in the form

   subject predicate object

where each is a wiki page reference. The predicate must be an instance of a WikiVerb, a wiki page that contains the template for the predicate (the roles that its subjects and objects play in the relationship), e.g.,

   [{Assert [Dog] KindOf [Animal] }]

All of the assertions are harvested by a WikiMapManager into a dynamically-updated Topic Map, from which one can them make logical assertions. So effectively the entire wiki becomes a giant Topic Map editor.

The one thing I think your scheme is lacking is predicate templates. If you don’t know the roles played by the subject and object of a sentence you can’t reason about anything, you don’t even know which direction the relation implies (if it has direction). Templates also permit the expression of things about the predicates, such as transitivity (i.e., whether if you chain a string of statements together what holds for one end of the chain is true through the chain).

I’ll be posting the complete scheme of this to the CeryleWiki at some point within the next few months.

But I think you’re off to a great start. Looks like fun!

Define external redirect: CategoryPage IncrementalIntelligence TaoRiver VirtualTiles EthanAndLewis AmericanCulturalAssumptions

EditNearLinks: FlickR

Languages: