Forum OpenACS Development: Enhanced KM in OpenACs 4.0 -- interface to OpenCyc

There is a lot of discussion of KM throughout these boards, and as we look to the future of OpenACS, I want to suggest using OpenCyc (also at sourceforge) to enhance the KM capabilities of OpenACS.

My project's needs extend from sense disambiguation and contextualization of query strings to automatic document classification with metadata extraction and generation to general knowledge discovery of the content of forum and other OpenACS databases, among others. The goals are enhanced user experience, improvements in CRM functionality, and increased "self awareness" of unstructured textual content in the application.

From what I know about OpenCyc, these goals (and more) should be readily achievable through the creation of an interface to the OpenCyc API.

I am not a programmer. If I were, I would take this on myself. I do want to interest a member of the OpenACS community (who is also a programmer) with interest in these areas to work with me to get started. OpenCyc would provide capability that was originally a part of Oracle's ConText package that has evolved into Intermedia, and is missing (from what I can glean) from the full text search working currently going on.

IMO, this sort of integration can rapidly expand the scope and usefulness of OpenACS and make it more competitive (assuming that is a goal of the development) with alternatives while fulfilling one of the basic promises (and premises) of Open Source tools.

Reply privately, if you'd like, but I'd like to see a public discussion about the usefulness of this approach and the uses to which a tool like OpenCyc can be put in the framework of OpenACS.

This looks somewhat interesting, though I confess that a lot of it
is well beyond my competency. There are two areas that seem
like they could be helpful in OpenACS:

1. Natural language search queries. How might OpenCyc be
able to refine the functionality to the existing search package?

2. Taxonomy-building. How could OpenCyc be used to help build
category (or keyword) metadata in the content repository?

Clay, could you comment on either of these?

OpenCyc can be considered to be an enhancement to the
existing search package for most uses, as a pre-processer.

One major challenge in full-text searching is query
contextualization. Basically, when someone enters a general
search request for a topic like "Java," the search engine doesn't
know if you're interested in the programming language, coffee, or
an Indonesian island. OpenCyc (and WordNet, which is a part of
the package), can help that contextualization, in part by a)
engaging the requestor in a dialog to ask them which one they
are interested in, and/or b) chunking the return results into these
parent categories.

One way to use query contextualization and chunking is for the
preprocessor (OpenCyc) to formulate queries that will return a
separate results set for each sense of a word  or phrase, a form
of metasearch, if you will. The results are aggregated and
presented to the requestor using some presentation method
that supports i) serendipity and/or ii) helping the requestor
eliminate from consideration results which are obviously not of
interest. General terms return so many results (java returns 2+
million pages at Google while java+coffee returns 190k pages)
enabling users to say, "I am not interested in these things," is
incredibly useful.

Because OpenCyc "knows" about these aspects of language, it
can examine texts to determine what they are "about." In this way
OpenCyc can be used extract meaning from a document/db
record (e-mail, web page, forum posting, etc.) and automatically
generate metadata that can be inserted in a db in a form that is
optimized for querying or query assistance. In one use I have,
OpenCyc would scan the contents of e-mails directed to
customer support and route them based on content.

OpenCyc can be used for general knowledge discovery in a
e-doc collection, and it can be retrospective in addition to current.
That is, I can run OpenCyc against an e-doc collection and let it
generate metadata about the collection, which metadata gets
indexed. I can imagine having a historical reporting function that
included trending to let me know the change in frequency of
occurrence of certain topics. Important in a CRM context.

Among other things.

OpenCyc looks promising in these regards and others as well.  I'd like to integrate an inference engine with the OpenACS, and OpenCyc claims to supply something in this regard.

In my experience, an inference engine can make personalization much easier to develop and is a more flexible solution than predetermining a SQL query or too.  In the long run, both systems can probably generate identical results, but my experience is that doing so in a rule-based fashion is more productive (no pun intended), and easier to modify and reconfigure when your goals, or market changes.

Imagine the SDM/ticket tracker mixed in with case based reasoning or other sorts of Cyc based reasoning: have these symptoms been reported before?  Which bugs have dealt with these symptoms?  Which developers have worked on those bugs?

Of course, visiting sourceforge, it doesn't look as though anything has been released yet.

<p>I thought these guys sounded familiar so I did some poking
around. Yep, I've heard of them before. They're the real deal.
Their founder is famous in AI circles as one of the top luminaries
in the field. They are very well funded, and have been very well
funded for years. (And BTW, according to the project update in
SourceForge, OpenCyc 0.9B is supposed to be released by
10/12.)</p>

<p>It's very easy to get pie-in-the-sky with these sorts of things
so I'm going to list only those ideas that I'm guessing wouldn't
be outrageously difficult to implement (assuming OpenCyc
works as advertized).</p>

<ol>
<li>Enhance the OpenACS search results page by grouping the
results into folders, similar to the way NorthernLight.com does.
(This might actually be a good pilot project for
OpenACS/OpenCyc integration.)</li>

<li>Shovel a huge amount of pre-existing content (Word files,
PDFs, static web pages, etc.) into an OpenACS system and have
OpenCyc generate one or more category trees for it. Then
generate a Yahoo!-style content directory. This would be
enornously useful for medium to large-sized organizations that
generate a lot of content that doesn't get re-used because
people who don't know it exists already have no way of finding
it.</li>

<li>Shovel all of the content (bboard posts, documents in
file-storage, SDM entries, etc.) created by one person into
OpenCyc and produce a ranked list of categories in which this
person seems interested. Show that ranked list, along with links
to the content items in each category, on the person's profile
page. (This could be hidden at the user's option.) So, for
example, you could see that Jane Doe has posted a lot of stuff
about caching to the OpenACS.org site, and you could
immediately drill down to those particular posts to see if she's
the expert you're looking for. Alternatively, you could allow
somebody to search the directory based on keywords to find all
the people who have posted stuff about caching, in rank
order.</li>

<li>Building on the idea above, whenever the person's interest
level score passes a threshold on a particular topic, have the
system ask the person if s/he wants to receive email alerts when
new content items within that category are entered into the
system.</li>
</ol>

<p>Yeah. This could be interesting.</p>

You're right, Michael, it's very easy to get carried away with the
promise of KM and AI and be very disappointed by the results.

I don't know if mimicking Northern Light is the first place to go,
here, in part because of its "black box" nature. One of the
reasons I don't like NL is that I don't understand how it works
because of all the outliers in the results. The auto-generation of
a taxonomy is more interesting, but suffers from some of the
same problems.

A way to generalize your first two points is to say that they are
"point of entry" problems, which is to say, "How does a user
know what's in the collection to search for?" Taxonomies (like
Yahoo!) are too specific for this purpose while at the same time
being too ambiguous because of the arbitrary nature of the
terms chosen for the top level of the hierarchy. However, a
collection of phrases and keywords grouped into the smallest
possible number of headings would be interesting, in that it
could describe, in very general terms, what's in the collection.
These could act as starting points for exploration.

Another useful project is meta-organization, where individual
documents or data-objects can appear in all the places where
people are likely to want to find things.

None of this is truly interesting without being "aware" of the way
the system is being used, in order to be able to transfer
knowledge about the contents of the collection into the metadata
cloud about the collection so that the system gets smarter the
more it is used.

I've generalized what I'd like to accomplish in the following way:

here are really several main things I want to achieve with an
integration project:

1) Query optimization through improved contextualization
(determining the knowledge domain of the query) before
submitting it.

2) Improved presentation of query result sets through chunking
results to search context(s) (organizing the presentation of
search results according to the possible context(s) of the query).

3) General knowledge discovery (metadata extraction) in
"document" respositories (generate metadata about what's in a
database and/or collection) in support of the above two needs.

4) Notification using implicit and explicit profiles supported by
multiple  means of communication (let people know when
something new of interest is added to the db, by e-mail, pager,
SMS, etc.)

These four general tasks can be combined, I think, to do pretty
much anything I can conceive of needing to do with the system.

The more I talk about this the more interested I am in working on
a general KM framework layer on top of OpenACS facilitated by
OpenCyc. When can we start?

I think we start by writing some use cases for pilot integration
projects. We've made some progress in that direction here, but I
suspect that many (including me, to a certain extent) are still
having trouble visualizing the benefits of this system in concrete
terms.

After that's done, we'll need to wait for OpenCyc to be released,
which will hopefully be in the next two weeks. Then somebody
needs to whip together a prototype to show off the potential. Clay,
is that something you're up to trying?

I suspect we'll get more potential volunteers once (a) the initial
4.0 port is finished and tested, and (b) people have a clearer
understanding of what we're talking about here. It still seems a
little abstract.

For general information about the Cyccorp and OpenCyc, see this Slashdot article.
I'd be more than happy to work on concrete use cases to make the value of OpenCYC more apparent to the community at large. As a newcomer unfamiliar with the process, perhaps someone who has expressed interest (Michael? Jerry? any others who are lurking) would be interested in collaborating with me. As I mentioned earlier, I am not competent enough as a programmer to do this myself, which is why I am reaching out.

Implementation can wait until the next beta release of OpenCYC and the 4.0 port is complete/stable. I'd like to begin the preliminary design work so that, perhaps, we may be done or nearly so when the above two conditions are met.

OpenCyc sounds great, but as Michael stated:

"many (including me, to a certain extent) are still having trouble visualizing the benefits of this system in concrete terms"

We are working in the KM-arena with a focus on German students and academics and everything that makes knowledge more tangible would definitely be valueable.

It looks like OpenCyc is very closely connected to the English language though. How valueable would it be for other languages?

"Q: What can one use OpenCyc to do?

...speech understanding (using the KB to prune implausible choices vis common sense, discourse context, and prosodics),

database integration (using the KB as an interlingua through which semantic joins occur automatically via back chaining) and consistency-checking,

rapid development of an ontology in a vertical area (by extending and growing the OpenCyc KB in that area, using the OpenCyc Rapid Theory Formation toolkit)..."

I checked out the opencyc.org site and found out about the license under which OpenCyc will be released. We should have had a glance on it, when we integrate OpenCyc into OpenACS...

"Yes, OpenCyc may be freely copied, distributed and used for commercial or non-commercial purposes according to the terms of the OpenCyc license, which is similar to the GNU Library or “Lesser” Public License (LGPL). Qualified parties can obtain a free license to a substantially larger subset of the Cyc Knowledge Base known as ResearchCyc, which is for R&D use only. The complete Cyc Knowledge Base can be licensed from Cycorp, Inc. for commercial use. Terms for licensing the complete Cyc KB are negotiated on an individual basis. Year by year, each assertion in the latest version of Cyc will migrate to a subsequent release of ResearchCyc, and each assertion in ResearchCyc will migrate to a later release of OpenCyc."
David, it appears that OpenCyc may only be useful in English,
although I haven't been able to find anything on the web sites
that states this fact definitively. Both the natural language
processing and the semantic data are highly dependent on a
particular language. It would take a massive amount of work to
convert it to another language, I think.

Clay, I'm not a programmer, so I can't do the integration for you
(though I would if I could). It'll be especially important to outline
some concrete use cases so that those who can do the work
see a reason for putting in the time. Likewise, there are some of
us here who, while we can't do the work ourselves, might be
able to get funding for it if we could make a compelling and
concrete business case for it.

So let's keep talking about good pilot applications, let's draw up
some use cases, and let's mock up some HTML wire frames.

David: My understanding of OpenCYC is that it is highly
language-dependent. There are differences between languages
that can not be solved by simple transliteration or machine
translation. That said, there is no reason why the corpus could
not be translated ... it'd just be very time consuming. Good point
to follow up with, though.

The license issue is a little different, I think, in the sense that
what the project would do would be to provide, in essence, a
"driver" (API) for OpenCYC. All of the code would be (an optional)
part of the OpenACS distribution and would be covered by the
OpenACS license. People wishing to implement a project would
have to secure a copy of OpenCYC separately. OpenACS would
come with installation guidelines.

Michael: By all means lets put together some uses cases and
do some wireframes. Where would you like to start?

Michael: By all means lets put together some uses cases and do some wireframes. Where would you like to start?

Let's start with your first two ideas:

1) Query optimization through improved contextualization (determining the knowledge domain of the query) before submitting it.

2) Improved presentation of query result sets through chunking results to search context(s) (organizing the presentation of search results according to the possible context(s) of the query).

It seems to me that these two are the simplest to think about first, since they need only to interface with search and not any other part of OpenACS. I'm not really clear on how hard (3) would be or how necessary it is for achieving (1) and (2), and I'm fairly certain that (4) would require more work.

OK, so with that in mind, how would you envision "query optimization" to work? What's it like from the user's perspective? Are there examples of existing pre-search dialogs you can point to as similar?

Likewise, how do you picture the "chunking" of results into "contexts"? How is that like or unlike search results pages that are out there now? For example, I'm not really clear yet on how, from a user's perspective "a collection of phrases and keywords grouped into the smallest possible number of headings" differs from Yahoo! or from Northern Light.

BTW, according to the latest Sourceforge update, it looks like we will have plenty of time to think this through:

Although many of the constants with incomplete minimal definitions do have many other assertions in the Cyc knowledge base, the minimal definitions are a prerequisite for any release of OpenCyc. This should not affect the release date of OpenCyc 1.0 (currently slated for delivery before the end of 2001), but it will delay the open beta release of OpenCyc 0.9B for several months. New dates for OpenCyc 0.9B will be provided as they become available.

Michael:

Let's start with your first two ideas:
1) Query optimization
2) Improved presentation of query result sets

It seems to me that these two are the simplest to think about first, since they need only to interface with search and not any other part of OpenACS.

The query optimiztion requires taking the search request and passing it through OpenCyc to try to figure out the context of the request. Java is a good example: does the requestor want to know about the programming language, coffee, or the island in Indonesia.

One way to assist this contextualization is through the localization of the originating context. This can help with point 2. On the OpenACS site, for example, it is most likely that people are interested in the programming language. On Photo.Net, newbies are probably interested in the Island, but people who are familiar with Philip and Alex's Guide and its ties to photo.net might be interested in the programming language. In neither case is coffee a likely context.

Step 1 requires no knowledge of the contents of the collection. Localization, as described above, does. In order to be able to localize, it's necessary to do Step 3, which is have OpenCyc process the entire contents of a collection so that it "understands" what is in the collection.

In 1998 and 1999 I was looking for money to build a search engine with some very unusual characteristics -- the main ones were collaboration, the inclusion of business rules engines to drive processes like spider scheduling, and incorporation of WordNet to establish context. One example I used was Java. After entering the search request, the user would be presented with something like:

Found 3 different meanings for Java:

  1. a computer programming language (2,000,00 pages, 5967 sites, 19 categories)
  2. a synononym for coffee (116,000 pages, 423 sites, 3 categories)
  3. an island in Indonesia (23,000 pages, 111 sites, 9 categories)

The pages, sites, and categories references were links to presentations of results. The order of the presentation, above, was dependent on the number of pages returned. By having a knowledge of the context of the query, for example, the user is searching for Java from a travel site, then results about the island are almost certainly the ones that were wanted and these would be presented first (or, perhaps, exclusively).

A simple category structure would enable localization, too. If the user searched from within the "travel" category, then the scope of the search would automatically localized to travel. Category organizers, in my way of thinking, should spend as much time thinking about metadata as they do about the category structure. For example, I have a personal interest in chocolate. If I was responsible for the chocolate category at a site that incorporated both categories and a page-based search engine, I would want to create a thesaurus of concepts that describe chocolate to aid a classification engine. With OpenCyc, I would use the OpenCyc tools to do this work using assertions like:

is a type of: white, ivory, milk, dark, bittersweet, truffle, bonbon, ganache
is a manufacturer of: Callebaut, Valrhona, Nestle, Hershey
has(?) holidays: Easter, Valentine's Day
is not related: labrador retriever

I think that this is enough to give you a glimpse of some of the ways I have been thinking about using this.

likewise, how do you picture the "chunking" of results into "contexts"? How is that like or unlike search results pages that are out there now? For example, I'm not really clear yet on how, from a user's perspective "a collection of phrases and keywords grouped into the smallest possible number of headings" differs from Yahoo! or from Northern Light.

One of the challenges with taxonomies like Yahoo!'s is that there is a tendency to want to describe things using a single word. When that happens, related words tend to get separated and entries naturally get segregated. Example, Associations, Organization, & Clubs. To my way of thinking the distinctions between these concepts are not useful when organizing the contents of the Internet -- at least to most users. However, to professional categorizers, they are different, and, while linguistically correct and precise, are a nightmare from a usability standpoint.

My main problem with Northern Light is that, after using it for a while, you'll notice that the range of concepts it uses for its categories is quite limited, is often self-referential (e.g., there is a chocolate "custom search folder" within the chocolate results set), and the confidence ratings are often nonsensical (e.g., the first result within the chocolate custom search folder for chocolate has a confidence rating of only 85%).

From my POV the purposes of chunking are to quickly eliminate the contexts you know don't apply, and to present contexts you may not have been aware of (serendipity). NL doesn't do this for me, nor does Teoma or WiseNut.

OK, this helps quite a bit.

The query optimiztion requires taking the search request and passing it through OpenCyc to try to figure out the context of the request. Java is a good example: does the requestor want to know about the programming language, coffee, or the island in Indonesia.

One way to assist this contextualization is through the localization of the originating context. This can help with point 2. On the OpenACS site, for example, it is most likely that people are interested in the programming language. On Photo.Net, newbies are probably interested in the Island, but people who are familiar with Philip and Alex's Guide and its ties to photo.net might be interested in the programming language. In neither case is coffee a likely context.

If I understand correctly, OpenCyc implemented on an OpenACS site could, for example, recognize that a content item is likely to be about Java even if the term "Java" isn't used in it because it knows that the words "Swing," "classes," "beans," and "introspection" are all terms that relate to Java the language. It should even be able to guess that an OpenACS.org page that uses the word "Swing" is probably relevant to somebody looking for information about user interfaces.

Now, OpenCyc could accomplish this goal simply by presenting the search results in three categories: programming language, coffee, and geographic location. To do this much, you would just have to pass the search results through OpenCyc and display by category. (Right so far?)

It would be more convenient, though, if OpenCyc knew that people searching the OpenACS site are extremely unlikely to be looking for information about coffee or geographic location. This information would reduce the number of user clicks required to get the info they want and also reduce the number of false positives. That, by itself, doesn't sound like a huge gain on a site the size and focus of OpenACS.org, although it could be more significant in a large corporate intranet.

However, there is more here:

Step 1 requires no knowledge of the contents of the collection. Localization, as described above, does. In order to be able to localize, it's necessary to do Step 3, which is have OpenCyc process the entire contents of a collection so that it "understands" what is in the collection.

[Snip.]

A simple category structure would enable localization, too. If the user searched from within the "travel" category, then the scope of the search would automatically localized to travel.

So, if I'm getting this right, OpenCyc could learn to be more useful by being able to access the keywords in the content repository. It could, for example, start to recognize that certain proc names are associated with, say, the request processor. So Cyc could tell the search engine to look for those proc names as additional search terms when a user enters "request processor" as the term. Alternatively, if the proc is used in several different applications, it could group search results by application. (I have no idea if this particular example would be useful to anybody; I'm just making it up.)

Category organizers, in my way of thinking, should spend as much time thinking about metadata as they do about the category structure. For example, I have a personal interest in chocolate. If I was responsible for the chocolate category at a site that incorporated both categories and a page-based search engine, I would want to create a thesaurus of concepts that describe chocolate to aid a classification engine. With OpenCyc, I would use the OpenCyc tools to do this work using assertions like:

is a type of: white, ivory, milk, dark, bittersweet, truffle, bonbon, ganache
is a manufacturer of: Callebaut, Valrhona, Nestle, Hershey
has(?) holidays: Easter, Valentine's Day
is not related: labrador retriever

I had a similar thought to this a while back:

http://www.arsdigita.com/bboard/q-and-a-fetch-msg?msg%5fid= 0009Go&topic%5fid=ACS%20Design&topic=

I was originally thinking about relationships between content items only, but you could do it with relationships to categories or keywords as well. How much would you have to change in the content repository data model in order to do this?

Hey guys,

As a suggestion for a "hot" direction, I would like to refer you to an article in the NY Times from a couple days ago a (http://www.nytimes.com/2001/10/01/technology/ebusiness/01CRM.html?searchpv=past7days).

Quote: The efforts by Hewlett-Packard repeated in the offices of dozens of other computer suppliers, insurers and financial services providers in the wake of the terrorist attacks are extreme examples of an idea long preached in business schools and board rooms: Know your customer, help your business. The concept is called customer relationship management, more widely known by its abbreviation C.R.M., and a $6.5 billion software industry has sprung up around it, creating tools that help call-center agents, marketers and salespeople woo and service customers.

So as you're working out your use cases, it might be nice to work one out that somehow defines how OpenCyc would benefit a CRM system. Or actually to write a use case for a CRM system would be great too. A $6.5 billion dollar industry could always use an open source solution...

talli

Here is another article about Cyc and its descendant OpenCyc. This article places its creator somewhere other than the top of the AI field. In particular, it questions the methodology of his approach.

Regards..

Here is another article about Cyc and its descendant OpenCyc. This article places its creator somewhere other than the top of the AI field. In particular, it questions the methodology of his approach.

Well, I think you have to consider the source and the context. To begin with, "Lingua Franca" isn't exactly the highest authority on these things. At times, they verge on being little more than the gossip rag of academia. Second, what are they criticizing about the methodology? They're skeptical that he'll achieve true, Hal-like AI using brute force. Real, honest-to-goodness, Turing-level AI is obviously an extremely hard problem, and Lenat gets slammed for having the audacity to think he can solve it--and solve it without neural nets or any other fancy new approaches. Does it matter to us whether he can or can't do what he's trying to do? Not at all. Fortunately, we don't need Hal-like AI in order for OpenCyc to be useful for OpenACS. We just need something that helps us organize our information a little more accessibly than we can right now. There's nothing in that article to indicate that OpenCyc is incapable of achieving this rather modest end.

A couple of replies rolled into one post:

Talli:
So as you're working out your use cases, it might be nice to work one out that somehow defines how OpenCyc would benefit a CRM system. Or actually to write a use case for a CRM system would be great too. A $6.5 billion dollar industry could always use an open source solution

Improving the CRM capabilities of OpenACS is definitely one of the uses of OpenCyc that I see and I have been discussing this off-line with a couple of people. One simple use is auto-classification of trouble tickets with a business rules engine for routing. This would require training the system by describing a vocabulary, but there are tools in OpenCyc to do that. The rules are a separate issue, though. As always, in the OpenACS context, is how to create a framework for customization with the correct level of integration with all of the existing modules in the system that could take advantage of such capabilities.

Roger:
Here is another article about Cyc and its descendant OpenCyc. This article places its creator somewhere other than the top of the AI field. In particular, it questions the methodology of his approach.

I am aware of the criticisms of Lenat's work and approach, and, frankly, I don't know that they apply here because I am not interested in a general solution to the AI problem, which as I see it, can be thought of as how to apply "what I know" to situations that don't fit "what I already know." There is a general learning problem which may have to do with a combination of crystalline intelligence (which is based on experience) and fluid intelligence (which is a set of rules that help you apply crystalline intelligence in unfamiliar contexts). I am a big fan of what I call "artificial artificial intelligence." I don't really care if it's "true" AI -- what I want is something that behaves intelligently, which in this case means that it "knows" when it "doesn't know what it doesn't know" and organizes things the best it can so that a person can make the decision.

Michael:
I was originally thinking about relationships between content items only, but you could do it with relationships to categories or keywords as well. How much would you have to change in the content repository data model in order to do this?

I have no clue, which is why I hope that someone with a deeper technical understanding of the OpenACS data model will jump in here and elucidate the magnitude of effort involved in getting something like this started. I know that this is something I want to do for my project, I just want to make entirely sure that I am not doing something that won't benefit the community at large.

to be clear about exactly what kind of change we're talking about here, what we want to be able to do is to allow users to specify several kinds of semantic relationships:

  • Between a content item and a category, e.g., document x [content item] is a budget for [relationship] project y [category]

  • Between two content items, e.g., inventory item x [content item] is an accessory for [relationship] inventory item y [content item]

  • Between two categories, e.g., customers with characteristic x [category] are likely purchasers of [relationship] product type y [category].

You could make it so that these relationship definitions are optional, i.e., relationships are assumed to be parent/child relationships unless specified. I believe that this change would make a big difference in terms of the value of OpenCyc and that you could develop all kinds of KM services for it that would be useful independent of OpenCyc. We'd also have to develop an interface to let admins define the list of possible semantic relationships and to make use of them within specific apps, but that would come second.

So, could anyone who is familiar with the workings of the content repository say how hard it would be to do this?

OpenCyc 0.6 has been released. It's not really clear to me just
how useful this would be in the context of OpenACS, but any of
the shops who are interested in actively pursuing the knowledge
management market might consider at least looking it over.

Code is available here:

http://sourceforge.net/project/showfiles.php?group_id=27274

Documentation is available here:

http://www.opencyc.org/doc