<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ConceptNet blog</title><link>http://blog.conceptnet.io/</link><description>Helping machines think like humans</description><atom:link href="http://blog.conceptnet.io/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2021 &lt;a href="mailto:rspeer@luminoso.com"&gt;Robyn Speer&lt;/a&gt; </copyright><lastBuildDate>Fri, 16 Apr 2021 16:30:34 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>The Future</title><link>http://blog.conceptnet.io/posts/2021/future/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;Today is my last day at Luminoso, and I won't be able to update this copy of the site anymore. But ConceptNet will continue.&lt;/p&gt;
&lt;p&gt;For future posts and updates, please head over to &lt;a href="http://concepts.arborelia.net"&gt;concepts.arborelia.net&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description><category>ConceptNet</category><guid>http://blog.conceptnet.io/posts/2021/future/</guid><pubDate>Fri, 16 Apr 2021 04:00:00 GMT</pubDate></item><item><title>ConceptNet 5.8</title><link>http://blog.conceptnet.io/posts/2020/conceptnet-58/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;ConceptNet 5.8 has been released!&lt;/p&gt;
&lt;p&gt;In this release, we're focused on improving the maintainability of ConceptNet,
with a few small but significant changes to the data. Here's an overview of
what's changed.&lt;/p&gt;
&lt;h3&gt;HTTPS support&lt;/h3&gt;
&lt;p&gt;You can now reach ConceptNet's web site and API over HTTPS. There's nothing
about ConceptNet that particularly requires encryption, but the security of the
Web as a whole would be better if every site could be reached through HTTPS,
and we're happy to go along with that.&lt;/p&gt;
&lt;p&gt;One immediate benefit is that an HTTPS web page can safely make requests to
ConceptNet's API.&lt;/p&gt;
&lt;h3&gt;Continuous deployment&lt;/h3&gt;
&lt;p&gt;We now have ConceptNet set up with continuous integration using Jenkins and
deployment using AWS Terraform. This should make new versions and fixes much
easier to deploy, without a long list of things that must be done manually.&lt;/p&gt;
&lt;p&gt;This should also allow us, soon, to update the instructions on how to run one's
own copy of the ConceptNet API without so much manual effort.&lt;/p&gt;
&lt;h3&gt;Distinguishing Indonesian (&lt;code&gt;id&lt;/code&gt;) and Malay (&lt;code&gt;ms&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;The use of the language code &lt;code&gt;ms&lt;/code&gt; in earlier releases of ConceptNet 5 reflects
our uncertainty about the scope of the &lt;code&gt;ms&lt;/code&gt; language code. Some sources said it
was a "macrolanguage" code for all Malay languages including Indonesian, so we
implemented it similarly to the macrolanguage &lt;code&gt;zh&lt;/code&gt; for Chinese languages.
Thus, we formerly used &lt;code&gt;ms&lt;/code&gt; to include both Indonesian (&lt;em&gt;bahasa Indonesia&lt;/em&gt;) and
the specific Malay language (&lt;em&gt;bahasa Melayu&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;This led to confusion of words that have different meanings or connotations in
the two languages, and the appearance that Indonesian was missing from the
language list. In retrospect, it's better and more expected to represent the
Indonesian language with its own language code, &lt;code&gt;id&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So in version 5.8, we have separate support for Indonesian (&lt;code&gt;id&lt;/code&gt;) and Malay
(&lt;code&gt;ms&lt;/code&gt;). This is the largest data change in ConceptNet 5.8. Fortunately, our
largest sources of data for these languages (Open Multilingual WordNet and
Wiktionary) have similar coverage of both languages.&lt;/p&gt;
&lt;h3&gt;Updated French and German Wiktionary&lt;/h3&gt;
&lt;p&gt;Building ConceptNet involves a step that extracts knowledge from Wiktionary
using our custom MediaWiki parser, &lt;a href="https://github.com/LuminosoInsight/wikiparsec"&gt;wikiparsec&lt;/a&gt;. Wiktionary is a
crowd-sourced dictionary that is developed separately in many languages -- that
is, the language that the &lt;em&gt;definitions&lt;/em&gt; are in. Each of these languages of
Wiktionary also &lt;em&gt;defines&lt;/em&gt; words in hundreds of languages.&lt;/p&gt;
&lt;p&gt;The practices around formatting Wiktionary entries change from time to time, so
a parser for the English Wiktionary of 2019 won't necessarily parse the English
Wiktionary of 2020.&lt;/p&gt;
&lt;p&gt;In fact, it doesn't. The above is a problem we've run into. We can't update the
English Wiktionary entries until we account for some entirely new formatting
that arose in the last year. But we can update the other Wiktionaries we parse,
French and German, from the 2016 version to the 2020 version. That's what we've
done in this update, acquiring four years of fixes, new details, and new words.&lt;/p&gt;
&lt;h3&gt;Curation of data sources&lt;/h3&gt;
&lt;p&gt;There's some crowdsourced data that shouldn't appear in ConceptNet, and in 5.8
we're doing more to filter it.&lt;/p&gt;
&lt;p&gt;Previously, we've used some heuristics to filter bad answers that came from the
game Verbosity, and a few particularly unhelpful contributors and topic areas
in Open Mind Common Sense.&lt;/p&gt;
&lt;p&gt;Recently, we and others have noticed some offensive word associations in
ConceptNet that came from Wiktionary. The issue is that they came from
definitions that are appropriate to find &lt;em&gt;in a dictionary&lt;/em&gt;, but not elsewhere.
A semantic network isn't a dictionary, and one important difference is that the
edges in ConceptNet appear with no context.&lt;/p&gt;
&lt;p&gt;A dictionary can say "X is an offensive term that means Y, and here's where it
came from". It could even have usage notes on why not to say it. That's all
part of a dictionary's job, defining words no matter what they mean, so you can
find out what they mean if you don't know.&lt;/p&gt;
&lt;p&gt;In ConceptNet, such an entry ends up as an edge between X and Y, which is the
same as an edge between Y and X. So, unfortunately, looking up an ordinary word
in ConceptNet could produce a list of hateful synonyms, and these word
associations would also be learned by semantic models such as ConceptNet
Numberbatch.&lt;/p&gt;
&lt;p&gt;These links aren't worth including in ConceptNet. Fortunately, in many cases,
we can use the structure of Wiktionary to help tell us which edges to &lt;em&gt;not&lt;/em&gt;
include.&lt;/p&gt;
&lt;p&gt;An update to our Wiktionary parser detects definitions that are labeled on
Wiktionary as "offensive" or "slur" or similar labels, and produces metadata
that the build process can use to exclude that definition. With an expansion of
the "blocklist", the file that we use to manually exclude edges, we can also
cover cases that aren't consistently labeled in Wiktionary.&lt;/p&gt;
&lt;p&gt;The filtering doesn't just have to be about offensive terms: we also use the
same mechanism to filter definitions that Wiktionary calls archaic and
obsolete, definitions that would not help understand the modern usage of a
word, without affecting other senses of the word.&lt;/p&gt;
&lt;p&gt;While I looked through a lot of unfortunate words to check that the filtering
had done the right thing, I know I didn't look at everything, and also I can
only really do this in English. If you see ConceptNet edges that should be
filtered out, feel free to &lt;a href="mailto:rspeer@luminoso.com"&gt;let me know in an
e-mail&lt;/a&gt;. With continuous integration, I should even
be able to fix it in a timely manner.&lt;/p&gt;
&lt;p&gt;This filtering caused no significant change in our semantic benchmarks. As they
say, "nothing of value was lost".&lt;/p&gt;
&lt;h3&gt;Cleaning up ExternalURLs&lt;/h3&gt;
&lt;p&gt;It was during the life of ConceptNet 5.7 that I learned that people &lt;em&gt;actually
do&lt;/em&gt; use &lt;code&gt;ExternalURL&lt;/code&gt; edges to connect ConceptNet to other Linked Open Data
resources. And one user pointed out to me how the presentation of them was...
neglected.&lt;/p&gt;
&lt;p&gt;If you're browsing &lt;a href="http://conceptnet.io"&gt;ConceptNet's web interface&lt;/a&gt;, the external links
used to appear as one of the relation types, which led to them being crammed
into a format that didn't really work for them, and also put them in an
arbitrary place on the page depending on how many of them there were. Now, the
external links appear in a differently-formatted section at the bottom.&lt;/p&gt;
&lt;p&gt;We also now filter the ExternalURLs to only include terms that exist in
ConceptNet, instead of having isolated terms that only appear in an
ExternalURL.&lt;/p&gt;&lt;/div&gt;</description><category>ConceptNet</category><category>Releases</category><guid>http://blog.conceptnet.io/posts/2020/conceptnet-58/</guid><pubDate>Wed, 20 May 2020 17:20:00 GMT</pubDate></item><item><title>ConceptNet Numberbatch 19.08</title><link>http://blog.conceptnet.io/posts/2019/conceptnet-numberbatch-19-08/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;img src="http://blog.conceptnet.io/2019/08/numberbatch-logo.png" alt="ConceptNet Numberbatch logo, featuring an otter"&gt;&lt;/p&gt;
&lt;p&gt;It's been a while since we made a release of ConceptNet Numberbatch. Here, &lt;a href="https://github.com/commonsense/conceptnet-numberbatch"&gt;have some
new word embeddings&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/commonsense/conceptnet-numberbatch"&gt;ConceptNet Numberbatch&lt;/a&gt; is our whimsical double-dactyl name for
pre-computed word embeddings built using ConceptNet and distributional
semantics.  The things we've been doing with it at
&lt;a href="http://luminoso.com"&gt;Luminoso&lt;/a&gt; have benefited from some improvements we've
made in the last two years.&lt;/p&gt;
&lt;p&gt;The last release we announced was in 2017. Since then, we made a few
improvements for SemEval 2018, when we demonstrated how to &lt;a href="http://blog.conceptnet.io/posts/2018/distinguishing-attributes-using-conceptnet/"&gt;distinguish
attributes using ConceptNet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But meanwhile, outside of Luminoso, we've also seen some great things being built with what
we released:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Alex Lew's &lt;a href="http://robotmindmeld.com/"&gt;Robot Mind Meld&lt;/a&gt; uses ConceptNet Numberbatch to play a cooperative improv
  game.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tsun-Hsien Tang and others showed how Numberbatch can be combined with image recognition
  to better &lt;a href="http://ceur-ws.org/Vol-2125/paper_124.pdf"&gt;retrieve images of daily life&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sophie Siebert and Frieder Stolzenburg developed
  &lt;a href="http://corg.hs-harz.de/"&gt;CoRg&lt;/a&gt;, a reasoning / story understanding system
  that combines Numberbatch word embeddings with theorem proving, a combination
  I wouldn't have expected to see at all.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I hope we can see more projects like this by releasing our improvements to Numberbatch.&lt;/p&gt;
&lt;h3&gt;Expanding the vocabulary&lt;/h3&gt;
&lt;p&gt;We added a step to the build process of ConceptNet Numberbatch called
"propagation".  This makes it easier to use Numberbatch to represent a larger
vocabulary of words, especially in languages with more inflections than
English.&lt;/p&gt;
&lt;p&gt;Previously, there were a lot of terms that we didn't have vectors for,
especially word forms that aren't the most commonly-observed form. We had to
rely on the out-of-vocabulary (OOV) strategy to handle these words, by looking
up their neighboring terms in ConceptNet that did have vectors. This strategy
was hard to implement, because it required having access to the ConceptNet
graph at all times.&lt;/p&gt;
&lt;p&gt;I know that many projects that attempted to use Numberbatch simply skipped the
OOV strategy, so any word that wasn't directly in the vocabulary just couldn't
be represented, and this led to suboptimal results.&lt;/p&gt;
&lt;p&gt;With the "propagation" step, we pre-compute the vectors for more words,
especially forms of known words.&lt;/p&gt;
&lt;p&gt;This increases the vocabulary size and the space required to use Numberbatch,
but leaves us with a simple, fast OOV strategy that doesn't need to refer to
the whole ConceptNet graph. And it should improve the results greatly for users
of Numberbatch who aren't using an OOV strategy at all.&lt;/p&gt;
&lt;h3&gt;New results on fairness&lt;/h3&gt;
&lt;p&gt;Word embeddings are a useful tool for a lot of NLP tasks, but by now we've seen
lots of evidence of a risk they carry: when they capture word meanings from the
ways we use words, they also capture harmful biases and stereotypes.  A clear,
up-to-date paper on this is &lt;a href="https://arxiv.org/pdf/1812.08769.pdf"&gt;"What are the biases in my word
embedding?"&lt;/a&gt;, by Nathaniel Swinger et al.&lt;/p&gt;
&lt;p&gt;It's important to do what we can to mitigate that. Machine learning involves
lots of ethical issues, and we can't solve them all while not knowing how
you're even going to use our word embeddings, but we can at least try not to
publish something that makes the ethical problems worse. So one of the steps in
building ConceptNet Numberbatch is &lt;em&gt;algorithmic de-biasing&lt;/em&gt; that tries to
identify and mitigate these biases.&lt;/p&gt;
&lt;p&gt;(If you want to point out that algorithmic de-biasing is insufficient to solve
the problem, you are very right, but that doesn't mean we shouldn't do it.)&lt;/p&gt;
&lt;p&gt;Chris Sweeney and Maryam Najafian published &lt;a href="https://www.aclweb.org/anthology/P19-1162"&gt;a new framework for assessing
fairness in word embeddings&lt;/a&gt;. Their
framework doesn't assume that biases are necessarily binary (men vs. women,
white vs. black) or can be seen in a linear projection of the embeddings, as
previous metrics did. This assessment comes out looking pretty good for
Numberbatch, which associates nationalities and religions with sentiment words
more equitably than other embeddings.&lt;/p&gt;
&lt;p&gt;Please note that you can't be assured that your AI project is ethical just
because it has one fairer-than-usual component in it. We have not solved AI
ethics. You still need to test for harmful effects in the outputs of your
actual system, as well as making sure that its inputs are collected ethically.&lt;/p&gt;
&lt;h3&gt;Links&lt;/h3&gt;
&lt;p&gt;You can find download links and documentation for the new version on the
&lt;a href="https://github.com/commonsense/conceptnet-numberbatch"&gt;conceptnet-numberbatch GitHub page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Python code that builds the embeddings is in &lt;code&gt;conceptnet5.vectors&lt;/code&gt;, part of
the &lt;a href="https://github.com/commonsense/conceptnet5"&gt;conceptnet5 repository&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description><category>ConceptNet</category><category>NLP fairness</category><category>Releases</category><category>Word embeddings</category><guid>http://blog.conceptnet.io/posts/2019/conceptnet-numberbatch-19-08/</guid><pubDate>Thu, 01 Aug 2019 19:22:35 GMT</pubDate></item><item><title>ConceptNet 5.7 released</title><link>http://blog.conceptnet.io/posts/2019/conceptnet-57-released/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;ConceptNet 5.7 has been released! Here's a tour of some of the things that are new.&lt;/p&gt;
&lt;h3&gt;New Japanese knowledge&lt;/h3&gt;
&lt;p&gt;The work of Naoki Otani, Hirokazu Kiyomaru, Daisuke Kawahara, and Sadao Kurohashi
has expanded and improved ConceptNet's crowdsourced knowledge in Japanese.&lt;/p&gt;
&lt;p&gt;This group, from Carnegie Mellon and Kyoto University with support from Yahoo!
Japan, combined translation and crowdsourcing to collect 18,747 new facts in
Japanese, covering common-sense relations that are hard to collect data for,
such as &lt;code&gt;/r/AtLocation&lt;/code&gt; and &lt;code&gt;/r/UsedFor&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can read the details in their COLING paper, "&lt;a href="https://www.aclweb.org/anthology/C18-1128"&gt;Cross-lingual Knowledge
Projection Using Machine Translation and Target-side Knowledge Base
Completion&lt;/a&gt;".&lt;/p&gt;
&lt;h3&gt;Word senses&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://blog.conceptnet.io/2019/04/word-senses.png" alt="Different senses of the word 'sense' in ConceptNet."&gt;&lt;/p&gt;
&lt;p&gt;Sometimes multiple different meanings happen to be represented by words that are
spelled the same -- that is, different &lt;em&gt;senses&lt;/em&gt; of a word.
ConceptNet has vaguely supported word senses for a while, and now we're making
more of an effort to actually support them.&lt;/p&gt;
&lt;p&gt;In earlier versions, we only distinguished word senses by their part of speech:
for example, the noun "sense" might be at the ConceptNet URI &lt;code&gt;/c/en/sense/n&lt;/code&gt;.
Now we can provide more details about word senses when we have them, such as
&lt;code&gt;/c/en/sense/n/wn/communication&lt;/code&gt;, representing a noun sense of "sense" that's
in the WordNet topic area of "communication".&lt;/p&gt;
&lt;p&gt;Of course, a lot of ConceptNet's data comes from natural language text, where
distinguishing word senses is a well-known difficult problem. A lot of the data
is still made of ambiguous words. But when we take input from sources that do
have distinguishable word senses, we include information about the word senses
in the concept URI and in its display on the &lt;a href="http://conceptnet.io"&gt;browseable ConceptNet
site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Specific word senses always appear in a namespace, letting us know who's defining
that word sense, such as WordNet, Wiktionary, or Wikipedia.&lt;/p&gt;
&lt;p&gt;Why the different namespaces? Why not have one vocabulary of word senses?
Well, I've never seen a widely-accepted vocabulary of word senses. Every data
source and every word-sense-disambiguation project has its own word senses, and
there's not even agreement on what it takes to say that two word senses are
different.&lt;/p&gt;
&lt;p&gt;Some word senses in different namespaces probably ought to be the same sense.
But with different sources distinguishing word senses in different ways, and no
clear way to align them, the best we can do is to distinguish what we can from
each data source, and accept that some of them should be overlapping.&lt;/p&gt;
&lt;h3&gt;The new database&lt;/h3&gt;
&lt;p&gt;ConceptNet 5.7 is powered by PostgreSQL 10, and between the browseable site and
the API, it is queried over 250,000 times per day.&lt;/p&gt;
&lt;p&gt;Previously, we had to write carefully-tuned SQL queries so that the server
could quickly respond to all the kinds of intersecting queries that the
ConceptNet API allows, such as &lt;a href="http://api.conceptnet.io/query?node=/c/ja&amp;amp;other=/c/ja&amp;amp;rel=/r/HasA"&gt;all HasA edges between two nodes in
Japanese&lt;/a&gt;. Some combinations were previously not supported at
all, such as &lt;a href="http://api.conceptnet.io/query?source=/s/contributor/omcs&amp;amp;node=/c/es/hablar"&gt;all statements collected by Open Mind Common Sense about the
Spanish word &lt;em&gt;hablar&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some of the queries were hard to tune. There was some downtime on ConceptNet 5.6
as users started making more difficult queries and the database failed to keep up.
The corners we cut to make the queries efficient enough showed up as strange artifacts,
such as queries where &lt;a href="https://github.com/commonsense/conceptnet5/issues/200"&gt;most of the results would start with "a" or "b"&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With our new database structure, we no longer have to anticipate and tune every
kind of query.  ConceptNet queries are now converted into &lt;a href="https://www.postgresql.org/docs/10/datatype-json.html"&gt;JSONB
queries&lt;/a&gt;, which PostgreSQL 10 knows how to optimize with a new kind of
index. This gives us an efficient way to do every kind of ConceptNet query,
using the work of people who are much better than us at optimizing databases.&lt;/p&gt;
&lt;h3&gt;ConceptNet is part of cutting-edge NLP&lt;/h3&gt;
&lt;p&gt;Those are the major updates we've made to ConceptNet, so I'd like to wrap up by
discussing why it's important that we continue to maintain and improve
ConceptNet. It continues to play a valuable role in understanding what people
mean by the words they use.&lt;/p&gt;
&lt;p&gt;In this area where it seems that machine learning can learn anything from
enough data, it turns out that computers still do gain more common-sense
understanding from ConceptNet. In the &lt;a href="https://www.aclweb.org/anthology/S18-1119"&gt;story understanding task at SemEval
2018&lt;/a&gt;, the best and fourth-best system both took input from
ConceptNet. We previously wrote about how our ConceptNet-based system was the
second-best at another SemEval task, on &lt;a href="http://blog.conceptnet.io/posts/2018/distinguishing-attributes-using-conceptnet/"&gt;recognizing differences in
attributes&lt;/a&gt;. In November 2018, the new &lt;a href="https://arxiv.org/pdf/1811.00625.pdf"&gt;state-of-the-art in the
Story Cloze Test&lt;/a&gt; was set by Jiaao Chen et al. using ConceptNet,
outperforming major systems such as GPT.&lt;/p&gt;
&lt;p&gt;If you're using ConceptNet in natural language processing, you should consider
applying to the &lt;a href="https://coinnlp.github.io/"&gt;Common Sense In NLP workshop&lt;/a&gt; that I'm co-organizing at
EMNLP 2019.&lt;/p&gt;&lt;/div&gt;</description><category>ConceptNet</category><category>Releases</category><guid>http://blog.conceptnet.io/posts/2019/conceptnet-57-released/</guid><pubDate>Tue, 30 Apr 2019 17:02:00 GMT</pubDate></item><item><title>Tutorial: Distinguishing attributes using ConceptNet</title><link>http://blog.conceptnet.io/posts/2018/distinguishing-attributes-using-conceptnet/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;In &lt;a href="http://blog.conceptnet.io/posts/2018/conceptnet-at-semeval-2018/"&gt;a previous post&lt;/a&gt;,
we mentioned the good results that systems built using ConceptNet got at SemEval this year.
One of those systems was our own entry to the "Capturing Discriminative Attributes" task,
about determining differences in meanings between words.&lt;/p&gt;
&lt;p&gt;The system we submitted got second place, by combining information from ConceptNet, WordNet,
Wikipedia, and Google Books. That system has some messy dependencies and fiddly details, so
in this tutorial, we're going to build a much simpler version of the system that also performs
well.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Distinguishing-attributes-the-simple-way"&gt;Distinguishing attributes the simple way&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/distinguishing-attributes-using-conceptnet/#Distinguishing-attributes-the-simple-way"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Our poster, a prettier version of &lt;a href="http://aclweb.org/anthology/S18-1162"&gt;our SemEval paper&lt;/a&gt;, mainly presents the full version of the system, the one that uses five different methods of distinguishing attributes and combines them all in an SVM classifier. But here, I particularly want you to take note of the "ConceptNet is all you need" section, describing a simpler version we discovered while evaluating what made the full system work.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.conceptnet.io/2018/06/naacl2018-poster.pdf"&gt;&lt;img src="https://blog.conceptnet.io/2018/06/naacl2018-poster.png" alt="A rendering of our SemEval 2018 poster. The link leads to a PDF version."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It seems that, instead of using five kinds of features, we may have been able to do just as well using just the pre-trained embeddings we call &lt;a href="https://github.com/commonsense/conceptnet-numberbatch"&gt;ConceptNet Numberbatch&lt;/a&gt;. So we'll build that system here, using the ConceptNet Numberbatch data and a small amount of code, with only common dependencies (pandas and sklearn).&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [1]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;sklearn.metrics&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;f1_score&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;I want you to be able to reproduce this result, so I've put the SemEval data files, along with the exact version of ConceptNet Numberbatch we were using, in a zip file on my favorite scientific data hosting service, Zenodo.&lt;/p&gt;
&lt;p&gt;These shell commands should serve the purpose of downloading and extracting that data, if the &lt;code&gt;wget&lt;/code&gt; and &lt;code&gt;unzip&lt;/code&gt; commands are available on your system.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [2]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;wget https://zenodo.org/record/1289942/files/conceptnet-distinguishing-attributes-data.zip
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;--2018-06-15 10:47:28--  https://zenodo.org/record/1289942/files/conceptnet-distinguishing-attributes-data.zip
Resolving zenodo.org (zenodo.org)... 137.138.76.77
Connecting to zenodo.org (zenodo.org)|137.138.76.77|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2457101853 (2.3G) [application/octet-stream]
Saving to: ‘conceptnet-distinguishing-attributes-data.zip’

conceptnet-distingu 100%[===================&amp;gt;]   2.29G  2.88MB/s    in 10m 9s  

2018-06-15 10:57:38 (3.85 MB/s) - ‘conceptnet-distinguishing-attributes-data.zip’ saved [2457101853/2457101853]

&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [8]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;unzip conceptnet-distinguishing-attributes-data.zip
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;Archive:  conceptnet-distinguishing-attributes-data.zip
  inflating: numberbatch-20180108-biased.h5  
  inflating: discriminatt-test.txt   
  inflating: discriminatt-train.txt  
  inflating: discriminatt-validation.txt  
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;In our actual solution, we imported some utilities from the &lt;a href="https://github.com/commonsense/conceptnet5"&gt;ConceptNet5 codebase&lt;/a&gt;. In this simplified version, we'll re-define the utilities that we need.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [9]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;text_to_uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    An extremely cut-down version of ConceptNet's `standardized_concept_uri`.&lt;/span&gt;
&lt;span class="sd"&gt;    Converts a term such as "apple" into its ConceptNet URI, "/c/en/apple".&lt;/span&gt;
&lt;span class="sd"&gt;    &lt;/span&gt;
&lt;span class="sd"&gt;    Only works for single English words, with no punctuation besides hyphens.&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;'/c/en/'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'-'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'_'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;normalize_vec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vec&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    Normalize a vector to a unit vector, so that dot products are cosine&lt;/span&gt;
&lt;span class="sd"&gt;    similarities.&lt;/span&gt;
&lt;span class="sd"&gt;    &lt;/span&gt;
&lt;span class="sd"&gt;    If it's the zero vector, leave it as is, so all its cosine similarities&lt;/span&gt;
&lt;span class="sd"&gt;    will be zero.&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;norm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;norm&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;vec&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;vec&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;norm&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;We would need a lot more support from the ConceptNet code if we wanted to apply ConceptNet's strategy for out-of-vocabulary words. Fortunately, the words in this task are quite common. Our out-of-vocabulary strategy can be to return the zero vector.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [10]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AttributeHeuristic&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="fm"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hdf5_filename&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;        Load a word embedding matrix that is the 'mat' member of an HDF5 file,&lt;/span&gt;
&lt;span class="sd"&gt;        with UTF-8 labels for its rows.&lt;/span&gt;
&lt;span class="sd"&gt;        &lt;/span&gt;
&lt;span class="sd"&gt;        (This is the format that ConceptNet Numberbatch word embeddings use.)&lt;/span&gt;
&lt;span class="sd"&gt;        """&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_hdf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hdf5_filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'mat'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'utf-8'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;        Look up the vector for a term, returning it normalized to a unit vector.&lt;/span&gt;
&lt;span class="sd"&gt;        If the term is out-of-vocabulary, return a zero vector.&lt;/span&gt;
&lt;span class="sd"&gt;        &lt;/span&gt;
&lt;span class="sd"&gt;        Because many terms appear repeatedly in the data, cache the result.&lt;/span&gt;
&lt;span class="sd"&gt;        """&lt;/span&gt;
        &lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text_to_uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;vec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;normalize_vec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
            &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;KeyError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;vec&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Series&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vec&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;vec&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;        Get the cosine similarity between the embeddings of two terms.&lt;/span&gt;
&lt;span class="sd"&gt;        """&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;compare_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;        Our heuristic for whether an attribute applies more to term1 than&lt;/span&gt;
&lt;span class="sd"&gt;        to term2: find the cosine similarity of each term with the&lt;/span&gt;
&lt;span class="sd"&gt;        attribute, and take the difference of the square roots of those&lt;/span&gt;
&lt;span class="sd"&gt;        similarities.&lt;/span&gt;
&lt;span class="sd"&gt;        """&lt;/span&gt;
        &lt;span class="n"&gt;match1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;
        &lt;span class="n"&gt;match2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;match1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;match2&lt;/span&gt;
    
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;        Convert the attribute heuristic into a yes-or-no decision, by testing&lt;/span&gt;
&lt;span class="sd"&gt;        whether the difference is larger than a given threshold.&lt;/span&gt;
&lt;span class="sd"&gt;        """&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compare_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;semeval_filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;        Evaluate the heuristic on a file containing instances of this form:&lt;/span&gt;
&lt;span class="sd"&gt;        &lt;/span&gt;
&lt;span class="sd"&gt;            banjo,harmonica,stations,0&lt;/span&gt;
&lt;span class="sd"&gt;            mushroom,onions,stem,1&lt;/span&gt;
&lt;span class="sd"&gt;            &lt;/span&gt;
&lt;span class="sd"&gt;        Return the macro-averaged F1 score. (As in the task, we use macro-&lt;/span&gt;
&lt;span class="sd"&gt;        averaged F1 instead of raw accuracy, to avoid being misled by&lt;/span&gt;
&lt;span class="sd"&gt;        imbalanced classes.)&lt;/span&gt;
&lt;span class="sd"&gt;        """&lt;/span&gt;
        &lt;span class="n"&gt;our_answers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="n"&gt;real_answers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;semeval_filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'utf-8'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;strval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;line&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rstrip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;','&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;discriminative&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strval&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;real_answers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;discriminative&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;our_answers&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;classify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;term1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;term2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attribute&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;f1_score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;real_answers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;our_answers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;average&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'macro'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;When we ran this solution, our latest set of word embeddings calculated from ConceptNet was 'numberbatch-20180108-biased'. This name indicates that it was built on January 8, 2018, and acknowledges that we haven't run it through the &lt;a href="http://blog.conceptnet.io/posts/2017/conceptnet-numberbatch-17-04-better-less-stereotyped-word-vectors/"&gt;de-biasing&lt;/a&gt; process, which we consider important when deploying a machine learning system.&lt;/p&gt;
&lt;p&gt;Here, we didn't want to complicate things by adding the de-biasing step. But keep in mind that this heuristic would probably have some unfortunate trends if it were asked to distinguish attributes of people's name, gender, or ethnicity.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [11]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AttributeHeuristic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'numberbatch-20180108-biased.h5'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;The classifier has one parameter that can vary, which is the "threshold": the minimum difference between cosine similarities that will count as a discriminative attribute. When we ran the training code &lt;a href="https://github.com/LuminosoInsight/semeval-discriminatt"&gt;for our full SemEval entry&lt;/a&gt; on this one feature, we got a classifier that's equivalent to a threshold of 0.096. Let's simplify that by rounding it off to 0.1.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [13]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'discriminatt-train.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[13]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0.6620320353802582&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;When we were creating this code, we didn't have access to the test set -- this is pretty much the point of SemEval. We could compare results on the validation set, which is how we decided to use a combination of five features, where the feature you see here is only one of them. It's also how we found that taking the square root of the cosine similarities was helpful.&lt;/p&gt;
&lt;p&gt;When we're just revisiting a simplified version of the classifier, there isn't much that we need to do with the validation set, but let's take a look at how it does anyway.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [14]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'discriminatt-validation.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[14]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0.693873461779053&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;But what's really interesting about this simple heuristic is how it performs on the previously held-out test set.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [15]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'discriminatt-test.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[15]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0.7358997147499388&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;It's pretty remarkable to see a test accuracy that's so much higher than the training accuracy! It should actually make you suspicious that this classifier is somehow tuned to the test data.&lt;/p&gt;
&lt;p&gt;But that's why it's nice to have a result we can compare to that followed the SemEval process. Our actual SemEval entry got the same accuracy, 73.6%, and showed that we could attain that number without having any access to the test data.&lt;/p&gt;
&lt;p&gt;Many entries to this task performed better on the test data than on the validation data. It seems that the test set is cleaner overall than the validation set, which in turn is cleaner than the training set. Simple classifiers that generalize well had the chance to do much better on the test set. Classifiers which had the ability to focus too much on the specific details of the training set, some of which are erroneous, performed worse.&lt;/p&gt;
&lt;p&gt;But you could still question whether the simplified system that we came up with after the fact can actually be compared to the system we submitted, which will leads me on a digression about "lucky systems" at the end of this post.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Examples"&gt;Examples&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/distinguishing-attributes-using-conceptnet/#Examples"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Let's see how this heuristic does on some examples of these "discriminative attribute" questions.&lt;/p&gt;
&lt;p&gt;When we look at &lt;code&gt;heuristic.compare_attributes(a, b, c)&lt;/code&gt;, we're asking if &lt;em&gt;a&lt;/em&gt; is more associated with &lt;em&gt;c&lt;/em&gt; than &lt;em&gt;b&lt;/em&gt; is. The heuristic returns a number. By our evaluation above, we consider the attribute to be discriminative if the number is 0.1 or greater.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Let's start with an easy one: Most windows are made of glass, and most doors aren't.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [17]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compare_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'window'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'door'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'glass'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[17]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0.16762984210407628&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;From the examples in the code above: mushrooms have stems, while onions don't.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [35]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compare_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'mushroom'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'onions'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'stem'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[35]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0.11308354447365421&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;This one comes straight from the task description: cappuccino contains milk, while americano doesn't. Unfortunately, our heuristic is not confident about the distinction, and returns a value less than 0.1. It would fail this example in the evaluation.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [37]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compare_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'cappuccino'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'americano'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'milk'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[37]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0.06309686358452515&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;An example of a non-discriminative attribute: trains and subways both involve rails. Our heuristic barely gets this right, but only due to lack of confidence.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [38]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compare_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'train'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'subway'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'rails'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[38]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;0.08336122961828196&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;This was not required for the task, but the heuristic can also tell us when an attribute is discriminative in the opposite direction. Water is much more associated with soup than it is with fingers. It is a discriminative attribute that distinguishes &lt;em&gt;soup&lt;/em&gt; from &lt;em&gt;finger&lt;/em&gt;, not &lt;em&gt;finger&lt;/em&gt; from &lt;em&gt;soup&lt;/em&gt;. The heuristic gives us back a negative number indicating this.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [39]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;heuristic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compare_attributes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'finger'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'soup'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'water'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[39]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;-0.2778968364707769&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Lucky-systems"&gt;Lucky systems&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/distinguishing-attributes-using-conceptnet/#Lucky-systems"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;As a kid, I used to hold marble racing tournaments in my room, rolling marbles simultaneously down plastic towers of tracks and funnels. I went so far as to set up a bracket of 64 marbles to find the fastest marble. I kind of thought that running marble tournaments was peculiar to me and my childhood, but now I've found out that marble racing videos on YouTube are a big thing! Some of them even have &lt;a href="https://www.youtube.com/watch?v=7oZKioNQq-k"&gt;overlays as if they're major sporting events&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the end, there's nothing special about the fastest marble compared to most other marbles. It's just lucky. If one ran the tournament again, the marble champion might lose in the first round. But the one thing you could conclude about the fastest marble is that it was no &lt;em&gt;worse&lt;/em&gt; than the other marbles. A bad marble (say, a misshapen one, or a plastic bead) would never luck out enough to win.&lt;/p&gt;
&lt;p&gt;In our paper, we tested 30 alternate versions of the classifier, including the one that was roughly equivalent to this very simple system. We were impressed by the fact that it performed as well as our real entry. And this could be because of the inherent power of ConceptNet Numberbatch, or it could be because it's the lucky marble.&lt;/p&gt;
&lt;p&gt;I tried it with other thresholds besides 0.1, and some of the nearby reasonable threshold values only score 71% or 72%. But that still tells you that this interestingly simple system is doing the right thing and is capable of getting a very good result. It's good enough to be the lucky marble, so it's good enough for this tutorial.&lt;/p&gt;
&lt;p&gt;Incidentally, the same argument about "lucky systems" applies to SemEval entries themselves. There are dozens of entries from different teams, and the top-scoring entry is going to be an entry that did the right thing and also got lucky.&lt;/p&gt;
&lt;p&gt;In the post-SemEval discussion at ACL, someone proposed that all results should be Bayesian probability distributions, estimated by evaluating systems on various subsets of the test data, and instead of declaring a single winner or a tie, we should get probabilistic beliefs as results: "There is an 80% chance that entry A is the best solution to the task, an 18% chance that entry B is the best solution..."&lt;/p&gt;
&lt;p&gt;I find this argument entirely reasonable, and probably unlikely to catch on in a world where we haven't even managed to replace the use of &lt;em&gt;p&lt;/em&gt;-values.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [ ]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;/div&gt;</description><category>ConceptNet</category><category>Numberbatch</category><category>Tutorials</category><guid>http://blog.conceptnet.io/posts/2018/distinguishing-attributes-using-conceptnet/</guid><pubDate>Fri, 28 Sep 2018 19:00:00 GMT</pubDate></item><item><title>ConceptNet's strong performance at SemEval 2018</title><link>http://blog.conceptnet.io/posts/2018/conceptnet-at-semeval-2018/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;At the beginning of June, we went to the NAACL conference and the SemEval workshop.
SemEval is a yearly event where NLP systems are compared head-to-head on semantic
tasks, and how they perform on unseen test data.&lt;/p&gt;
&lt;p&gt;I like to submit to SemEval because I see it as the NLP equivalent of
pre-registered studies. You know the results are real; they're not
cherry-picked positive results, and they're not repeatedly tuned to the same
test set. SemEval provides valuable evidence about which semantic techniques
actually work well on new data.&lt;/p&gt;
&lt;p&gt;Recently, SemEval has been a compelling demonstration of why ConceptNet is
important in semantics. The results of multiple tasks have shown the advantage
of using a knowledge graph, particularly ConceptNet, and not assuming that
a distributional representation such as word2vec will learn everything there
is to learn.&lt;/p&gt;
&lt;p&gt;Last year we got the top score (by a wide margin) in the SemEval task that we
entered using ConceptNet Numberbatch (pre-trained word vectors built from
ConceptNet). I was wondering if we had really made an impression with this
result, or if the field was going to write it off as a fluke and go on as it
was.&lt;/p&gt;
&lt;p&gt;We made an impression! This year at SemEval, there were many systems using
ConceptNet, not just ours. Let's look at the two tasks where ConceptNet made
an appearance.&lt;/p&gt;
&lt;h3&gt;Story understanding&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.aclweb.org/anthology/S18-1119"&gt;Task 11: Machine Comprehension Using Commonsense Knowledge&lt;/a&gt; is a
task where your NLP system reads a story and then answers some simple questions
that test its comprehension.&lt;/p&gt;
&lt;p&gt;There are many NLP evaluations that involve reading comprehension, but many of
them are susceptible to shallow strategies where the machine just learns to
parrot key phrases from the text. The interesting twist in this one is that
about half of the answers are not present in the text, but are meant to be
inferred using common sense knowledge.&lt;/p&gt;
&lt;p&gt;Here's an example from &lt;a href="http://www.aclweb.org/anthology/S18-1119"&gt;the task paper&lt;/a&gt;, by Simon Ostermann et al.:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Text&lt;/strong&gt;: It was a long day at work and I decided to stop at the gym before
going home.  I ran on the treadmill and lifted some weights. I decided I
would also swim a few laps in the pool. Once I was done working out, I went
in the locker room and stripped down and wrapped myself in a towel. I went
into the sauna and turned on the heat. I let it get nice and steamy. I sat
down and relaxed. I let my mind think about nothing but peaceful, happy
thoughts. I stayed in there for only about ten minutes because it was so
hot and steamy. When I got out, I turned the sauna off to save energy and
took a cool shower. I got out of the shower and dried off. After that, I
put on my extra set of clean clothes I brought with me, and got in my car
and drove home.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q1&lt;/strong&gt;: Where did they sit inside the sauna?&lt;/p&gt;
&lt;p&gt;(a) on the floor&lt;br&gt;
(b) on a bench&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q2&lt;/strong&gt;: How long did they stay in the sauna?&lt;/p&gt;
&lt;p&gt;(a) about ten minutes&lt;br&gt;
(b) over thirty minutes&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Q1 is not just asking for a phrase to be echoed from the text. It requires some
common sense knowledge, such as that saunas contain benches, that benches are
meant for people to sit on, and that people will probably sit on a bench in
preference to the floor.&lt;/p&gt;
&lt;p&gt;It's no wonder that the top system, from &lt;a href="https://arxiv.org/pdf/1803.00191.pdf"&gt;Yuanfudao Research&lt;/a&gt;, made
use of ConceptNet and got a boost from its common sense knowledge. Their
architecture was an interesting one I haven't seen before -- they queried the
ConceptNet API for what relations existed between words in the text, the
question, and the answer, and used the results they got as inputs to their
neural net.&lt;/p&gt;
&lt;p&gt;I hadn't heard about this system before the workshop. It was quite satisfying
to see ConceptNet win at a difficult task without any effort from us!&lt;/p&gt;
&lt;h3&gt;Telling word meanings apart&lt;/h3&gt;
&lt;p&gt;Our entry this year was for &lt;a href="http://aclweb.org/anthology/S18-1117"&gt;Task 10: Capturing Discriminative
Attributes&lt;/a&gt;, a task about recognizing differences between words.
Many evaluation tasks, including the multilingual similarity task that we won
last year, involve recognizing similar words. For example, it's good for a system
to know that "cappuccino" and "espresso" are similar things. But it's also
important for a system to know how they differ, and that's what this task is about.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://aclweb.org/anthology/S18-1162"&gt;Our entry&lt;/a&gt; used ConceptNet Numberbatch in combination with four
other resources, and took second place at the task. Our system is best
described by our poster, which you can now read from the comfort of your Web
browser.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.conceptnet.io/2018/06/naacl2018-poster.pdf"&gt;
&lt;img src="http://blog.conceptnet.io/2018/06/naacl2018-poster.png" alt="A rendering of our poster. The link leads to a PDF version."&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In their &lt;a href="http://aclweb.org/anthology/S18-1117"&gt;summary paper&lt;/a&gt;, the task organizers (Alicia Krebs,
Alessandro Lenci, and Denis Paperno) highlight the fact that systems that
used knowledge bases performed much better than those that didn't. Here's
a table of the results, which we've adapted from their paper and annotated
with the largest knowledge base used by each entry:&lt;/p&gt;
&lt;table class="table" style="width: 50%; font-size: 90%;"&gt;
&lt;thead&gt;&lt;tr&gt;
&lt;th align="right"&gt;Rank&lt;/th&gt;
&lt;th&gt;Team&lt;/th&gt;
&lt;th align="right"&gt;Score&lt;/th&gt;
&lt;th&gt;Knowledge base&lt;/th&gt;
&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr style="background-color: #ffc"&gt;
&lt;td align="right"&gt;1&lt;/td&gt;
&lt;td&gt;SUNNYNLP&lt;/td&gt;
&lt;td align="right"&gt;0.75&lt;/td&gt;
&lt;td&gt;Probase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #cfc"&gt;
&lt;td align="right"&gt;2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Luminoso&lt;/strong&gt;&lt;/td&gt;
&lt;td align="right"&gt;0.74&lt;/td&gt;
&lt;td&gt;ConceptNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;3&lt;/td&gt;
&lt;td&gt;BomJi&lt;/td&gt;
&lt;td align="right"&gt;0.73&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #cfc"&gt;
&lt;td align="right"&gt;3&lt;/td&gt;
&lt;td&gt;NTU NLP&lt;/td&gt;
&lt;td align="right"&gt;0.73&lt;/td&gt;
&lt;td&gt;ConceptNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #cfc"&gt;
&lt;td align="right"&gt;5&lt;/td&gt;
&lt;td&gt;UWB&lt;/td&gt;
&lt;td align="right"&gt;0.72&lt;/td&gt;
&lt;td&gt;ConceptNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #cfc"&gt;
&lt;td align="right"&gt;6&lt;/td&gt;
&lt;td&gt;ELiRF-UPV&lt;/td&gt;
&lt;td align="right"&gt;0.69&lt;/td&gt;
&lt;td&gt;ConceptNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #ffc"&gt;
&lt;td align="right"&gt;6&lt;/td&gt;
&lt;td&gt;Meaning Space&lt;/td&gt;
&lt;td align="right"&gt;0.69&lt;/td&gt;
&lt;td&gt;WordNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #cfc"&gt;
&lt;td align="right"&gt;6&lt;/td&gt;
&lt;td&gt;Wolves&lt;/td&gt;
&lt;td align="right"&gt;0.69&lt;/td&gt;
&lt;td&gt;ConceptNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;9&lt;/td&gt;
&lt;td&gt;Discriminator&lt;/td&gt;
&lt;td align="right"&gt;0.67&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #ffc"&gt;
&lt;td align="right"&gt;9&lt;/td&gt;
&lt;td&gt;ECNU&lt;/td&gt;
&lt;td align="right"&gt;0.67&lt;/td&gt;
&lt;td&gt;WordNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;11&lt;/td&gt;
&lt;td&gt;AmritaNLP&lt;/td&gt;
&lt;td align="right"&gt;0.66&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;12&lt;/td&gt;
&lt;td&gt;GHH&lt;/td&gt;
&lt;td align="right"&gt;0.65&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;13&lt;/td&gt;
&lt;td&gt;ALB&lt;/td&gt;
&lt;td align="right"&gt;0.63&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;13&lt;/td&gt;
&lt;td&gt;CitiusNLP&lt;/td&gt;
&lt;td align="right"&gt;0.63&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;13&lt;/td&gt;
&lt;td&gt;THU NGN&lt;/td&gt;
&lt;td align="right"&gt;0.63&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #ffc"&gt;
&lt;td align="right"&gt;16&lt;/td&gt;
&lt;td&gt;UNBNLP&lt;/td&gt;
&lt;td align="right"&gt;0.61&lt;/td&gt;
&lt;td&gt;WordNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;17&lt;/td&gt;
&lt;td&gt;UNAM&lt;/td&gt;
&lt;td align="right"&gt;0.60&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;17&lt;/td&gt;
&lt;td&gt;UMD&lt;/td&gt;
&lt;td align="right"&gt;0.60&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #ffc"&gt;
&lt;td align="right"&gt;19&lt;/td&gt;
&lt;td&gt;ABDN&lt;/td&gt;
&lt;td align="right"&gt;0.52&lt;/td&gt;
&lt;td&gt;WordNet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;20&lt;/td&gt;
&lt;td&gt;Igevorse&lt;/td&gt;
&lt;td align="right"&gt;0.51&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;21&lt;/td&gt;
&lt;td&gt;bicici&lt;/td&gt;
&lt;td align="right"&gt;0.47&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;/td&gt;
&lt;td&gt;human ceiling&lt;/td&gt;
&lt;td align="right"&gt;0.90&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align="right"&gt;&lt;/td&gt;
&lt;td&gt;word2vec baseline&lt;/td&gt;
&lt;td align="right"&gt;0.61&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;The winning system made very effective use of Probase, a hierarchy of
automatically extracted "is-a" statements about noun phrases. Unfortunately,
Probase was never released for non-academic use; it became the Microsoft
Concept Graph, which was recently shut down.&lt;/p&gt;
&lt;p&gt;We can see here that five systems used ConceptNet in their solution, and their
various papers describe how ConceptNet provided a boost to their accuracy.&lt;/p&gt;
&lt;p&gt;In our own results, we encountered the surprising retrospective result that we could have simplified our system to just
use the ConceptNet Numberbatch embeddings, and no other sources of information,
and it would have done just as well! You can read a bit more about this in
&lt;a href="http://blog.conceptnet.io/2018/06/naacl2018-poster.pdf"&gt;the poster&lt;/a&gt;, and I hope to demonstrate this
simple system in a tutorial post soon.&lt;/p&gt;&lt;/div&gt;</description><category>ConceptNet</category><guid>http://blog.conceptnet.io/posts/2018/conceptnet-at-semeval-2018/</guid><pubDate>Thu, 14 Jun 2018 15:47:00 GMT</pubDate></item><item><title>ftfy (fixes text for you) 5.4 released</title><link>http://blog.conceptnet.io/posts/2018/ftfy-fixes-text-for-you-54-released/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;We've released version 5.4 of &lt;em&gt;ftfy&lt;/em&gt;, our Python 3 tool that fixes mojibake and other Unicode glitches.&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;ftfy&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ftfy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fix_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ongeÃ«venaard"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s1"&gt;'ongeëvenaard'&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ftfy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fix_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"HÃ”TEL"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s1"&gt;'HÔTEL'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In this version, we tuned the heuristic to be able to fix more cases where
there are only two characters of mojibake, such as the &lt;code&gt;Ã«&lt;/code&gt; in
&lt;code&gt;"ongeÃ«venaard"&lt;/code&gt;, thanks to a bug report about how ftfy was failing to
un-corrupt the letter &lt;code&gt;ë&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;There are many cases like this that ftfy could fix already, but version 5.3
wasn't convinced it should change anything: "&lt;code&gt;«&lt;/code&gt; is a kind of quotation mark!
What if the user really meant to put «venaard» in quotes, and there just
happens to be a word ending in Ã right next to it?"&lt;/p&gt;
&lt;p&gt;This is a bit of a silly concern when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;quotation marks aren't usually sandwiched directly between letters, with
  no spaces around them&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;words don't usually end in &lt;code&gt;Ã&lt;/code&gt;, not even in Portuguese&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The text would really look a lot better with &lt;code&gt;ë&lt;/code&gt; in it instead of &lt;code&gt;Ã«&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We tuned the heuristic so that it recognizes more of these two-character
sequences as clear cases of mojibake, and doesn't worry about quotation marks
that are between letters.&lt;/p&gt;
&lt;p&gt;Why does ftfy have to be careful in cases like this? It may seem that we could
just fix every two-character sequence that looks like Windows-1252 was mixed up
with UTF-8, the most common form of mojibake. But one design goal is that we
really don't want it to &lt;em&gt;introduce&lt;/em&gt; errors. Here's a real-world example that's
in ftfy's tests:&lt;/p&gt;
&lt;pre class="code literal-block"&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"PARCE QUE SUR LEURS PLAQUES IL Y MARQUÉ…"&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;# It's possible to decode this text as if it's mojibake.&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'windows-1252'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'utf-8'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s1"&gt;'PARCE QUE SUR LEURS PLAQUES IL Y MARQUɅ'&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;# But we don't, because the text is fine as it is.&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ftfy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fix_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="s1"&gt;'PARCE QUE SUR LEURS PLAQUES IL Y MARQUÉ…'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;People are often surprised that ftfy is a hand-tuned heuristic, and not, for
example, the output of a machine-learning algorithm. Machine learning is great,
but it has its limits. One advantage of being hand-tuned is that we can keep
aiming for a false positive rate that's so low that an ML training loop
wouldn't even be able to measure it. Another advantage, shown with this update,
is that we can make sure to do the right thing in these minimal cases.&lt;/p&gt;
&lt;p&gt;Machine-learned tools such as the language detector &lt;code&gt;cld2&lt;/code&gt; will warn you that
they're "not designed to do well on short text". Short text is often interesting
and important, so ftfy is designed to do well on it.&lt;/p&gt;
&lt;p&gt;Also with this release, we can finally have a &lt;a href="https://pypi.org/project/ftfy/"&gt;nice-looking project
page&lt;/a&gt; on the new Python Package Index.&lt;/p&gt;&lt;/div&gt;</description><guid>http://blog.conceptnet.io/posts/2018/ftfy-fixes-text-for-you-54-released/</guid><pubDate>Thu, 07 Jun 2018 18:19:18 GMT</pubDate></item><item><title>ConceptNet and JSON-LD</title><link>http://blog.conceptnet.io/posts/2018/conceptnet-and-json-ld/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;&lt;a href="https://json-ld.org/"&gt;JSON-LD&lt;/a&gt; is a flower blooming in the majestic ruins of the Semantic Web.&lt;/p&gt;
&lt;p&gt;It's a way of describing an API of linked data, so that a computer can understand what its responses mean. But the description stays out of the way, so a human programmer can interact with the API the way they would any other.&lt;/p&gt;
&lt;p&gt;This post is going to be nerdier than usual. In this tutorial, we're going to look under the surface of the ConceptNet API, which is based on JSON-LD, and see how to use tools such as &lt;a href="https://github.com/digitalbazaar/pyld"&gt;pyld&lt;/a&gt; to transform it into RDF and align it with other data.&lt;/p&gt;
&lt;p&gt;Should you care? I think you should if the difference between "Linked Data" and plain old "data" is important to you. But this information isn't actually essential to use ConceptNet. It's a bonus that makes ConceptNet more interoperable with other things. This will not be on the test.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Hanging-ornaments-on-the-JSON-tree"&gt;Hanging ornaments on the JSON tree&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/conceptnet-and-json-ld/#Hanging-ornaments-on-the-JSON-tree"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To start with an example, here's the JSON-LD response that you get from the API query &lt;a href="http://api.conceptnet.io/c/en/knowledge_graph"&gt;http://api.conceptnet.io/c/en/knowledge_graph&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Conveniently for the length of this example (and disappointingly in general), ConceptNet knows only one thing about the English term "knowledge graph", which is that in French it's "graphe de connaissances". So the "edges" value, which contains the meat of the response, is a list of one edge.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;"@context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="s2"&gt;"http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nt"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/c/en/knowledge_graph"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nt"&gt;"edges"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nt"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nt"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Edge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nt"&gt;"dataset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/d/wiktionary/fr"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nt"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nt"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/c/en/knowledge_graph"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"knowledge graph"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"language"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"term"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/c/en/knowledge_graph"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nt"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"cc:by-sa/4.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nt"&gt;"rel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nt"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/r/Synonym"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Relation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Synonym"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nt"&gt;"sources"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nt"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nt"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Source"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nt"&gt;"contributor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/s/resource/wiktionary/fr"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nt"&gt;"process"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/s/process/wikiparsec/1"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="nt"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nt"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/c/fr/graphe_de_connaissances/n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"graphe de connaissances"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"language"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"fr"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"sense_label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nt"&gt;"term"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/c/fr/graphe_de_connaissances"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="nt"&gt;"surfaceText"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nt"&gt;"weight"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Most of this reflects the way the ConceptNet 5 API has always looked. What tells you it's JSON-LD is a few properties that started showing up in version 5.5, with &lt;code&gt;@&lt;/code&gt; signs in their names. In particular, there's a pointer to the &lt;code&gt;@context&lt;/code&gt;, which is where you (or your software) would go to start understanding what the JSON-LD means. With JSON-LD, you can get more information than you would from the API response alone.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Calling-things-by-their-true-name"&gt;Calling things by their true name&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/conceptnet-and-json-ld/#Calling-things-by-their-true-name"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;What's cool about JSON-LD is that it takes your API and makes it interoperable with RDF. And what's cool about RDF -- if you'll accept that there's anything cool about RDF -- is that it can assign everything a name, and that name is meaningful and globally unique.&lt;/p&gt;
&lt;p&gt;Naming things is one of the traditional "hard problems of computer science", so this actually matters. And the way RDF names things should be immediately understandable to every developer: names are URLs.&lt;/p&gt;
&lt;p&gt;Following the &lt;a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/IKnowYourTrueName"&gt;fantasy trope&lt;/a&gt;, when you know the true name of something, you have power over it.&lt;/p&gt;
&lt;p&gt;Having the URL for a term in RDF tells you whether it's the same as something you already know about. Computationally, you know more about what "JSON" is if you know it's the same as &lt;a href="https://www.wikidata.org/wiki/Q2063"&gt;https://www.wikidata.org/wiki/Q2063&lt;/a&gt; or &lt;a href="http://dbpedia.org/resource/JSON"&gt;http://dbpedia.org/resource/JSON&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;And if you have the URL for something that you &lt;em&gt;don't&lt;/em&gt; already know about, you can usually &lt;em&gt;go&lt;/em&gt; to that URL and find more information. For example, that's how you'd confirm that Wikidata's "Q2063" and DBPedia's "JSON" are the same thing as &lt;em&gt;each other&lt;/em&gt;. That's what makes all of this information "Linked Data", not just data.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;When you say "URL", you must actually mean "IRI".&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It's good to talk to you again, Imaginary Interlocutor, but do you have to be such a web-standards pedant? Nobody knows what an IRI is. I'm going to keep calling these URLs, especially because I really do intend every one of them that I produce to &lt;em&gt;locate&lt;/em&gt; a &lt;em&gt;resource&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The names in ConceptNet may look like ad-hoc identifiers, like &lt;code&gt;"/c/en/knowledge_graph"&lt;/code&gt; and &lt;code&gt;"cc:by-sa/4.0"&lt;/code&gt;. The property names, such as &lt;code&gt;"dataset"&lt;/code&gt;, look pretty ad-hoc too. But these are just short nicknames, and via JSON-LD, we can find the true names of all of these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://api.conceptnet.io/c/en/knowledge_graph"&gt;http://api.conceptnet.io/c/en/knowledge_graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://creativecommons.org/licenses/by-sa/4.0/"&gt;https://creativecommons.org/licenses/by-sa/4.0/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#dataset"&gt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#dataset&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The way to turn the strings in the API response into these true names is using ConceptNet's &lt;a href="http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json"&gt;JSON-LD context&lt;/a&gt;. Don't get too bogged down in it right now. One thing it provides is prefixes that let us use shorter names for things. Here's the prefix that lets &lt;code&gt;"cc:by-sa/4.0"&lt;/code&gt; point to the Creative Commons URL above:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;"cc": "http://creativecommons.org/licenses/",

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It also has a base URL, for interpreting relative URLs such as &lt;code&gt;/c/en/knowledge_graph&lt;/code&gt;. The base URL happens to be the URL of the context itself, because why not:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;"@base": "http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json",

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some of the property names are things that we define. This line says that "weight" is a property that's defined in ConceptNet's context (&lt;code&gt;cn:&lt;/code&gt; for short), and its value is a floating-point number:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;"weight": {"@id": "cn:weight", "@type": "xsd:float"},

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some of the properties are already meaningfully defined elsewhere. For example, we can have "comment" fields in API responses. Its values are strings to be read by the API user. This notion of a comment already exists in RDF Schema.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;"comment": {"@id": "rdfs:comment", "@type": "xsd:string"},

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With this line, we can specify that when we say "comment", we mean "rdfs:comment", which when you expand the prefix means "&lt;a href="http://www.w3.org/2000/01/rdf-schema#comment"&gt;http://www.w3.org/2000/01/rdf-schema#comment&lt;/a&gt;".&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Let's take a step back. What do you do with this kind of information?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I think the most likely user who cares about the linked data in ConceptNet is someone who's building something larger out of ConceptNet and other resources. This would match my experience in building ConceptNet, where the inputs that are available in RDF are the ones I can be confident that I'm handling correctly, even if they update in the future.&lt;/p&gt;
&lt;p&gt;Let's talk about how things used to be with WordNet. If I want to refer to a particular item in WordNet, such as the synset &lt;em&gt;{example, instance, illustration, representative}&lt;/em&gt;, there are a number of ways I could describe it, and most of them probably wouldn't be consistent with anything else. I could give you synset names that you can look up, such as &lt;code&gt;example.n.01&lt;/code&gt; or &lt;code&gt;illustration.n.03&lt;/code&gt;. These numbers might change with new versions of WordNet, and there's no way to inherently know that they refer to the same thing.&lt;/p&gt;
&lt;p&gt;I could also give you an internal ID such as &lt;code&gt;05828980-n&lt;/code&gt;, which at least is a single name for the synset, but &lt;em&gt;all&lt;/em&gt; of these IDs would change with new releases of WordNet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;And this really got better because of RDF?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yep. When using multiple data sources that are based on WordNet, you used to need a table that tells you which IDs are the same as which other IDs -- basically a kind of Rosetta stone lining up names and numbers from different versions of WordNet. Hopefully some researcher somewhere has made the table you need.&lt;/p&gt;
&lt;p&gt;But the fact that WordNet is in RDF now means that I know the global, true name that I can call this WordNet entry: &lt;a href="http://wordnet-rdf.princeton.edu/id/05828980-n"&gt;http://wordnet-rdf.princeton.edu/id/05828980-n&lt;/a&gt;. I don't need a Rosetta stone to know what this URL refers to. I can even go to that URL to find out more about it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But that's just the same internal ID shoved into a URL. How does that make a difference?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Putting it into a URL means that it's more than just an internal ID now. Regardless of where the ID number came from originally, it's an implicit promise that this URL consistently refers to the synset &lt;em&gt;{example, instance, illustration, representative}&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And, importantly, it suggests that if you're building something on top of WordNet, you should use the same URL to identify the same synset. These wordnet-rdf URLs are also used by the Open Multilingual WordNet project, so you can be sure of when terms in different languages are intended to refer to the same thing, and you can align the data OMW provides with WordNet data you get from other sources.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Using-PyLD"&gt;Using PyLD&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/conceptnet-and-json-ld/#Using-PyLD"&gt;¶&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;The PyLD library lets us interpret JSON-LD responses, and apply various standard transformations to them.&lt;/p&gt;
&lt;p&gt;For example, maybe instead of our own API format, you want to see the data in ConceptNet in a format that some other project uses. One format you might like is N-Triples, a simple text format that's like CSV if CSV were annoying to parse. Each line is an RDF statement, containing the subject, the predicate, and the object, and ending with a dot. The URLs involved are fully expanded.&lt;/p&gt;
&lt;p&gt;This format is also called N-Quads now. We could replace the dot with a fourth thing called a "named graph", but we don't.&lt;/p&gt;
&lt;p&gt;To produce this format, we'll use &lt;code&gt;jsonld.normalize&lt;/code&gt;. N-Quads is one of the two formats it can output.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [1]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pyld&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;jsonld&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [2]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show_nquads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jsonld&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'format'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'application/nquads'&lt;/span&gt;&lt;span class="p"&gt;}))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [3]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;show_nquads&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'http://api.conceptnet.io/c/en/knowledge_graph'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt"&gt;&lt;/div&gt;


&lt;div class="output_subarea output_stream output_stdout output_text"&gt;
&lt;pre&gt;&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#dataset&amp;gt; &amp;lt;http://api.conceptnet.io/d/wiktionary/fr&amp;gt; .
&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#end&amp;gt; &amp;lt;http://api.conceptnet.io/c/en/knowledge_graph&amp;gt; .
&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#license&amp;gt; &amp;lt;http://creativecommons.org/licenses/by-sa/4.0&amp;gt; .
&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#rel&amp;gt; &amp;lt;http://api.conceptnet.io/r/Synonym&amp;gt; .
&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#source&amp;gt; &amp;lt;http://api.conceptnet.io/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]&amp;gt; .
&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#start&amp;gt; &amp;lt;http://api.conceptnet.io/c/fr/graphe_de_connaissances/n&amp;gt; .
&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#weight&amp;gt; "1.0E0"^^&amp;lt;http://www.w3.org/2001/XMLSchema#float&amp;gt; .
&amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#Edge&amp;gt; .
&amp;lt;http://api.conceptnet.io/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#process&amp;gt; &amp;lt;http://api.conceptnet.io/s/process/wikiparsec/1&amp;gt; .
&amp;lt;http://api.conceptnet.io/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]&amp;gt; &amp;lt;http://purl.org/dc/terms/contributor&amp;gt; &amp;lt;http://api.conceptnet.io/s/resource/wiktionary/fr&amp;gt; .
&amp;lt;http://api.conceptnet.io/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]&amp;gt; &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#Source&amp;gt; .
&amp;lt;http://api.conceptnet.io/c/en/knowledge_graph&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#edges&amp;gt; &amp;lt;http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]&amp;gt; .
&amp;lt;http://api.conceptnet.io/c/en/knowledge_graph&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#label&amp;gt; "knowledge graph" .
&amp;lt;http://api.conceptnet.io/c/en/knowledge_graph&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#term&amp;gt; &amp;lt;http://api.conceptnet.io/c/en/knowledge_graph&amp;gt; .
&amp;lt;http://api.conceptnet.io/c/en/knowledge_graph&amp;gt; &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#Node&amp;gt; .
&amp;lt;http://api.conceptnet.io/c/fr/graphe_de_connaissances/n&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#label&amp;gt; "graphe de connaissances" .
&amp;lt;http://api.conceptnet.io/c/fr/graphe_de_connaissances/n&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#sense_label&amp;gt; "n" .
&amp;lt;http://api.conceptnet.io/c/fr/graphe_de_connaissances/n&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#term&amp;gt; &amp;lt;http://api.conceptnet.io/c/fr/graphe_de_connaissances&amp;gt; .
&amp;lt;http://api.conceptnet.io/c/fr/graphe_de_connaissances/n&amp;gt; &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#Node&amp;gt; .
&amp;lt;http://api.conceptnet.io/r/Synonym&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#label&amp;gt; "Synonym" .
&amp;lt;http://api.conceptnet.io/r/Synonym&amp;gt; &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#type&amp;gt; &amp;lt;http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#Relation&amp;gt; .

&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;There you go. It's not pretty, but everything is pretty much spelled out. With N-Quads format, you could process ConceptNet the same way as WordNet or DBPedia.&lt;/p&gt;
&lt;p&gt;The other available format, besides N-Quads, is a list of dictionaries, which is a good format for working with this data programmatically when you're not writing it to a file, but is ridiculously verbose to look at:&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [4]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;edges&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jsonld&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'http://api.conceptnet.io/c/en/knowledge_graph'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="s1"&gt;'@default'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;edges&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[4]:&lt;/div&gt;




&lt;div class="output_text output_subarea output_execute_result"&gt;
&lt;pre&gt;[{'object': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/d/wiktionary/fr'},
  'predicate': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#dataset'},
  'subject': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]'}},
 {'object': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/c/en/knowledge_graph'},
  'predicate': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#end'},
  'subject': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]'}},
 {'object': {'type': 'IRI',
   'value': 'http://creativecommons.org/licenses/by-sa/4.0'},
  'predicate': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#license'},
  'subject': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]'}},
 {'object': {'type': 'IRI', 'value': 'http://api.conceptnet.io/r/Synonym'},
  'predicate': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#rel'},
  'subject': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]'}},
 {'object': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/and/[/s/process/wikiparsec/1/,/s/resource/wiktionary/fr/]'},
  'predicate': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json#source'},
  'subject': {'type': 'IRI',
   'value': 'http://api.conceptnet.io/a/[/r/Synonym/,/c/fr/graphe_de_connaissances/n/,/c/en/knowledge_graph/]'}}]&lt;/pre&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Example:-displaying-the-graph"&gt;Example: displaying the graph&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/conceptnet-and-json-ld/#Example:-displaying-the-graph"&gt;¶&lt;/a&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;What we just got out of JSON-LD is a graph structure, and Python gives us ways to visualize graphs, such as the appropriately-named &lt;code&gt;graphviz&lt;/code&gt; wrapper.&lt;/p&gt;
&lt;p&gt;We can use this anonymous list-of-dictionaries format to provide input to graphviz. We just need some code that prettifies it a little bit.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [5]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;graphviz&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;conceptnet5.uri&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;join_uri&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;split_uri&lt;/span&gt;
&lt;span class="n"&gt;API_ROOT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'http://api.conceptnet.io'&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;short_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    Convert an RDF value (given as a dictionary) to a reasonable label.&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'type'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'blank node'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;'_'&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'type'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'IRI'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    
        &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'value'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s1"&gt;'#'&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Show just the fragment of URLs with a fragment&lt;/span&gt;
            &lt;span class="c1"&gt;# (it's probably a property name)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'#'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

        &lt;span class="c1"&gt;# Give URLs relative to the root of our API&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_ROOT&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;short_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;API_ROOT&lt;/span&gt;&lt;span class="p"&gt;):]&lt;/span&gt;
            &lt;span class="c1"&gt;# If the URL is too long, hide it&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;short_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;pieces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;split_uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;short_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;join_uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pieces&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;'...'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;short_url&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'://'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# Put literal values in quotes&lt;/span&gt;
        &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'value'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;':'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;[:&lt;/span&gt;&lt;span class="n"&gt;max_length&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'...'&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;'"&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s1"&gt;"'&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;show_graph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;span class="sd"&gt;    Show the graph structure of a ConceptNet API response.&lt;/span&gt;
&lt;span class="sd"&gt;    """&lt;/span&gt;
    &lt;span class="n"&gt;rdf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jsonld&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="s1"&gt;'@default'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;graph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graphviz&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Digraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;graph_attr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'size'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;'rankdir'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'LR'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;edge&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;rdf&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;subj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;short_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'subject'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;short_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'object'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="n"&gt;pred&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;short_name&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'predicate'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;subj&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;pred&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Apply different styles to the nodes based on whether they're&lt;/span&gt;
            &lt;span class="c1"&gt;# literals, ConceptNet URLs, or other URLs&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="c1"&gt;# Literal values&lt;/span&gt;
                &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;penwidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'0'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;startswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="c1"&gt;# ConceptNet nodes&lt;/span&gt;
                &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'filled'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fillcolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"#ddeeff"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="c1"&gt;# Other URLs&lt;/span&gt;
                &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"#558855"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;pred&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;graph&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [6]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;show_graph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'http://api.conceptnet.io/c/en/knowledge_graph'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[6]:&lt;/div&gt;



&lt;div class="output_svg output_subarea output_execute_result"&gt;
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;

&lt;!-- Generated by graphviz version 2.38.0 (20140413.2041)
 --&gt;
&lt;!-- Title: %3 Pages: 1 --&gt;
&lt;svg width="720pt" height="436pt" viewbox="0.00 0.00 720.00 436.44" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;
&lt;g id="graph0" class="graph" transform="scale(0.823467 0.823467) rotate(0) translate(4 526)"&gt;
&lt;title&gt;%3&lt;/title&gt;
&lt;polygon fill="white" stroke="none" points="-4,4 -4,-526 870.352,-526 870.352,4 -4,4"&gt;&lt;/polygon&gt;
&lt;!-- /d/wiktionary/fr --&gt;
&lt;g id="node1" class="node"&gt;&lt;title&gt;/d/wiktionary/fr&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="281.386" cy="-486" rx="66.0889" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-482.3" font-family="Times,serif" font-size="14.00"&gt;/d/wiktionary/fr&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/... --&gt;
&lt;g id="node2" class="node"&gt;&lt;title&gt;/a/...&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="27" cy="-285" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="27" y="-281.3" font-family="Times,serif" font-size="14.00"&gt;/a/...&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;/d/wiktionary/fr --&gt;
&lt;g id="edge1" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;/d/wiktionary/fr&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M30.9511,-302.96C35.9196,-329.093 47.8695,-378.261 72,-413 90.3752,-439.453 98.7433,-445.529 128,-459 152.346,-470.21 180.858,-476.784 206.591,-480.632"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="206.291,-484.123 216.676,-482.025 207.249,-477.189 206.291,-484.123"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-453.8" font-family="Times,serif" font-size="14.00"&gt;dataset&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/en/knowledge_graph --&gt;
&lt;g id="node3" class="node"&gt;&lt;title&gt;/c/en/knowledge_graph&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="281.386" cy="-399" rx="92.8835" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-395.3" font-family="Times,serif" font-size="14.00"&gt;/c/en/knowledge_graph&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;/c/en/knowledge_graph --&gt;
&lt;g id="edge2" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;/c/en/knowledge_graph&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M31.1523,-302.916C35.9462,-324.353 47.2707,-359.534 72,-377 106.101,-401.085 151.505,-407.998 191.225,-408.294"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="191.48,-411.792 201.458,-408.227 191.435,-404.792 191.48,-411.792"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-397.8" font-family="Times,serif" font-size="14.00"&gt;end&lt;/text&gt;
&lt;/g&gt;
&lt;!-- creativecommons.org/licenses/by&amp;#45;sa/4.0 --&gt;
&lt;g id="node4" class="node"&gt;&lt;title&gt;creativecommons.org/licenses/by-sa/4.0&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="281.386" cy="-285" rx="153.273" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-281.3" font-family="Times,serif" font-size="14.00"&gt;creativecommons.org/licenses/by-sa/4.0&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;creativecommons.org/licenses/by&amp;#45;sa/4.0 --&gt;
&lt;g id="edge3" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;creativecommons.org/licenses/by-sa/4.0&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M54.0592,-285C70.3866,-285 92.9558,-285 117.559,-285"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="117.833,-288.5 127.833,-285 117.833,-281.5 117.833,-288.5"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-288.8" font-family="Times,serif" font-size="14.00"&gt;license&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /r/Synonym --&gt;
&lt;g id="node5" class="node"&gt;&lt;title&gt;/r/Synonym&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="281.386" cy="-231" rx="52.7911" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-227.3" font-family="Times,serif" font-size="14.00"&gt;/r/Synonym&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;/r/Synonym --&gt;
&lt;g id="edge4" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;/r/Synonym&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M49.5475,-274.464C56.5736,-271.364 64.4985,-268.214 72,-266 120.919,-251.561 178.168,-242.482 220.27,-237.2"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="220.859,-240.654 230.362,-235.97 220.012,-233.705 220.859,-240.654"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-269.8" font-family="Times,serif" font-size="14.00"&gt;rel&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /and/... --&gt;
&lt;g id="node6" class="node"&gt;&lt;title&gt;/and/...&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="281.386" cy="-150" rx="35.9954" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-146.3" font-family="Times,serif" font-size="14.00"&gt;/and/...&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;/and/... --&gt;
&lt;g id="edge5" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;/and/...&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M40.9072,-269.147C49.2059,-259.505 60.5462,-247.3 72,-238 122.168,-197.265 193.942,-172.538 238.818,-160.071"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="239.776,-163.437 248.517,-157.451 237.95,-156.68 239.776,-163.437"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-241.8" font-family="Times,serif" font-size="14.00"&gt;source&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/fr/graphe_de_connaissances/n --&gt;
&lt;g id="node7" class="node"&gt;&lt;title&gt;/c/fr/graphe_de_connaissances/n&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="281.386" cy="-342" rx="125.378" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-338.3" font-family="Times,serif" font-size="14.00"&gt;/c/fr/graphe_de_connaissances/n&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;/c/fr/graphe_de_connaissances/n --&gt;
&lt;g id="edge6" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;/c/fr/graphe_de_connaissances/n&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M50.6193,-293.983C57.4221,-296.478 64.9526,-299.038 72,-301 109.176,-311.35 150.785,-320.09 186.988,-326.806"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="186.581,-330.29 197.048,-328.647 187.841,-323.404 186.581,-330.29"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-312.8" font-family="Times,serif" font-size="14.00"&gt;start&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;1.0E0&amp;quot; --&gt;
&lt;g id="node8" class="node"&gt;&lt;title&gt;"1.0E0"&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="281.386" cy="-96" rx="39.7935" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-92.3" font-family="Times,serif" font-size="14.00"&gt;"1.0E0"&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;&amp;quot;1.0E0&amp;quot; --&gt;
&lt;g id="edge7" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;"1.0E0"&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M32.9067,-267.426C43.6207,-232.765 72.692,-156.09 128,-123 159.176,-104.348 199.931,-97.8667 231.449,-95.9032"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="231.939,-99.3835 241.756,-95.3994 231.597,-92.3919 231.939,-99.3835"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-180.8" font-family="Times,serif" font-size="14.00"&gt;weight&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Edge --&gt;
&lt;g id="node9" class="node"&gt;&lt;title&gt;Edge&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="281.386" cy="-42" rx="28.6953" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="281.386" y="-38.3" font-family="Times,serif" font-size="14.00"&gt;Edge&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /a/...&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge8" class="edge"&gt;&lt;title&gt;/a/...-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M29.3814,-266.963C32.5349,-234.975 42.4437,-167.151 72,-119 89.4548,-90.5638 97.9864,-83.5763 128,-69 164.262,-51.389 210.364,-45.1467 242.315,-42.9964"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="242.788,-46.4752 252.573,-42.4135 242.391,-39.4865 242.788,-46.4752"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-122.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/en/knowledge_graph&amp;#45;&amp;gt;/a/... --&gt;
&lt;g id="edge12" class="edge"&gt;&lt;title&gt;/c/en/knowledge_graph-&amp;gt;/a/...&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M200.476,-390.029C176.506,-385.564 150.596,-378.906 128,-369 113.875,-362.807 83.7671,-337.971 72,-328 64.4596,-321.611 56.6218,-314.223 49.6866,-307.392"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="52.1167,-304.873 42.5723,-300.273 47.1653,-309.821 52.1167,-304.873"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="91" y="-360.8" font-family="Times,serif" font-size="14.00"&gt;edges&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/en/knowledge_graph&amp;#45;&amp;gt;/c/en/knowledge_graph --&gt;
&lt;g id="edge14" class="edge"&gt;&lt;title&gt;/c/en/knowledge_graph-&amp;gt;/c/en/knowledge_graph&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M247.718,-416.037C240.847,-425.858 252.07,-435 281.386,-435 299.709,-435 310.964,-431.429 315.151,-426.353"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="318.648,-426.004 315.054,-416.037 311.648,-426.07 318.648,-426.004"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="281.386" y="-438.8" font-family="Times,serif" font-size="14.00"&gt;term&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;knowledge graph&amp;quot; --&gt;
&lt;g id="node13" class="node"&gt;&lt;title&gt;"knowledge graph"&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="748.062" cy="-504" rx="79.0865" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-500.3" font-family="Times,serif" font-size="14.00"&gt;"knowledge graph"&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/en/knowledge_graph&amp;#45;&amp;gt;&amp;quot;knowledge graph&amp;quot; --&gt;
&lt;g id="edge13" class="edge"&gt;&lt;title&gt;/c/en/knowledge_graph-&amp;gt;"knowledge graph"&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M322.732,-415.209C368.861,-433.649 439.712,-461.656 452.773,-465 521.917,-482.704 602.375,-492.666 661.671,-498.082"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="661.472,-501.579 671.743,-498.977 662.092,-494.606 661.472,-501.579"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-495.8" font-family="Times,serif" font-size="14.00"&gt;label&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Node --&gt;
&lt;g id="node14" class="node"&gt;&lt;title&gt;Node&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="748.062" cy="-450" rx="29.795" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-446.3" font-family="Times,serif" font-size="14.00"&gt;Node&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/en/knowledge_graph&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge15" class="edge"&gt;&lt;title&gt;/c/en/knowledge_graph-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M339.992,-413.051C372.838,-420.503 414.886,-429.106 452.773,-434 543.59,-445.731 651.255,-448.879 707.827,-449.712"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="708.065,-453.215 718.11,-449.846 708.156,-446.216 708.065,-453.215"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-449.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;Synonym&amp;quot; --&gt;
&lt;g id="node18" class="node"&gt;&lt;title&gt;"Synonym"&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="748.062" cy="-234" rx="52.7911" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-230.3" font-family="Times,serif" font-size="14.00"&gt;"Synonym"&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /r/Synonym&amp;#45;&amp;gt;&amp;quot;Synonym&amp;quot; --&gt;
&lt;g id="edge20" class="edge"&gt;&lt;title&gt;/r/Synonym-&amp;gt;"Synonym"&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M334.338,-231.335C420.51,-231.892 592.647,-233.003 685.044,-233.6"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="685.068,-237.1 695.09,-233.664 685.113,-230.1 685.068,-237.1"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-236.8" font-family="Times,serif" font-size="14.00"&gt;label&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Relation --&gt;
&lt;g id="node19" class="node"&gt;&lt;title&gt;Relation&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="748.062" cy="-180" rx="40.0939" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-176.3" font-family="Times,serif" font-size="14.00"&gt;Relation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /r/Synonym&amp;#45;&amp;gt;Relation --&gt;
&lt;g id="edge21" class="edge"&gt;&lt;title&gt;/r/Synonym-&amp;gt;Relation&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M331.675,-225.59C421.209,-215.764 609.511,-195.097 698.505,-185.329"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="699.038,-188.792 708.596,-184.222 698.274,-181.834 699.038,-188.792"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-214.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /s/process/wikiparsec/1 --&gt;
&lt;g id="node10" class="node"&gt;&lt;title&gt;/s/process/wikiparsec/1&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="748.062" cy="-126" rx="92.8835" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-122.3" font-family="Times,serif" font-size="14.00"&gt;/s/process/wikiparsec/1&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /and/...&amp;#45;&amp;gt;/s/process/wikiparsec/1 --&gt;
&lt;g id="edge9" class="edge"&gt;&lt;title&gt;/and/...-&amp;gt;/s/process/wikiparsec/1&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M317.313,-148.196C386.66,-144.614 543.976,-136.489 647.801,-131.127"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="648.184,-134.612 657.99,-130.6 647.823,-127.621 648.184,-134.612"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-143.8" font-family="Times,serif" font-size="14.00"&gt;process&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /s/resource/wiktionary/fr --&gt;
&lt;g id="node11" class="node"&gt;&lt;title&gt;/s/resource/wiktionary/fr&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="748.062" cy="-72" rx="97.4827" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-68.3" font-family="Times,serif" font-size="14.00"&gt;/s/resource/wiktionary/fr&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /and/...&amp;#45;&amp;gt;/s/resource/wiktionary/fr --&gt;
&lt;g id="edge10" class="edge"&gt;&lt;title&gt;/and/...-&amp;gt;/s/resource/wiktionary/fr&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M316.67,-146.781C348.018,-143.173 395.363,-136.038 434.773,-123 443.264,-120.191 444.235,-116.666 452.773,-114 514.93,-94.5882 587.305,-84.1087 644.727,-78.4721"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="645.277,-81.9357 654.903,-77.5083 644.617,-74.9669 645.277,-81.9357"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-117.8" font-family="Times,serif" font-size="14.00"&gt;purl.org/dc/terms/contributor&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source --&gt;
&lt;g id="node12" class="node"&gt;&lt;title&gt;Source&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="748.062" cy="-18" rx="35.194" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-14.3" font-family="Times,serif" font-size="14.00"&gt;Source&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /and/...&amp;#45;&amp;gt;Source --&gt;
&lt;g id="edge11" class="edge"&gt;&lt;title&gt;/and/...-&amp;gt;Source&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M316.737,-153.502C350.842,-155.005 402.562,-151.672 434.773,-123 455.568,-104.489 431.76,-81.2642 452.773,-63 523.352,-1.65271 641.163,-4.54245 704.191,-11.5129"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="703.846,-14.9965 714.19,-12.7046 704.674,-8.04572 703.846,-14.9965"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-66.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/fr/graphe_de_connaissances/n&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge19" class="edge"&gt;&lt;title&gt;/c/fr/graphe_de_connaissances/n-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M386.702,-351.93C403.592,-356.458 420.274,-362.893 434.773,-372 446.064,-379.092 441.223,-389.339 452.773,-396 514.425,-431.555 543.155,-396.114 611.773,-415 620.213,-417.323 621.469,-420.227 629.773,-423 655.843,-431.704 686.087,-438.592 709.334,-443.232"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="708.674,-446.669 719.158,-445.142 710.01,-439.798 708.674,-446.669"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-418.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;graphe de connaissances&amp;quot; --&gt;
&lt;g id="node15" class="node"&gt;&lt;title&gt;"graphe de connaissances"&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="748.062" cy="-396" rx="105.082" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-392.3" font-family="Times,serif" font-size="14.00"&gt;"graphe de connaissances"&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/fr/graphe_de_connaissances/n&amp;#45;&amp;gt;&amp;quot;graphe de connaissances&amp;quot; --&gt;
&lt;g id="edge16" class="edge"&gt;&lt;title&gt;/c/fr/graphe_de_connaissances/n-&amp;gt;"graphe de connaissances"&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M379.515,-353.287C459.12,-362.538 571.203,-375.563 650.621,-384.793"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="650.289,-388.277 660.626,-385.955 651.097,-381.324 650.289,-388.277"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-383.8" font-family="Times,serif" font-size="14.00"&gt;label&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;n&amp;quot; --&gt;
&lt;g id="node16" class="node"&gt;&lt;title&gt;"n"&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="748.062" cy="-342" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-338.3" font-family="Times,serif" font-size="14.00"&gt;"n"&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/fr/graphe_de_connaissances/n&amp;#45;&amp;gt;&amp;quot;n&amp;quot; --&gt;
&lt;g id="edge17" class="edge"&gt;&lt;title&gt;/c/fr/graphe_de_connaissances/n-&amp;gt;"n"&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M406.911,-342C508.774,-342 646.162,-342 710.706,-342"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="710.79,-345.5 720.79,-342 710.79,-338.5 710.79,-345.5"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-345.8" font-family="Times,serif" font-size="14.00"&gt;sense_label&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/fr/graphe_de_connaissances --&gt;
&lt;g id="node17" class="node"&gt;&lt;title&gt;/c/fr/graphe_de_connaissances&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="748.062" cy="-288" rx="118.079" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="748.062" y="-284.3" font-family="Times,serif" font-size="14.00"&gt;/c/fr/graphe_de_connaissances&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/fr/graphe_de_connaissances/n&amp;#45;&amp;gt;/c/fr/graphe_de_connaissances --&gt;
&lt;g id="edge18" class="edge"&gt;&lt;title&gt;/c/fr/graphe_de_connaissances/n-&amp;gt;/c/fr/graphe_de_connaissances&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M379.515,-330.713C456.823,-321.729 564.764,-309.185 643.668,-300.015"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="644.099,-303.489 653.628,-298.858 643.291,-296.536 644.099,-303.489"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="532.273" y="-324.8" font-family="Times,serif" font-size="14.00"&gt;term&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Wait. This tentacle monster is what a single assertion in ConceptNet looks like?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes. I bet you were expecting something more like this:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [7]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graphviz&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Graph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;graph_attr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'size'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'10'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'rankdir'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'LR'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;node_attr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'style'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'filled'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'fillcolor'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"#ddeeff"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/c/en/knowledge_graph'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'/c/fr/graphe_de_connaissances'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'/r/Synonym'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;graph&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[7]:&lt;/div&gt;



&lt;div class="output_svg output_subarea output_execute_result"&gt;
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;

&lt;!-- Generated by graphviz version 2.38.0 (20140413.2041)
 --&gt;
&lt;!-- Title: %3 Pages: 1 --&gt;
&lt;svg width="531pt" height="44pt" viewbox="0.00 0.00 531.46 44.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;
&lt;g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 40)"&gt;
&lt;title&gt;%3&lt;/title&gt;
&lt;polygon fill="white" stroke="none" points="-4,4 -4,-40 527.463,-40 527.463,4 -4,4"&gt;&lt;/polygon&gt;
&lt;!-- /c/en/knowledge_graph --&gt;
&lt;g id="node1" class="node"&gt;&lt;title&gt;/c/en/knowledge_graph&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="92.9418" cy="-18" rx="92.8835" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="92.9418" y="-14.3" font-family="Times,serif" font-size="14.00"&gt;/c/en/knowledge_graph&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/fr/graphe_de_connaissances --&gt;
&lt;g id="node2" class="node"&gt;&lt;title&gt;/c/fr/graphe_de_connaissances&lt;/title&gt;
&lt;ellipse fill="#ddeeff" stroke="black" cx="405.173" cy="-18" rx="118.079" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="405.173" y="-14.3" font-family="Times,serif" font-size="14.00"&gt;/c/fr/graphe_de_connaissances&lt;/text&gt;
&lt;/g&gt;
&lt;!-- /c/en/knowledge_graph&amp;#45;&amp;#45;/c/fr/graphe_de_connaissances --&gt;
&lt;g id="edge1" class="edge"&gt;&lt;title&gt;/c/en/knowledge_graph--/c/fr/graphe_de_connaissances&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M186.181,-18C217.706,-18 253.401,-18 286.645,-18"&gt;&lt;/path&gt;
&lt;text text-anchor="middle" x="236.384" y="-21.8" font-family="Times,serif" font-size="14.00"&gt;/r/Synonym&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;blockquote&gt;&lt;p&gt;And you'll often see claims that RDF can describe knowledge graphs in this way, where each edge is a fact in the knowledge base.&lt;/p&gt;
&lt;p&gt;But this leaves no room for any interesting information about the edge, such as the sources that it comes from or how strongly we believe it. To talk &lt;em&gt;about&lt;/em&gt; an edge in RDF, you have to "reify" it -- to turn the edge into a node, and describe it with more edges. And that's what we've done.&lt;/p&gt;
&lt;p&gt;I'm not sure if anyone really wants to work with the un-reified facts in ConceptNet as RDF edges. I know that DBPedia has those, but often I see a DBPedia edge and find myself asking "okay, but really? Is this a real fact? Where did it come from?" Without reification, there's no answer.&lt;/p&gt;
&lt;p&gt;You've also got information about nodes, such as their label and their type, which are normal things to have in RDF.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tentacles aside, could I put a lot of ConceptNet assertions into GraphViz and get a visualization of the structure of the ConceptNet graph?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You would get an illegible hairy mess that brings your image-rendering software grinding to a halt.&lt;/p&gt;
&lt;p&gt;Which is about the same as any other large graph visualization.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;h3 id="Understanding-the-context-in-context"&gt;Understanding the context in context&lt;a class="anchor-link" href="http://blog.conceptnet.io/posts/2018/conceptnet-and-json-ld/#Understanding-the-context-in-context"&gt;¶&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We have to go deeper.&lt;/p&gt;
&lt;p&gt;Wait, no, we don't &lt;em&gt;have&lt;/em&gt; to do any of this. I &lt;em&gt;want&lt;/em&gt; to go deeper.&lt;/p&gt;
&lt;p&gt;One goal I had for ConceptNet's JSON-LD context is that it should explain itself, much like &lt;a href="https://www.w3.org/2000/01/rdf-schema#comment"&gt;RDF Schema&lt;/a&gt; did back in 2000. If you encounter the context file on its own, you should be able to read it and at least partially understand it. And hey, given that we've got all this JSON-LD stuff going on, it would be nice if a computer can also understand the stuff that you understand.&lt;/p&gt;
&lt;p&gt;So that's what I did. The &lt;a href="http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json"&gt;context file&lt;/a&gt; doesn't just describe an abstract vocabulary of properties; it also defines those properties. When the actual &lt;code&gt;"@context"&lt;/code&gt; refers to identifiers such as &lt;code&gt;"cn:rel"&lt;/code&gt;, the prefix &lt;code&gt;cn:&lt;/code&gt; refers to a fragment in this file itself, so it's saying that &lt;code&gt;#rel&lt;/code&gt; is defined somewhere in this file -- and here it is.&lt;/p&gt;
&lt;p&gt;The definition tells you the types of things that each property relates, such as Nodes, Edges, or Sources. It relates them to other things in RDF when possible, such the fact that the &lt;code&gt;"rel"&lt;/code&gt;, &lt;code&gt;"start"&lt;/code&gt;, and &lt;code&gt;"end"&lt;/code&gt; of a ConceptNet assertion play the roles of the  the &lt;code&gt;"rdf:predicate"&lt;/code&gt;, &lt;code&gt;"rdf:subject"&lt;/code&gt;, and &lt;code&gt;"rdf:object"&lt;/code&gt; respectively. It provides additional explanations using the &lt;code&gt;"comment"&lt;/code&gt; property. For example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"#rel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nt"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"rdf:Property"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nt"&gt;"subPropertyOf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"rdf:predicate"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nt"&gt;"domain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"#Edge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"#Feature"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="nt"&gt;"range"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"#Relation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nt"&gt;"comment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"Links to the kind of relationship that holds between two terms. In this API, the 'rel' will always be a ConceptNet URI beginning with /r/. In RDF, this would be called the 'predicate'."&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;These explanatory properties appear outside of the &lt;code&gt;"@context"&lt;/code&gt; section, the only section that actually matters to how JSON-LD is processed. I wish I could have put comments &lt;em&gt;inside&lt;/em&gt; the &lt;code&gt;"@context"&lt;/code&gt;, where the values really matter. But if I do that, it doesn't validate as proper JSON-LD. You need to have already parsed the &lt;code&gt;"@context"&lt;/code&gt; to know what a comment is, and JSON-LD doesn't leave any wiggle room for circular definitions.&lt;/p&gt;
&lt;p&gt;But outside of the &lt;code&gt;"@context"&lt;/code&gt; section, I can put whatever I want. And what I choose to put there is these additional, explanatory properties that are also meaningful JSON-LD.&lt;/p&gt;
&lt;p&gt;So you can interpret the context file, in the context of itself:&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [8]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;show_graph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'http://api.conceptnet.io/ld/conceptnet5.6/context.ld.json'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div class="output_wrapper"&gt;
&lt;div class="output"&gt;


&lt;div class="output_area"&gt;

    &lt;div class="prompt output_prompt"&gt;Out[8]:&lt;/div&gt;



&lt;div class="output_svg output_subarea output_execute_result"&gt;
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;

&lt;!-- Generated by graphviz version 2.38.0 (20140413.2041)
 --&gt;
&lt;!-- Title: %3 Pages: 1 --&gt;
&lt;svg width="804pt" height="2160pt" viewbox="0.00 0.00 804.19 2160.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;
&lt;g id="graph0" class="graph" transform="scale(0.507638 0.507638) rotate(0) translate(4 4251)"&gt;
&lt;title&gt;%3&lt;/title&gt;
&lt;polygon fill="white" stroke="none" points="-4,4 -4,-4251 1580.19,-4251 1580.19,4 -4,4"&gt;&lt;/polygon&gt;
&lt;!-- Datatype --&gt;
&lt;g id="node1" class="node"&gt;&lt;title&gt;Datatype&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="1411.75" cy="-2389" rx="42.4939" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="1411.75" y="-2385.3" font-family="Times,serif" font-size="14.00"&gt;Datatype&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Edge --&gt;
&lt;g id="node2" class="node"&gt;&lt;title&gt;Edge&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-3174" rx="28.6953" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3170.3" font-family="Times,serif" font-size="14.00"&gt;Edge&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Edge&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge1" class="edge"&gt;&lt;title&gt;Edge-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M550.053,-3181.83C640.854,-3208.75 958.864,-3288.36 1148.32,-3148 1396.04,-2964.48 1411.61,-2531.74 1411.26,-2417.21"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1414.76,-2417.12 1411.18,-2407.14 1407.76,-2417.17 1414.76,-2417.12"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-3231.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;Each edge in ConceptNet represents a fac...&amp;quot; --&gt;
&lt;g id="node3" class="node"&gt;&lt;title&gt;"Each edge in ConceptNet represents a fac..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="974.783" cy="-3021" rx="173.569" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-3017.3" font-family="Times,serif" font-size="14.00"&gt;"Each edge in ConceptNet represents a fac..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Edge&amp;#45;&amp;gt;&amp;quot;Each edge in ConceptNet represents a fac...&amp;quot; --&gt;
&lt;g id="edge2" class="edge"&gt;&lt;title&gt;Edge-&amp;gt;"Each edge in ConceptNet represents a fac..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M547.873,-3163.43C611.55,-3133.83 788.033,-3051.97 801.248,-3048 816.518,-3043.42 832.794,-3039.57 849.02,-3036.37"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="849.936,-3039.75 859.106,-3034.45 848.629,-3032.88 849.936,-3039.75"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-3083.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Statement --&gt;
&lt;g id="node4" class="node"&gt;&lt;title&gt;Statement&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="974.783" cy="-3075" rx="46.2923" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-3071.3" font-family="Times,serif" font-size="14.00"&gt;Statement&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Edge&amp;#45;&amp;gt;Statement --&gt;
&lt;g id="edge3" class="edge"&gt;&lt;title&gt;Edge-&amp;gt;Statement&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M550.939,-3167.25C599.648,-3154.59 708.644,-3126.81 801.248,-3107 841.61,-3098.37 887.575,-3089.91 921.908,-3083.86"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="922.924,-3087.23 932.17,-3082.06 921.716,-3080.34 922.924,-3087.23"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-3127.8" font-family="Times,serif" font-size="14.00"&gt;subClassOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Feature --&gt;
&lt;g id="node5" class="node"&gt;&lt;title&gt;Feature&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-3779" rx="37.0935" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3775.3" font-family="Times,serif" font-size="14.00"&gt;Feature&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Feature&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge4" class="edge"&gt;&lt;title&gt;Feature-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M561.485,-3779.99C687.977,-3783.11 1103.89,-3790.33 1148.32,-3752 1360.08,-3569.27 1403.59,-2597.17 1409.86,-2417.55"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1413.36,-2417.44 1410.2,-2407.33 1406.37,-2417.2 1413.36,-2417.44"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-3785.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A Feature is a pattern that edges can ma...&amp;quot; --&gt;
&lt;g id="node6" class="node"&gt;&lt;title&gt;"A Feature is a pattern that edges can ma..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="974.783" cy="-3725" rx="168.97" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-3721.3" font-family="Times,serif" font-size="14.00"&gt;"A Feature is a pattern that edges can ma..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Feature&amp;#45;&amp;gt;&amp;quot;A Feature is a pattern that edges can ma...&amp;quot; --&gt;
&lt;g id="edge5" class="edge"&gt;&lt;title&gt;Feature-&amp;gt;"A Feature is a pattern that edges can ma..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M559.629,-3773.35C598.557,-3767.09 663.837,-3756.97 720.248,-3750 757.162,-3745.44 797.182,-3741.18 834.284,-3737.51"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="835.056,-3740.95 844.667,-3736.49 834.373,-3733.98 835.056,-3740.95"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-3753.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Resource --&gt;
&lt;g id="node7" class="node"&gt;&lt;title&gt;Resource&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="1411.75" cy="-356" rx="43.5923" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="1411.75" y="-352.3" font-family="Times,serif" font-size="14.00"&gt;Resource&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Feature&amp;#45;&amp;gt;Resource --&gt;
&lt;g id="edge6" class="edge"&gt;&lt;title&gt;Feature-&amp;gt;Resource&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M559.702,-3784.6C599.735,-3788.95 664.968,-3789.05 702.248,-3752 901.117,-3554.38 595.237,-3319.17 801.248,-3129 858.092,-3076.53 1093.79,-3156.88 1148.32,-3102 1257.29,-2992.32 1232.58,-1867.91 1247.32,-1714 1298.68,-1177.79 1387.34,-525.592 1406.87,-383.973"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1410.36,-384.34 1408.26,-373.955 1403.42,-383.382 1410.36,-384.34"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-3132.8" font-family="Times,serif" font-size="14.00"&gt;subClassOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Node --&gt;
&lt;g id="node8" class="node"&gt;&lt;title&gt;Node&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-2748" rx="29.795" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2744.3" font-family="Times,serif" font-size="14.00"&gt;Node&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Node&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge7" class="edge"&gt;&lt;title&gt;Node-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M553.525,-2744.11C591.741,-2740.51 659.854,-2740.13 702.248,-2775 720.489,-2790 709.477,-2803.98 720.248,-2825 749.259,-2881.61 744.961,-2913.37 801.248,-2943 869.494,-2978.93 1083.14,-2984.24 1148.32,-2943 1342.07,-2820.39 1395.58,-2511.77 1407.67,-2417.07"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1411.15,-2417.45 1408.89,-2407.1 1404.2,-2416.6 1411.15,-2417.45"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-2974.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A node in ConceptNet typically represent...&amp;quot; --&gt;
&lt;g id="node9" class="node"&gt;&lt;title&gt;"A node in ConceptNet typically represent..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="974.783" cy="-2916" rx="172.769" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-2912.3" font-family="Times,serif" font-size="14.00"&gt;"A node in ConceptNet typically represent..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Node&amp;#45;&amp;gt;&amp;quot;A node in ConceptNet typically represent...&amp;quot; --&gt;
&lt;g id="edge8" class="edge"&gt;&lt;title&gt;Node-&amp;gt;"A node in ConceptNet typically represent..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M554.045,-2749.5C589.661,-2752.01 651.687,-2758.52 702.248,-2775 792.053,-2804.28 888.112,-2860.91 938.406,-2892.77"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="936.647,-2895.8 946.959,-2898.23 940.414,-2889.9 936.647,-2895.8"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-2809.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Query --&gt;
&lt;g id="node10" class="node"&gt;&lt;title&gt;Query&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="974.783" cy="-1274" rx="32.4942" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-1270.3" font-family="Times,serif" font-size="14.00"&gt;Query&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Node&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge9" class="edge"&gt;&lt;title&gt;Node-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M552.299,-2741.78C593.037,-2730.83 668.786,-2703.88 702.248,-2649 732.864,-2598.79 712.577,-2178.31 720.248,-2120 736.434,-1996.97 766.251,-1970.92 783.248,-1848 794.858,-1764.04 769.153,-1545.45 801.248,-1467 832.15,-1391.47 906.02,-1325.98 946.355,-1294.3"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="948.655,-1296.94 954.425,-1288.06 944.374,-1291.4 948.655,-1296.94"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-2123.8" font-family="Times,serif" font-size="14.00"&gt;subClassOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Query&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge10" class="edge"&gt;&lt;title&gt;Query-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M994.075,-1288.54C1029.87,-1318.06 1109.07,-1388.89 1148.32,-1467 1166.24,-1502.67 1156.69,-1516.26 1166.32,-1555 1186.9,-1637.86 1362.18,-2226.21 1402.51,-2361.37"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1399.16,-2362.41 1405.38,-2370.99 1405.87,-2360.41 1399.16,-2362.41"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="1197.82" y="-1780.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Query&amp;#45;&amp;gt;Resource --&gt;
&lt;g id="edge12" class="edge"&gt;&lt;title&gt;Query-&amp;gt;Resource&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M984.083,-1256.48C1037.48,-1143.79 1332.45,-521.258 1397.89,-383.146"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1401.25,-384.238 1402.36,-373.703 1394.92,-381.241 1401.25,-384.238"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="1197.82" y="-873.8" font-family="Times,serif" font-size="14.00"&gt;subClassOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A Query is a set of results that you can...&amp;quot; --&gt;
&lt;g id="node11" class="node"&gt;&lt;title&gt;"A Query is a set of results that you can..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="1411.75" cy="-1741" rx="164.371" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="1411.75" y="-1737.3" font-family="Times,serif" font-size="14.00"&gt;"A Query is a set of results that you can..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Query&amp;#45;&amp;gt;&amp;quot;A Query is a set of results that you can...&amp;quot; --&gt;
&lt;g id="edge11" class="edge"&gt;&lt;title&gt;Query-&amp;gt;"A Query is a set of results that you can..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M990.504,-1289.81C1054.4,-1358.41 1308.02,-1630.7 1387.09,-1715.59"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1384.59,-1718.05 1393.97,-1722.98 1389.72,-1713.28 1384.59,-1718.05"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="1197.82" y="-1539.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- RelatedNode --&gt;
&lt;g id="node12" class="node"&gt;&lt;title&gt;RelatedNode&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-1494" rx="56.59" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1490.3" font-family="Times,serif" font-size="14.00"&gt;RelatedNode&lt;/text&gt;
&lt;/g&gt;
&lt;!-- RelatedNode&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge13" class="edge"&gt;&lt;title&gt;RelatedNode-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M580.801,-1492.4C617.485,-1493.67 665.383,-1499.95 702.248,-1521 1080.95,-1737.21 1339.71,-2240.38 1398.19,-2362.12"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1395.03,-2363.64 1402.5,-2371.16 1401.35,-2360.63 1395.03,-2363.64"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-1950.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A node that is related to a query. Conta...&amp;quot; --&gt;
&lt;g id="node13" class="node"&gt;&lt;title&gt;"A node that is related to a query. Conta..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="974.783" cy="-1494" rx="165.971" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-1490.3" font-family="Times,serif" font-size="14.00"&gt;"A node that is related to a query. Conta..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- RelatedNode&amp;#45;&amp;gt;&amp;quot;A node that is related to a query. Conta...&amp;quot; --&gt;
&lt;g id="edge14" class="edge"&gt;&lt;title&gt;RelatedNode-&amp;gt;"A node that is related to a query. Conta..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M581.075,-1494C635.474,-1494 721.013,-1494 798.39,-1494"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="798.759,-1497.5 808.759,-1494 798.759,-1490.5 798.759,-1497.5"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-1497.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Relation --&gt;
&lt;g id="node14" class="node"&gt;&lt;title&gt;Relation&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-4023" rx="40.0939" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-4019.3" font-family="Times,serif" font-size="14.00"&gt;Relation&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Relation&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge15" class="edge"&gt;&lt;title&gt;Relation-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M564.133,-4020C600.438,-4016.52 655.795,-4009.44 702.248,-3996 960.953,-3921.13 1124.5,-3945.09 1229.32,-3697 1332.34,-3453.16 1397.14,-2584.88 1408.84,-2417.16"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1412.33,-2417.36 1409.53,-2407.14 1405.35,-2416.87 1412.33,-2417.36"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-3971.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Relation&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge17" class="edge"&gt;&lt;title&gt;Relation-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M562.62,-4028.6C602.568,-4032.29 665.092,-4031.17 702.248,-3996 730.61,-3969.16 708.214,-3947.15 720.248,-3910 741.399,-3844.7 768.671,-3836.07 783.248,-3769 796.829,-3706.51 778.205,-1526.65 801.248,-1467 830.657,-1390.87 905.152,-1325.64 945.976,-1294.15"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="948.297,-1296.78 954.148,-1287.95 944.066,-1291.2 948.297,-1296.78"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-3913.8" font-family="Times,serif" font-size="14.00"&gt;subClassOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;One of a fixed vocabulary of relations, ...&amp;quot; --&gt;
&lt;g id="node15" class="node"&gt;&lt;title&gt;"One of a fixed vocabulary of relations, ..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="974.783" cy="-4023" rx="165.971" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-4019.3" font-family="Times,serif" font-size="14.00"&gt;"One of a fixed vocabulary of relations, ..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Relation&amp;#45;&amp;gt;&amp;quot;One of a fixed vocabulary of relations, ...&amp;quot; --&gt;
&lt;g id="edge16" class="edge"&gt;&lt;title&gt;Relation-&amp;gt;"One of a fixed vocabulary of relations, ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M564.583,-4023C616.976,-4023 712.952,-4023 798.79,-4023"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="798.935,-4026.5 808.935,-4023 798.935,-4019.5 798.935,-4026.5"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-4026.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source --&gt;
&lt;g id="node16" class="node"&gt;&lt;title&gt;Source&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-220" rx="35.194" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-216.3" font-family="Times,serif" font-size="14.00"&gt;Source&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge18" class="edge"&gt;&lt;title&gt;Source-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M558.571,-224.043C594.509,-228.852 653.115,-238.03 702.248,-252 747.736,-264.934 755.875,-277.669 801.248,-291 952.142,-335.333 1037.48,-248.425 1148.32,-360 1282.91,-495.488 1209.5,-592.052 1229.32,-782 1252.06,-999.965 1217.21,-1550.93 1247.32,-1768 1279.84,-2002.51 1370.87,-2275.29 1400.96,-2361.47"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1397.71,-2362.76 1404.32,-2371.04 1404.31,-2360.44 1397.71,-2362.76"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-363.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source&amp;#45;&amp;gt;Resource --&gt;
&lt;g id="edge20" class="edge"&gt;&lt;title&gt;Source-&amp;gt;Resource&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M559.266,-222.689C681.035,-232.342 1090.24,-265.243 1148.32,-276 1185.11,-282.816 1193.46,-288.28 1229.32,-299 1276.59,-313.135 1330.51,-330.192 1367.19,-341.943"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1366.47,-345.387 1377.06,-345.109 1368.61,-338.722 1366.47,-345.387"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-279.8" font-family="Times,serif" font-size="14.00"&gt;subClassOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A Source is a reason to believe an Edge....&amp;quot; --&gt;
&lt;g id="node17" class="node"&gt;&lt;title&gt;"A Source is a reason to believe an Edge...."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="974.783" cy="-208" rx="169.77" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-204.3" font-family="Times,serif" font-size="14.00"&gt;"A Source is a reason to believe an Edge...."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Source&amp;#45;&amp;gt;&amp;quot;A Source is a reason to believe an Edge....&amp;quot; --&gt;
&lt;g id="edge19" class="edge"&gt;&lt;title&gt;Source-&amp;gt;"A Source is a reason to believe an Edge...."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M559.251,-219.088C610.442,-217.719 710.682,-215.038 799.764,-212.655"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="800.108,-216.147 810.011,-212.381 799.921,-209.149 800.108,-216.147"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-218.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- Property --&gt;
&lt;g id="node18" class="node"&gt;&lt;title&gt;Property&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-1744" rx="40.8928" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1740.3" font-family="Times,serif" font-size="14.00"&gt;Property&lt;/text&gt;
&lt;/g&gt;
&lt;!-- activity --&gt;
&lt;g id="node19" class="node"&gt;&lt;title&gt;activity&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-181" rx="37.0935" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-177.3" font-family="Times,serif" font-size="14.00"&gt;activity&lt;/text&gt;
&lt;/g&gt;
&lt;!-- activity&amp;#45;&amp;gt;Resource --&gt;
&lt;g id="edge24" class="edge"&gt;&lt;title&gt;activity-&amp;gt;Resource&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M151.656,-178.253C310.675,-166.407 956.32,-122.856 1148.32,-181 1247.25,-210.959 1342.96,-291.875 1386.42,-332.319"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1384.23,-335.07 1393.91,-339.378 1389.03,-329.974 1384.23,-335.07"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-155.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- activity&amp;#45;&amp;gt;Source --&gt;
&lt;g id="edge23" class="edge"&gt;&lt;title&gt;activity-&amp;gt;Source&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M151.703,-183.781C193.858,-187.125 266.114,-193.035 328.08,-199 380.216,-204.018 440.1,-210.584 479.617,-215.028"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="479.373,-218.523 489.703,-216.166 480.158,-211.567 479.373,-218.523"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-202.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- activity&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge21" class="edge"&gt;&lt;title&gt;activity-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M145.355,-191.441C172.461,-202.793 211.298,-223.748 230.08,-256 260.786,-308.731 208.694,-483.392 248.08,-530 271.667,-557.913 305.2,-520.504 328.08,-549 368.71,-599.604 303.412,-1668.1 346.08,-1717 377.464,-1752.97 434.874,-1755.51 475.819,-1751.78"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.274,-1755.25 485.848,-1750.71 475.534,-1748.29 476.274,-1755.25"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-552.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A property of a source, identifying a cr...&amp;quot; --&gt;
&lt;g id="node20" class="node"&gt;&lt;title&gt;"A property of a source, identifying a cr..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-119" rx="165.171" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-115.3" font-family="Times,serif" font-size="14.00"&gt;"A property of a source, identifying a cr..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- activity&amp;#45;&amp;gt;&amp;quot;A property of a source, identifying a cr...&amp;quot; --&gt;
&lt;g id="edge22" class="edge"&gt;&lt;title&gt;activity-&amp;gt;"A property of a source, identifying a cr..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M143.272,-169.323C169.567,-158.626 210.778,-143.371 248.08,-136 280.977,-129.499 316.478,-125.284 350.692,-122.59"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="351.072,-126.071 360.783,-121.835 350.55,-119.091 351.072,-126.071"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-139.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- contributor --&gt;
&lt;g id="node21" class="node"&gt;&lt;title&gt;contributor&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-80" rx="50.0912" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-76.3" font-family="Times,serif" font-size="14.00"&gt;contributor&lt;/text&gt;
&lt;/g&gt;
&lt;!-- contributor&amp;#45;&amp;gt;Resource --&gt;
&lt;g id="edge28" class="edge"&gt;&lt;title&gt;contributor-&amp;gt;Resource&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M164.269,-76.3024C313.75,-66.2827 781.295,-45.8085 1148.32,-148 1186.27,-158.567 1196.55,-162.132 1229.32,-184 1294.6,-227.566 1358.18,-295.401 1389.89,-331.485"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1387.32,-333.861 1396.53,-339.103 1392.6,-329.264 1387.32,-333.861"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-87.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- contributor&amp;#45;&amp;gt;Source --&gt;
&lt;g id="edge27" class="edge"&gt;&lt;title&gt;contributor-&amp;gt;Source&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M162.06,-73.8027C208.448,-70.1061 279.892,-71.679 328.08,-107 343.477,-118.286 332.336,-132.75 346.08,-146 383.704,-182.272 441.698,-201.876 480.979,-211.62"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="480.248,-215.044 490.786,-213.945 481.863,-208.233 480.248,-215.044"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-110.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- contributor&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge25" class="edge"&gt;&lt;title&gt;contributor-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M151.285,-92.6047C177.928,-104.159 212.773,-124.066 230.08,-154 248.904,-186.559 223.984,-463.124 248.08,-492 271.494,-520.059 305.207,-482.498 328.08,-511 370.019,-563.26 302.037,-1666.5 346.08,-1717 377.455,-1752.97 434.867,-1755.52 475.815,-1751.78"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.271,-1755.26 485.844,-1750.72 475.53,-1748.29 476.271,-1755.26"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-514.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A property of a source, indicating the p...&amp;quot; --&gt;
&lt;g id="node22" class="node"&gt;&lt;title&gt;"A property of a source, indicating the p..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-18" rx="165.971" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-14.3" font-family="Times,serif" font-size="14.00"&gt;"A property of a source, indicating the p..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- contributor&amp;#45;&amp;gt;&amp;quot;A property of a source, indicating the p...&amp;quot; --&gt;
&lt;g id="edge26" class="edge"&gt;&lt;title&gt;contributor-&amp;gt;"A property of a source, indicating the p..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M148.205,-66.3336C174.54,-55.8088 213.035,-41.9249 248.08,-35 280.87,-28.5205 316.248,-24.3113 350.359,-21.6159"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="350.71,-25.0995 360.42,-20.8612 350.186,-18.1191 350.71,-25.0995"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-38.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- dataset --&gt;
&lt;g id="node23" class="node"&gt;&lt;title&gt;dataset&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-2370" rx="35.194" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-2366.3" font-family="Times,serif" font-size="14.00"&gt;dataset&lt;/text&gt;
&lt;/g&gt;
&lt;!-- dataset&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge31" class="edge"&gt;&lt;title&gt;dataset-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M134.448,-2385.5C161.192,-2409.31 209.804,-2457.74 230.08,-2511 260.08,-2589.8 206.752,-2816.51 248.08,-2890 269.105,-2927.39 305.693,-2907.41 328.08,-2944 362.66,-3000.52 307.091,-3038.42 346.08,-3092 379.435,-3137.84 444.836,-3158.78 486.145,-3167.8"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.594,-3171.26 496.094,-3169.84 487.002,-3164.4 485.594,-3171.26"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2947.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- dataset&amp;#45;&amp;gt;Resource --&gt;
&lt;g id="edge32" class="edge"&gt;&lt;title&gt;dataset-&amp;gt;Resource&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M150.459,-2370.64C265.02,-2370.65 634.577,-2353.21 783.248,-2135 831.474,-2064.22 758.904,-1824.45 801.248,-1750 892.614,-1589.36 1043.27,-1673.05 1148.32,-1521 1283.67,-1325.07 1387.43,-542.675 1407.3,-384.113"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1410.78,-384.542 1408.54,-374.186 1403.83,-383.677 1410.78,-384.542"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-2208.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- dataset&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge29" class="edge"&gt;&lt;title&gt;dataset-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M138.319,-2356.07C165.399,-2337.76 209.963,-2302.82 230.08,-2260 252.819,-2211.59 214.331,-2061.49 248.08,-2020 271.424,-1991.3 304.419,-2025.44 328.08,-1997 354.497,-1965.25 321.063,-1844.87 346.08,-1812 376.235,-1772.38 432.535,-1755.84 473.582,-1748.94"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.315,-1752.37 483.664,-1747.38 473.247,-1745.45 474.315,-1752.37"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2023.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A property of an edge, separating edges ...&amp;quot; --&gt;
&lt;g id="node24" class="node"&gt;&lt;title&gt;"A property of an edge, separating edges ..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-2386" rx="169.77" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2382.3" font-family="Times,serif" font-size="14.00"&gt;"A property of an edge, separating edges ..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- dataset&amp;#45;&amp;gt;&amp;quot;A property of an edge, separating edges ...&amp;quot; --&gt;
&lt;g id="edge30" class="edge"&gt;&lt;title&gt;dataset-&amp;gt;"A property of an edge, separating edges ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M150.051,-2371.34C195.226,-2373.11 278.22,-2376.37 354.482,-2379.37"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="354.58,-2382.88 364.709,-2379.77 354.855,-2375.88 354.58,-2382.88"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2381.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- edges --&gt;
&lt;g id="node25" class="node"&gt;&lt;title&gt;edges&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-4034" rx="30.5947" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-4030.3" font-family="Times,serif" font-size="14.00"&gt;edges&lt;/text&gt;
&lt;/g&gt;
&lt;!-- edges&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge35" class="edge"&gt;&lt;title&gt;edges-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M143.706,-4027.62C199.823,-4014.54 322.242,-3985.34 328.08,-3978 367.396,-3928.59 325.159,-3469.58 346.08,-3410 378.061,-3318.93 458.908,-3234.06 499.354,-3195.61"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="501.981,-3197.94 506.878,-3188.55 497.191,-3192.84 501.981,-3197.94"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-4004.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- edges&amp;#45;&amp;gt;Relation --&gt;
&lt;g id="edge36" class="edge"&gt;&lt;title&gt;edges-&amp;gt;Relation&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M143.104,-4041.2C169.623,-4047.87 211.299,-4057.28 248.08,-4061 330.318,-4069.32 425.786,-4049.45 479.877,-4035.42"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="481.036,-4038.73 489.805,-4032.79 479.242,-4031.97 481.036,-4038.73"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-4065.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- edges&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge33" class="edge"&gt;&lt;title&gt;edges-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M144.112,-4028.35C171.089,-4021.3 210.553,-4006.41 230.08,-3977 264.198,-3925.61 209.672,-3748.27 248.08,-3700 271.193,-3670.95 305.777,-3705.67 328.08,-3676 359.189,-3634.61 316.548,-1854.53 346.08,-1812 374.71,-1770.77 432.029,-1754.53 473.722,-1748.14"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.27,-1751.59 483.692,-1746.75 473.304,-1744.66 474.27,-1751.59"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3703.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;When you look up a node, its &amp;#39;edges&amp;#39; pro...&amp;quot; --&gt;
&lt;g id="node26" class="node"&gt;&lt;title&gt;"When you look up a node, its 'edges' pro..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-4175" rx="170.87" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-4171.3" font-family="Times,serif" font-size="14.00"&gt;"When you look up a node, its 'edges' pro..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- edges&amp;#45;&amp;gt;&amp;quot;When you look up a node, its &amp;#39;edges&amp;#39; pro...&amp;quot; --&gt;
&lt;g id="edge34" class="edge"&gt;&lt;title&gt;edges-&amp;gt;"When you look up a node, its 'edges' pro..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M130.047,-4049.81C152.367,-4073.84 198.562,-4118.98 248.08,-4140 280.144,-4153.61 316.059,-4162.33 351.086,-4167.82"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="351.023,-4171.35 361.428,-4169.36 352.051,-4164.43 351.023,-4171.35"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-4166.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- end --&gt;
&lt;g id="node27" class="node"&gt;&lt;title&gt;end&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-3475" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-3471.3" font-family="Times,serif" font-size="14.00"&gt;end&lt;/text&gt;
&lt;/g&gt;
&lt;!-- end&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge39" class="edge"&gt;&lt;title&gt;end-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.815,-3477.78C184.543,-3481.02 270.986,-3481.6 328.08,-3442 341.488,-3432.7 337.164,-3423.67 346.08,-3410 398.842,-3329.13 469.923,-3239.39 503.733,-3197.69"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="506.576,-3199.75 510.172,-3189.78 501.146,-3195.33 506.576,-3199.75"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3474.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- end&amp;#45;&amp;gt;Feature --&gt;
&lt;g id="edge40" class="edge"&gt;&lt;title&gt;end-&amp;gt;Feature&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.242,-3473.09C168.737,-3472.74 208.735,-3476.88 230.08,-3502 266.867,-3545.29 208.098,-3716.64 248.08,-3757 263.819,-3772.89 402.937,-3777.3 477.084,-3778.53"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="477.043,-3782.03 487.096,-3778.68 477.15,-3775.03 477.043,-3782.03"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3774.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- end&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge41" class="edge"&gt;&lt;title&gt;end-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M140.965,-3469.77C167.589,-3462.79 208.818,-3447.69 230.08,-3418 264.55,-3369.86 209.342,-3330.78 248.08,-3286 272.284,-3258.02 305.284,-3292.14 328.08,-3263 361.512,-3220.26 309.969,-2815.5 346.08,-2775 380.351,-2736.56 444.375,-2736.55 485.325,-2741.34"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.087,-2744.84 495.459,-2742.68 486.003,-2737.9 485.087,-2744.84"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3289.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- end&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge37" class="edge"&gt;&lt;title&gt;end-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.571,-3470.18C168.726,-3463.56 210.417,-3448.78 230.08,-3418 266.228,-3361.42 210.788,-2869.83 248.08,-2814 269.735,-2781.58 306.605,-2810.54 328.08,-2778 357.643,-2733.2 315.269,-1855.95 346.08,-1812 374.807,-1771.02 431.832,-1754.73 473.434,-1748.26"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="473.975,-1751.72 483.385,-1746.85 472.994,-1744.79 473.975,-1751.72"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2817.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;Links to the node that this edge points ...&amp;quot; --&gt;
&lt;g id="node28" class="node"&gt;&lt;title&gt;"Links to the node that this edge points ..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-3627" rx="163.571" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3623.3" font-family="Times,serif" font-size="14.00"&gt;"Links to the node that this edge points ..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- end&amp;#45;&amp;gt;&amp;quot;Links to the node that this edge points ...&amp;quot; --&gt;
&lt;g id="edge38" class="edge"&gt;&lt;title&gt;end-&amp;gt;"Links to the node that this edge points ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.958,-3473.34C168.223,-3473.19 208.034,-3477.5 230.08,-3502 272.334,-3548.96 200.664,-3601.25 248.08,-3643 275.329,-3666.99 366.969,-3656.91 437.065,-3644.72"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="438.008,-3648.11 447.241,-3642.91 436.782,-3641.22 438.008,-3648.11"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3660.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- object --&gt;
&lt;g id="node29" class="node"&gt;&lt;title&gt;object&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-3725" rx="32.4942" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3721.3" font-family="Times,serif" font-size="14.00"&gt;object&lt;/text&gt;
&lt;/g&gt;
&lt;!-- end&amp;#45;&amp;gt;object --&gt;
&lt;g id="edge42" class="edge"&gt;&lt;title&gt;end-&amp;gt;object&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.18,-3473.14C168.624,-3472.84 208.581,-3477.02 230.08,-3502 261.64,-3538.68 212.838,-3685.84 248.08,-3719 280.841,-3749.82 414.278,-3738.54 482.532,-3730.42"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="483.004,-3733.89 492.505,-3729.21 482.155,-3726.94 483.004,-3733.89"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3741.8" font-family="Times,serif" font-size="14.00"&gt;subPropertyOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- feature --&gt;
&lt;g id="node30" class="node"&gt;&lt;title&gt;feature&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-1790" rx="35.194" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-1786.3" font-family="Times,serif" font-size="14.00"&gt;feature&lt;/text&gt;
&lt;/g&gt;
&lt;!-- feature&amp;#45;&amp;gt;Feature --&gt;
&lt;g id="edge46" class="edge"&gt;&lt;title&gt;feature-&amp;gt;Feature&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M145.893,-1798.84C173.189,-1808.68 211.98,-1827.5 230.08,-1859 260.529,-1911.99 214.739,-2907.78 248.08,-2959 269.449,-2991.83 306.588,-2963.25 328.08,-2996 351.128,-3031.13 318.326,-3720.46 346.08,-3752 378.466,-3788.8 438.115,-3790.52 479.17,-3786.4"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="479.646,-3789.87 489.179,-3785.25 478.844,-3782.92 479.646,-3789.87"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2999.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- feature&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge45" class="edge"&gt;&lt;title&gt;feature-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M145.866,-1798.79C172.417,-1806.12 212.454,-1816 248.08,-1820 405.782,-1837.69 686.001,-1784.49 702.248,-1771 756.903,-1725.61 765.814,-1528.58 801.248,-1467 841.781,-1396.56 911.135,-1329.34 948.372,-1295.93"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="951.087,-1298.2 956.243,-1288.95 946.441,-1292.97 951.087,-1298.2"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-1827.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- feature&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge43" class="edge"&gt;&lt;title&gt;feature-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M137.886,-1776.29C163.252,-1761.25 206.893,-1738.05 248.08,-1729 327.072,-1711.64 421.735,-1723.76 476.899,-1733.99"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.578,-1737.49 487.058,-1735.93 477.895,-1730.61 476.578,-1737.49"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1732.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;When this property is present, the query...&amp;quot; --&gt;
&lt;g id="node31" class="node"&gt;&lt;title&gt;"When this property is present, the query..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1690" rx="168.97" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1686.3" font-family="Times,serif" font-size="14.00"&gt;"When this property is present, the query..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- feature&amp;#45;&amp;gt;&amp;quot;When this property is present, the query...&amp;quot; --&gt;
&lt;g id="edge44" class="edge"&gt;&lt;title&gt;feature-&amp;gt;"When this property is present, the query..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M132.76,-1774.36C156.352,-1753.41 201.73,-1717.14 248.08,-1702 284.265,-1690.18 324.557,-1684.55 362.898,-1682.41"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="363.306,-1685.89 373.126,-1681.92 362.969,-1678.9 363.306,-1685.89"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1705.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- features --&gt;
&lt;g id="node32" class="node"&gt;&lt;title&gt;features&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-1300" rx="38.1938" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-1296.3" font-family="Times,serif" font-size="14.00"&gt;features&lt;/text&gt;
&lt;/g&gt;
&lt;!-- features&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge49" class="edge"&gt;&lt;title&gt;features-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M145.128,-1311.22C171.528,-1320.77 211.767,-1333.75 248.08,-1339 283.269,-1344.09 292.569,-1340.78 328.08,-1339 557.394,-1327.49 830.795,-1293.11 932.777,-1279.57"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="933.502,-1283.01 942.951,-1278.21 932.576,-1276.07 933.502,-1283.01"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-1341.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- features&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge50" class="edge"&gt;&lt;title&gt;features-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M146.759,-1289.88C170.418,-1281.44 203.47,-1268.19 230.08,-1252 238.976,-1246.59 238.564,-1241.23 248.08,-1237 288.284,-1219.13 302.193,-1226.12 346.08,-1223 503.978,-1211.78 544.632,-1208.33 702.248,-1223 785.976,-1230.79 882.369,-1251.83 934.815,-1264.32"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="934.161,-1267.76 944.702,-1266.69 935.797,-1260.95 934.161,-1267.76"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-1226.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- features&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge47" class="edge"&gt;&lt;title&gt;features-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M135.189,-1315.43C161.029,-1337.36 206.53,-1380.13 230.08,-1427 248.199,-1463.06 220.027,-1486.99 248.08,-1516 273.482,-1542.27 304.035,-1507.48 328.08,-1535 354.82,-1565.61 318.109,-1687.51 346.08,-1717 378.665,-1751.35 435.125,-1754.39 475.537,-1751.22"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.07,-1754.68 485.699,-1750.26 475.416,-1747.71 476.07,-1754.68"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1538.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;API responses can be grouped into &amp;#39;featu...&amp;quot; --&gt;
&lt;g id="node33" class="node"&gt;&lt;title&gt;"API responses can be grouped into 'featu..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1265" rx="170.87" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1261.3" font-family="Times,serif" font-size="14.00"&gt;"API responses can be grouped into 'featu..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- features&amp;#45;&amp;gt;&amp;quot;API responses can be grouped into &amp;#39;featu...&amp;quot; --&gt;
&lt;g id="edge48" class="edge"&gt;&lt;title&gt;features-&amp;gt;"API responses can be grouped into 'featu..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.48,-1286.65C167.456,-1273.83 209.352,-1255.35 248.08,-1248 308.031,-1236.62 376.519,-1240.8 430.159,-1247.86"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="429.956,-1251.36 440.339,-1249.25 430.908,-1244.43 429.956,-1251.36"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1251.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- label --&gt;
&lt;g id="node34" class="node"&gt;&lt;title&gt;label&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="115.04" cy="-2200" rx="27.8951" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-2196.3" font-family="Times,serif" font-size="14.00"&gt;label&lt;/text&gt;
&lt;/g&gt;
&lt;!-- label&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge53" class="edge"&gt;&lt;title&gt;label-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M132.614,-2214.25C158.804,-2237.92 208.95,-2288.19 230.08,-2343 253.064,-2402.63 209.205,-2579.28 248.08,-2630 270.908,-2659.78 293.244,-2643.05 328.08,-2657 386.927,-2680.57 453.439,-2712.86 491.622,-2731.96"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="490.191,-2735.16 500.698,-2736.52 493.334,-2728.9 490.191,-2735.16"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2660.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- label&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge51" class="edge"&gt;&lt;title&gt;label-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M132.847,-2185.77C158.425,-2163.08 206.618,-2116.01 230.08,-2065 250.964,-2019.59 217.038,-1993.17 248.08,-1954 271.969,-1923.86 304.147,-1951.11 328.08,-1921 358.632,-1882.56 315.056,-1850.06 346.08,-1812 377.442,-1773.53 433.261,-1756.78 473.866,-1749.52"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.543,-1752.96 483.837,-1747.87 473.4,-1746.05 474.543,-1752.96"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1957.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- label&amp;#45;&amp;gt;label --&gt;
&lt;g id="edge55" class="edge"&gt;&lt;title&gt;label-&amp;gt;label&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M91.6259,-2210.14C74.4812,-2222.07 82.2859,-2236 115.04,-2236 141.396,-2236 151.598,-2226.98 145.644,-2217.24"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="148.027,-2214.67 138.454,-2210.14 143.107,-2219.65 148.027,-2214.67"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="115.04" y="-2239.8" font-family="Times,serif" font-size="14.00"&gt;subPropertyOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;The natural&amp;#45;language label of a node. Ev...&amp;quot; --&gt;
&lt;g id="node35" class="node"&gt;&lt;title&gt;"The natural-language label of a node. Ev..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-2500" rx="170.87" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2496.3" font-family="Times,serif" font-size="14.00"&gt;"The natural-language label of a node. Ev..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- label&amp;#45;&amp;gt;&amp;quot;The natural&amp;#45;language label of a node. Ev...&amp;quot; --&gt;
&lt;g id="edge52" class="edge"&gt;&lt;title&gt;label-&amp;gt;"The natural-language label of a node. Ev..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M132.175,-2214.43C157.749,-2238.34 207.047,-2288.96 230.08,-2343 241.946,-2370.84 226.122,-2457.17 248.08,-2478 256.674,-2486.15 299.689,-2491.29 349.245,-2494.52"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="349.037,-2498.02 359.235,-2495.15 349.472,-2491.03 349.037,-2498.02"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2496.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- string --&gt;
&lt;g id="node36" class="node"&gt;&lt;title&gt;string&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-2114" rx="30.5947" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2110.3" font-family="Times,serif" font-size="14.00"&gt;string&lt;/text&gt;
&lt;/g&gt;
&lt;!-- label&amp;#45;&amp;gt;string --&gt;
&lt;g id="edge54" class="edge"&gt;&lt;title&gt;label-&amp;gt;string&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M135.197,-2187.39C160.057,-2171.76 205.327,-2145.74 248.08,-2134 329.461,-2111.65 429.174,-2110.59 483.402,-2112.11"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="483.514,-2115.61 493.622,-2112.44 483.741,-2108.61 483.514,-2115.61"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2137.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- license --&gt;
&lt;g id="node37" class="node"&gt;&lt;title&gt;license&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-3019" rx="35.194" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-3015.3" font-family="Times,serif" font-size="14.00"&gt;license&lt;/text&gt;
&lt;/g&gt;
&lt;!-- license&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge58" class="edge"&gt;&lt;title&gt;license-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M123.373,-3036.57C139.591,-3072.79 182.349,-3155.06 248.08,-3187 327.261,-3225.48 434.851,-3201.88 489.019,-3185.6"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="490.292,-3188.87 498.804,-3182.56 488.216,-3182.18 490.292,-3188.87"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3209.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- license&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge59" class="edge"&gt;&lt;title&gt;license-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M131.835,-3003.18C155.031,-2981.07 200.714,-2941.66 248.08,-2924 437.985,-2853.2 557.224,-3024.58 702.248,-2883 815.405,-2772.53 772.23,-2333.75 783.248,-2176 788.738,-2097.39 772.207,-1540.26 801.248,-1467 831.324,-1391.13 905.54,-1325.79 946.146,-1294.21"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="948.457,-1296.85 954.272,-1287.99 944.203,-1291.29 948.457,-1296.85"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-2943.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- license&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge56" class="edge"&gt;&lt;title&gt;license-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M138.145,-3005.18C165.489,-2986.65 210.786,-2950.96 230.08,-2907 254.652,-2851.01 218.959,-2410.76 248.08,-2357 268.75,-2318.84 307.332,-2339.12 328.08,-2301 354.071,-2253.24 314.468,-1856.24 346.08,-1812 375.178,-1771.28 432.133,-1754.94 473.618,-1748.39"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.141,-1751.85 483.539,-1746.96 473.142,-1744.92 474.141,-1751.85"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2360.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A link to the Creative Commons license u...&amp;quot; --&gt;
&lt;g id="node38" class="node"&gt;&lt;title&gt;"A link to the Creative Commons license u..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-3065" rx="176.269" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3061.3" font-family="Times,serif" font-size="14.00"&gt;"A link to the Creative Commons license u..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- license&amp;#45;&amp;gt;&amp;quot;A link to the Creative Commons license u...&amp;quot; --&gt;
&lt;g id="edge57" class="edge"&gt;&lt;title&gt;license-&amp;gt;"A link to the Creative Commons license u..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M149.401,-3023.15C176.089,-3026.45 214.473,-3031.13 248.08,-3035 294.779,-3040.38 345.968,-3046.02 391.391,-3050.95"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="391.275,-3054.46 401.594,-3052.06 392.029,-3047.5 391.275,-3054.46"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3046.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- License --&gt;
&lt;g id="node39" class="node"&gt;&lt;title&gt;License&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-3011" rx="38.1938" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3007.3" font-family="Times,serif" font-size="14.00"&gt;License&lt;/text&gt;
&lt;/g&gt;
&lt;!-- license&amp;#45;&amp;gt;License --&gt;
&lt;g id="edge60" class="edge"&gt;&lt;title&gt;license-&amp;gt;License&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M150.4,-3018.32C223.109,-3016.9 392.65,-3013.56 475.662,-3011.93"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="475.895,-3015.43 485.824,-3011.73 475.758,-3008.43 475.895,-3015.43"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3019.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- node --&gt;
&lt;g id="node40" class="node"&gt;&lt;title&gt;node&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-3529" rx="27.8951" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-3525.3" font-family="Times,serif" font-size="14.00"&gt;node&lt;/text&gt;
&lt;/g&gt;
&lt;!-- node&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge63" class="edge"&gt;&lt;title&gt;node-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.93,-3525.72C196.989,-3518.9 314.824,-3502.74 328.08,-3490 354.353,-3464.74 330.803,-3443.09 346.08,-3410 386.539,-3322.36 463.383,-3235.87 501.126,-3196.32"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="503.713,-3198.68 508.131,-3189.05 498.672,-3193.83 503.713,-3198.68"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3512.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- node&amp;#45;&amp;gt;Feature --&gt;
&lt;g id="edge64" class="edge"&gt;&lt;title&gt;node-&amp;gt;Feature&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M118.497,-3546.86C126.446,-3596.86 156.5,-3738.22 248.08,-3795 285.592,-3818.26 411.95,-3799.67 479.582,-3787.48"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="480.309,-3790.91 489.514,-3785.66 479.047,-3784.02 480.309,-3790.91"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3809.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- node&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge65" class="edge"&gt;&lt;title&gt;node-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M143.22,-3530.47C169.319,-3530.3 207.951,-3525.6 230.08,-3502 262.766,-3467.14 215.405,-3430.87 248.08,-3396 273.068,-3369.33 304.994,-3405.33 328.08,-3377 370.353,-3325.12 301.719,-2825.1 346.08,-2775 380.216,-2736.44 444.28,-2736.47 485.274,-2741.3"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.047,-2744.8 495.42,-2742.64 485.968,-2737.86 485.047,-2744.8"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3399.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- node&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge61" class="edge"&gt;&lt;title&gt;node-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M143.083,-3530.8C169.462,-3530.93 208.652,-3526.51 230.08,-3502 283.582,-3440.81 194.599,-3381.21 248.08,-3320 272.124,-3292.48 305.247,-3329.53 328.08,-3301 353.923,-3268.7 322.447,-1845.95 346.08,-1812 374.673,-1770.92 431.723,-1754.65 473.367,-1748.21"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="473.915,-1751.67 483.33,-1746.81 472.94,-1744.74 473.915,-1751.67"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3323.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;Sometimes we want to specify that a Conc...&amp;quot; --&gt;
&lt;g id="node41" class="node"&gt;&lt;title&gt;"Sometimes we want to specify that a Conc..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-3855" rx="178.168" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3851.3" font-family="Times,serif" font-size="14.00"&gt;"Sometimes we want to specify that a Conc..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- node&amp;#45;&amp;gt;&amp;quot;Sometimes we want to specify that a Conc...&amp;quot; --&gt;
&lt;g id="edge62" class="edge"&gt;&lt;title&gt;node-&amp;gt;"Sometimes we want to specify that a Conc..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M118,-3547.12C124.781,-3600.07 152.364,-3755.22 248.08,-3825 264.836,-3837.22 301.574,-3844.6 342.911,-3849.03"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="342.633,-3852.52 352.933,-3850.04 343.334,-3845.56 342.633,-3852.52"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3849.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;PartialCollectionView --&gt;
&lt;g id="node42" class="node"&gt;&lt;title&gt;pagination-PartialCollectionView&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-767" rx="129.177" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-763.3" font-family="Times,serif" font-size="14.00"&gt;pagination-PartialCollectionView&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;PartialCollectionView&amp;#45;&amp;gt;Datatype --&gt;
&lt;g id="edge66" class="edge"&gt;&lt;title&gt;pagination-PartialCollectionView-&amp;gt;Datatype&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M636.748,-758.137C814.766,-746.713 1150.99,-737.15 1229.32,-820 1247.41,-839.139 1243.69,-1741.91 1247.32,-1768 1279.92,-2002.5 1370.9,-2275.29 1400.97,-2361.47"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1397.71,-2362.76 1404.33,-2371.04 1404.32,-2360.44 1397.71,-2362.76"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="974.783" y="-782.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;An object containing links to more pages...&amp;quot; --&gt;
&lt;g id="node43" class="node"&gt;&lt;title&gt;"An object containing links to more pages..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="974.783" cy="-402" rx="172.47" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="974.783" y="-398.3" font-family="Times,serif" font-size="14.00"&gt;"An object containing links to more pages..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;PartialCollectionView&amp;#45;&amp;gt;&amp;quot;An object containing links to more pages...&amp;quot; --&gt;
&lt;g id="edge67" class="edge"&gt;&lt;title&gt;pagination-PartialCollectionView-&amp;gt;"An object containing links to more pages..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M640.393,-759.096C661.939,-754.283 683.54,-746.98 702.248,-736 832.824,-659.362 926.791,-494.836 960.311,-429.532"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="963.599,-430.787 964.993,-420.285 957.353,-427.626 963.599,-430.787"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-727.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;firstPage --&gt;
&lt;g id="node44" class="node"&gt;&lt;title&gt;pagination-firstPage&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-693" rx="81.7856" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-689.3" font-family="Times,serif" font-size="14.00"&gt;pagination-firstPage&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;firstPage&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge71" class="edge"&gt;&lt;title&gt;pagination-firstPage-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M178.133,-681.419C310.917,-658.044 617.296,-611.938 702.248,-667 756.031,-701.86 920.827,-1132.99 963.57,-1246.67"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="960.419,-1248.24 967.209,-1256.37 966.972,-1245.78 960.419,-1248.24"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-670.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;firstPage&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge68" class="edge"&gt;&lt;title&gt;pagination-firstPage-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M139.919,-710.294C166.021,-728.956 209.305,-759.197 248.08,-783 282.662,-804.229 307.075,-792.281 328.08,-827 353.679,-869.313 313.475,-1679.82 346.08,-1717 377.55,-1752.89 434.943,-1755.45 475.86,-1751.74"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.306,-1755.22 485.882,-1750.68 475.569,-1748.26 476.306,-1755.22"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-830.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;firstPage&amp;#45;&amp;gt;pagination&amp;#45;PartialCollectionView --&gt;
&lt;g id="edge70" class="edge"&gt;&lt;title&gt;pagination-firstPage-&amp;gt;pagination-PartialCollectionView&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M185.344,-702.426C227.034,-708.755 280.978,-718.111 328.08,-730 336.256,-732.064 337.904,-733.934 346.08,-736 371.057,-742.312 398.338,-747.777 423.839,-752.284"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="423.44,-755.767 433.891,-754.028 424.637,-748.87 423.44,-755.767"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-733.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A link to the first page of results.&amp;quot; --&gt;
&lt;g id="node45" class="node"&gt;&lt;title&gt;"A link to the first page of results."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-471" rx="136.476" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-467.3" font-family="Times,serif" font-size="14.00"&gt;"A link to the first page of results."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;firstPage&amp;#45;&amp;gt;&amp;quot;A link to the first page of results.&amp;quot; --&gt;
&lt;g id="edge69" class="edge"&gt;&lt;title&gt;pagination-firstPage-&amp;gt;"A link to the first page of results."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M125.119,-674.855C145.11,-634.639 194.016,-534.779 230.08,-449 238.91,-427.997 229.353,-413.978 248.08,-401 277.304,-380.748 298.035,-381.987 328.08,-401 343.871,-410.993 331.243,-427.637 346.08,-439 358.712,-448.675 373.326,-455.767 388.635,-460.92"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="387.657,-464.281 398.245,-463.885 389.72,-457.592 387.657,-464.281"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-404.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;nextPage --&gt;
&lt;g id="node46" class="node"&gt;&lt;title&gt;pagination-nextPage&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-422" rx="83.3857" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-418.3" font-family="Times,serif" font-size="14.00"&gt;pagination-nextPage&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;nextPage&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge75" class="edge"&gt;&lt;title&gt;pagination-nextPage-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M157.28,-406.491C182.982,-397.666 216.971,-387.498 248.08,-383 283.269,-377.912 293.661,-374.081 328.08,-383 336.939,-385.296 337.347,-390.261 346.08,-393 421.986,-416.807 640.546,-378.787 702.248,-429 842.958,-543.511 756.747,-649.126 801.248,-825 843.225,-990.899 928.552,-1178.9 960.931,-1247.32"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="957.856,-1249.01 965.313,-1256.53 964.177,-1246 957.856,-1249.01"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-432.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;nextPage&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge72" class="edge"&gt;&lt;title&gt;pagination-nextPage-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M126.487,-440.056C147.007,-474.629 195.205,-551.569 248.08,-606 279.234,-638.072 307.9,-627.1 328.08,-667 354.41,-719.062 307.684,-1673.07 346.08,-1717 377.495,-1752.94 434.899,-1755.49 475.834,-1751.77"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.286,-1755.24 485.86,-1750.7 475.546,-1748.28 476.286,-1755.24"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-670.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;nextPage&amp;#45;&amp;gt;pagination&amp;#45;PartialCollectionView --&gt;
&lt;g id="edge74" class="edge"&gt;&lt;title&gt;pagination-nextPage-&amp;gt;pagination-PartialCollectionView&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M170.877,-435.398C232.84,-450.658 325.498,-473.892 328.08,-477 364.946,-521.379 307.457,-693.14 346.08,-736 356.894,-748.001 370.574,-756.416 385.519,-762.205"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="384.378,-765.514 394.973,-765.479 386.669,-758.899 384.378,-765.514"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-480.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A link to the next page of results. Only...&amp;quot; --&gt;
&lt;g id="node47" class="node"&gt;&lt;title&gt;"A link to the next page of results. Only..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-366" rx="165.171" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-362.3" font-family="Times,serif" font-size="14.00"&gt;"A link to the next page of results. Only..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;nextPage&amp;#45;&amp;gt;&amp;quot;A link to the next page of results. Only...&amp;quot; --&gt;
&lt;g id="edge73" class="edge"&gt;&lt;title&gt;pagination-nextPage-&amp;gt;"A link to the next page of results. Only..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M135.718,-404.301C160.057,-383.716 203.733,-350.91 248.08,-338 282.218,-328.061 292.614,-335.468 328.08,-338 359.954,-340.276 394.535,-344.618 425.606,-349.215"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="425.154,-352.686 435.563,-350.714 426.196,-345.764 425.154,-352.686"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-341.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;paginatedProperty --&gt;
&lt;g id="node48" class="node"&gt;&lt;title&gt;pagination-paginatedProperty&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-1062" rx="115.08" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-1058.3" font-family="Times,serif" font-size="14.00"&gt;pagination-paginatedProperty&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;paginatedProperty&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge76" class="edge"&gt;&lt;title&gt;pagination-paginatedProperty-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M144.92,-1079.38C198.01,-1112 307.568,-1182.64 328.08,-1222 353.512,-1270.81 309.463,-1675.91 346.08,-1717 377.838,-1752.64 435.174,-1755.25 475.999,-1751.62"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.412,-1755.1 485.997,-1750.58 475.689,-1748.13 476.412,-1755.1"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1225.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;paginatedProperty&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge79" class="edge"&gt;&lt;title&gt;pagination-paginatedProperty-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M135.53,-1079.89C160.911,-1104.24 204.989,-1150.27 230.08,-1198 244.028,-1224.53 226.495,-1242.2 248.08,-1263 274.394,-1288.36 304.832,-1253.8 328.08,-1282 358.853,-1319.32 313.805,-1680.97 346.08,-1717 377.832,-1752.45 434.902,-1755.17 475.674,-1751.62"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.071,-1755.09 485.663,-1750.59 475.359,-1748.13 476.071,-1755.09"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1285.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;paginatedProperty&amp;#45;&amp;gt;pagination&amp;#45;PartialCollectionView --&gt;
&lt;g id="edge78" class="edge"&gt;&lt;title&gt;pagination-paginatedProperty-&amp;gt;pagination-PartialCollectionView&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M145.166,-1044.43C200.361,-1010.88 315.799,-939.519 328.08,-922 347.757,-893.93 324.232,-873.416 346.08,-847 371.038,-816.822 409.775,-797.562 444.661,-785.525"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="445.984,-788.775 454.384,-782.319 443.791,-782.127 445.984,-788.775"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-981.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;Indicates which property &amp;#45;&amp;#45; such as &amp;#39;edg...&amp;quot; --&gt;
&lt;g id="node49" class="node"&gt;&lt;title&gt;"Indicates which property -- such as 'edg..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1025" rx="167.07" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1021.3" font-family="Times,serif" font-size="14.00"&gt;"Indicates which property -- such as 'edg..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;paginatedProperty&amp;#45;&amp;gt;&amp;quot;Indicates which property &amp;#45;&amp;#45; such as &amp;#39;edg...&amp;quot; --&gt;
&lt;g id="edge77" class="edge"&gt;&lt;title&gt;pagination-paginatedProperty-&amp;gt;"Indicates which property -- such as 'edg..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M148.306,-1044.65C174.382,-1031.67 212.478,-1015 248.08,-1008 308.727,-996.078 378.21,-1000.52 432.17,-1007.84"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="432.011,-1011.35 442.403,-1009.29 432.992,-1004.42 432.011,-1011.35"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1011.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;previousPage --&gt;
&lt;g id="node50" class="node"&gt;&lt;title&gt;pagination-previousPage&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-856" rx="98.2828" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-852.3" font-family="Times,serif" font-size="14.00"&gt;pagination-previousPage&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;previousPage&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge83" class="edge"&gt;&lt;title&gt;pagination-previousPage-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M212.328,-858.54C375.928,-863.002 691.618,-872.315 702.248,-878 855.298,-959.849 939.006,-1170.5 964.927,-1246.31"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="961.707,-1247.71 968.203,-1256.08 968.344,-1245.49 961.707,-1247.71"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-881.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;previousPage&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge80" class="edge"&gt;&lt;title&gt;pagination-previousPage-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M188.535,-867.972C204.404,-873.909 219.577,-882.772 230.08,-896 275.95,-953.773 199.264,-1005.69 248.08,-1061 272.263,-1088.4 305.017,-1051.65 328.08,-1080 372.763,-1134.93 299.185,-1663.95 346.08,-1717 377.694,-1752.77 435.058,-1755.35 475.93,-1751.68"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.359,-1755.16 485.939,-1750.63 475.629,-1748.2 476.359,-1755.16"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1083.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;previousPage&amp;#45;&amp;gt;pagination&amp;#45;PartialCollectionView --&gt;
&lt;g id="edge82" class="edge"&gt;&lt;title&gt;pagination-previousPage-&amp;gt;pagination-PartialCollectionView&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M134.719,-838.255C158.73,-816.787 202.754,-781.81 248.08,-768 303.874,-751 369.04,-749.993 421.937,-753.588"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="421.774,-757.086 432.006,-754.338 422.294,-750.105 421.774,-757.086"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-771.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A link to the previous page of results. ...&amp;quot; --&gt;
&lt;g id="node51" class="node"&gt;&lt;title&gt;"A link to the previous page of results. ..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-709" rx="162.471" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-705.3" font-family="Times,serif" font-size="14.00"&gt;"A link to the previous page of results. ..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;previousPage&amp;#45;&amp;gt;&amp;quot;A link to the previous page of results. ...&amp;quot; --&gt;
&lt;g id="edge81" class="edge"&gt;&lt;title&gt;pagination-previousPage-&amp;gt;"A link to the previous page of results. ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M131.972,-837.876C154.43,-812.136 196.412,-763.299 230.08,-720 238.484,-709.191 235.894,-701.242 248.08,-695 277.278,-680.044 354.197,-685.141 419.297,-693.092"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="418.863,-696.565 429.221,-694.337 419.735,-689.62 418.863,-696.565"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-698.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;view --&gt;
&lt;g id="node52" class="node"&gt;&lt;title&gt;pagination-view&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-923" rx="67.6881" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-919.3" font-family="Times,serif" font-size="14.00"&gt;pagination-view&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;view&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge86" class="edge"&gt;&lt;title&gt;pagination-view-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M157.43,-937.161C183.188,-945.329 217.183,-954.954 248.08,-960 347.814,-976.29 610.616,-940.387 702.248,-983 828.332,-1041.63 923.977,-1187.9 959.13,-1247.8"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="956.21,-1249.74 964.247,-1256.64 962.269,-1246.23 956.21,-1249.74"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-986.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;view&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge84" class="edge"&gt;&lt;title&gt;pagination-view-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M139.716,-940.095C165.635,-960.032 206.622,-995.355 230.08,-1035 245.126,-1060.43 228.562,-1076.82 248.08,-1099 273.599,-1128.01 306.27,-1101.11 328.08,-1133 364.729,-1186.59 303.022,-1668.41 346.08,-1717 377.74,-1752.72 435.095,-1755.32 475.952,-1751.66"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.376,-1755.14 485.958,-1750.62 475.648,-1748.18 476.376,-1755.14"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1136.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;view&amp;#45;&amp;gt;pagination&amp;#45;PartialCollectionView --&gt;
&lt;g id="edge87" class="edge"&gt;&lt;title&gt;pagination-view-&amp;gt;pagination-PartialCollectionView&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M157.354,-908.95C179.074,-901.452 206.097,-891.948 230.08,-883 315.557,-851.108 414.004,-811.557 472.275,-787.849"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="473.683,-791.054 481.624,-784.041 471.043,-784.572 473.683,-791.054"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-878.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;Appears on a response that returns more ...&amp;quot; --&gt;
&lt;g id="node53" class="node"&gt;&lt;title&gt;"Appears on a response that returns more ..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-920" rx="171.67" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-916.3" font-family="Times,serif" font-size="14.00"&gt;"Appears on a response that returns more ..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- pagination&amp;#45;view&amp;#45;&amp;gt;&amp;quot;Appears on a response that returns more ...&amp;quot; --&gt;
&lt;g id="edge85" class="edge"&gt;&lt;title&gt;pagination-view-&amp;gt;"Appears on a response that returns more ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M174.73,-914.349C197.569,-911.387 223.993,-908.454 248.08,-907 292.355,-904.327 340.667,-905.299 384.275,-907.625"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="384.195,-911.126 394.376,-908.192 384.588,-904.137 384.195,-911.126"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-910.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- process --&gt;
&lt;g id="node54" class="node"&gt;&lt;title&gt;process&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-283" rx="37.0935" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-279.3" font-family="Times,serif" font-size="14.00"&gt;process&lt;/text&gt;
&lt;/g&gt;
&lt;!-- process&amp;#45;&amp;gt;Resource --&gt;
&lt;g id="edge91" class="edge"&gt;&lt;title&gt;process-&amp;gt;Resource&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M150.22,-277.122C241.718,-262.655 499.063,-230.315 702.248,-285 751.275,-298.195 752.352,-328.326 801.248,-342 905.104,-371.043 1229.8,-362.721 1357.96,-358.116"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="1358.43,-361.602 1368.3,-357.738 1358.18,-354.606 1358.43,-361.602"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="751.748" y="-339.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- process&amp;#45;&amp;gt;Source --&gt;
&lt;g id="edge90" class="edge"&gt;&lt;title&gt;process-&amp;gt;Source&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.993,-271.159C169.257,-260.213 210.597,-244.539 248.08,-237 328.286,-220.869 424.063,-218.702 478.834,-219.042"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="478.865,-222.542 488.898,-219.136 478.931,-215.543 478.865,-222.542"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-240.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- process&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge88" class="edge"&gt;&lt;title&gt;process-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M138.124,-297.374C165.003,-316.224 209.36,-352.002 230.08,-395 246.859,-429.82 222.574,-538.958 248.08,-568 272.194,-595.459 305.192,-558.51 328.08,-587 367.401,-635.948 304.788,-1669.7 346.08,-1717 377.473,-1752.96 434.881,-1755.5 475.823,-1751.78"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.278,-1755.25 485.852,-1750.71 475.537,-1748.29 476.278,-1755.25"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-590.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A property of a source, indicating a com...&amp;quot; --&gt;
&lt;g id="node55" class="node"&gt;&lt;title&gt;"A property of a source, indicating a com..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-312" rx="170.07" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-308.3" font-family="Times,serif" font-size="14.00"&gt;"A property of a source, indicating a com..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- process&amp;#45;&amp;gt;&amp;quot;A property of a source, indicating a com...&amp;quot; --&gt;
&lt;g id="edge89" class="edge"&gt;&lt;title&gt;process-&amp;gt;"A property of a source, indicating a com..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M151.813,-285.548C200.937,-289.047 292.277,-295.554 372.073,-301.238"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="372.021,-304.743 382.244,-301.962 372.518,-297.76 372.021,-304.743"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-301.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- rel --&gt;
&lt;g id="node56" class="node"&gt;&lt;title&gt;rel&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-3950" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-3946.3" font-family="Times,serif" font-size="14.00"&gt;rel&lt;/text&gt;
&lt;/g&gt;
&lt;!-- rel&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge94" class="edge"&gt;&lt;title&gt;rel-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M137.193,-3939.4C162.985,-3926.72 208.09,-3905.27 248.08,-3890 282.881,-3876.71 305.425,-3894.57 328.08,-3865 358.849,-3824.84 329.129,-3457.67 346.08,-3410 378.418,-3319.05 459.097,-3234.13 499.429,-3195.63"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="502.052,-3197.97 506.931,-3188.57 497.252,-3192.88 502.052,-3197.97"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3893.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- rel&amp;#45;&amp;gt;Feature --&gt;
&lt;g id="edge95" class="edge"&gt;&lt;title&gt;rel-&amp;gt;Feature&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.956,-3948.47C192.563,-3944.94 301.875,-3934.49 328.08,-3909 354.515,-3883.29 320.68,-3854.74 346.08,-3828 379.731,-3792.58 436.506,-3782 476.688,-3779.22"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.988,-3782.71 486.778,-3778.66 476.599,-3775.72 476.988,-3782.71"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3938.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- rel&amp;#45;&amp;gt;Relation --&gt;
&lt;g id="edge96" class="edge"&gt;&lt;title&gt;rel-&amp;gt;Relation&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M138.427,-3959.09C162.139,-3969.2 200.203,-3986.78 230.08,-4007 238.943,-4013 238.075,-4019.2 248.08,-4023 324.354,-4052 421.355,-4042.29 477.437,-4032.62"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="478.195,-4036.04 487.418,-4030.83 476.956,-4029.15 478.195,-4036.04"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-4043.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- rel&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge92" class="edge"&gt;&lt;title&gt;rel-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M116.183,-3931.98C117.706,-3868.94 131.626,-3656.32 248.08,-3548 274.916,-3523.04 305.374,-3556.77 328.08,-3528 357.612,-3490.58 318.876,-1851.14 346.08,-1812 374.727,-1770.78 432.043,-1754.54 473.731,-1748.14"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.277,-1751.6 483.699,-1746.75 473.311,-1744.67 474.277,-1751.6"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3551.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;Links to the kind of relationship that h...&amp;quot; --&gt;
&lt;g id="node57" class="node"&gt;&lt;title&gt;"Links to the kind of relationship that h..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-4121" rx="162.471" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-4117.3" font-family="Times,serif" font-size="14.00"&gt;"Links to the kind of relationship that h..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- rel&amp;#45;&amp;gt;&amp;quot;Links to the kind of relationship that h...&amp;quot; --&gt;
&lt;g id="edge93" class="edge"&gt;&lt;title&gt;rel-&amp;gt;"Links to the kind of relationship that h..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M140.872,-3955.8C167.016,-3963.2 207.454,-3978.61 230.08,-4007 251.177,-4033.47 223.045,-4058.22 248.08,-4081 266.275,-4097.56 313.608,-4107.27 363.984,-4112.97"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="363.775,-4116.46 374.092,-4114.05 364.523,-4109.5 363.775,-4116.46"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-4110.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- predicate --&gt;
&lt;g id="node58" class="node"&gt;&lt;title&gt;predicate&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-3969" rx="42.7926" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3965.3" font-family="Times,serif" font-size="14.00"&gt;predicate&lt;/text&gt;
&lt;/g&gt;
&lt;!-- rel&amp;#45;&amp;gt;predicate --&gt;
&lt;g id="edge97" class="edge"&gt;&lt;title&gt;rel-&amp;gt;predicate&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.127,-3951.22C208.218,-3954.3 383.226,-3962.47 471.173,-3966.57"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="471.046,-3970.07 481.198,-3967.04 471.372,-3963.08 471.046,-3970.07"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3962.8" font-family="Times,serif" font-size="14.00"&gt;subPropertyOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- related --&gt;
&lt;g id="node59" class="node"&gt;&lt;title&gt;related&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-1225" rx="34.394" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-1221.3" font-family="Times,serif" font-size="14.00"&gt;related&lt;/text&gt;
&lt;/g&gt;
&lt;!-- related&amp;#45;&amp;gt;Query --&gt;
&lt;g id="edge100" class="edge"&gt;&lt;title&gt;related-&amp;gt;Query&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M137.919,-1211.51C163.315,-1196.72 206.983,-1173.9 248.08,-1165 282.83,-1157.47 292.552,-1163.58 328.08,-1165 494.777,-1171.67 538.16,-1164.88 702.248,-1195 788.263,-1210.79 886.04,-1242.85 937.567,-1260.9"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="936.644,-1264.29 947.239,-1264.31 938.974,-1257.68 936.644,-1264.29"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="524.164" y="-1198.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- related&amp;#45;&amp;gt;RelatedNode --&gt;
&lt;g id="edge101" class="edge"&gt;&lt;title&gt;related-&amp;gt;RelatedNode&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M148.608,-1229.58C174.994,-1235.12 210.84,-1247.15 230.08,-1273 274.655,-1332.88 199.722,-1383.13 248.08,-1440 274.652,-1471.25 385.506,-1484.76 458.123,-1490.34"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="457.873,-1493.83 468.103,-1491.08 458.388,-1486.85 457.873,-1493.83"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1476.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- related&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge98" class="edge"&gt;&lt;title&gt;related-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M146.81,-1232.5C171.429,-1239.7 205.742,-1252.55 230.08,-1273 241.405,-1282.52 237.827,-1290.34 248.08,-1301 278.158,-1332.29 307.081,-1319.02 328.08,-1357 347.457,-1392.05 319.231,-1687.28 346.08,-1717 377.984,-1752.31 435.024,-1755.06 475.748,-1751.55"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="476.128,-1755.03 485.725,-1750.54 475.423,-1748.06 476.128,-1755.03"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1360.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A list returned when you make a &amp;#39;/relate...&amp;quot; --&gt;
&lt;g id="node60" class="node"&gt;&lt;title&gt;"A list returned when you make a '/relate..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1079" rx="168.17" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1075.3" font-family="Times,serif" font-size="14.00"&gt;"A list returned when you make a '/relate..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- related&amp;#45;&amp;gt;&amp;quot;A list returned when you make a &amp;#39;/relate...&amp;quot; --&gt;
&lt;g id="edge99" class="edge"&gt;&lt;title&gt;related-&amp;gt;"A list returned when you make a '/relate..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M132.198,-1209.09C156.071,-1184.89 201.065,-1136.63 230.08,-1089 240.858,-1071.31 230.832,-1057.48 248.08,-1046 277.68,-1026.3 292.983,-1040.3 328.08,-1046 336.403,-1047.35 337.882,-1050.02 346.08,-1052 364.616,-1056.47 384.432,-1060.34 403.85,-1063.66"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="403.521,-1067.15 413.959,-1065.34 404.669,-1060.24 403.521,-1067.15"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1049.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sense_label --&gt;
&lt;g id="node61" class="node"&gt;&lt;title&gt;sense_label&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-1886" rx="51.1914" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-1882.3" font-family="Times,serif" font-size="14.00"&gt;sense_label&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sense_label&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge104" class="edge"&gt;&lt;title&gt;sense_label-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M132.83,-1903.32C155.571,-1927.03 197.108,-1971.18 230.08,-2011 238.583,-2021.27 236.928,-2027.69 248.08,-2035 278.643,-2055.03 304.989,-2025.67 328.08,-2054 369.871,-2105.27 311.755,-2592.46 346.08,-2649 376.897,-2699.76 443.931,-2726.6 486.111,-2739.01"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.429,-2742.46 496.003,-2741.79 487.324,-2735.72 485.429,-2742.46"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2057.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sense_label&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge102" class="edge"&gt;&lt;title&gt;sense_label-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M150.302,-1872.74C175.525,-1861.39 208.969,-1842.78 230.08,-1817 245.043,-1798.73 229.339,-1781.37 248.08,-1767 282.169,-1740.85 403.443,-1740.05 473.057,-1741.91"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="473.251,-1745.42 483.35,-1742.22 473.458,-1738.42 473.251,-1745.42"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1770.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sense_label&amp;#45;&amp;gt;string --&gt;
&lt;g id="edge105" class="edge"&gt;&lt;title&gt;sense_label-&amp;gt;string&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M166.381,-1883.99C221.567,-1882.92 305.318,-1885 328.08,-1906 361.916,-1937.21 319.971,-1970.09 346.08,-2008 380.248,-2057.62 445.922,-2087.78 486.977,-2102.65"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="486.004,-2106.01 496.599,-2106.01 488.316,-2099.41 486.004,-2106.01"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1909.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A URL&amp;#45;safe string that can distinguish m...&amp;quot; --&gt;
&lt;g id="node62" class="node"&gt;&lt;title&gt;"A URL-safe string that can distinguish m..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1885" rx="172.769" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1881.3" font-family="Times,serif" font-size="14.00"&gt;"A URL-safe string that can distinguish m..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sense_label&amp;#45;&amp;gt;&amp;quot;A URL&amp;#45;safe string that can distinguish m...&amp;quot; --&gt;
&lt;g id="edge103" class="edge"&gt;&lt;title&gt;sense_label-&amp;gt;"A URL-safe string that can distinguish m..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M161.41,-1878.27C186.812,-1874.33 219.111,-1869.97 248.08,-1868 297.885,-1864.62 352.783,-1866.82 400.351,-1870.61"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="400.131,-1874.1 410.386,-1871.44 400.709,-1867.13 400.131,-1874.1"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1871.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- site --&gt;
&lt;g id="node63" class="node"&gt;&lt;title&gt;site&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-2038" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-2034.3" font-family="Times,serif" font-size="14.00"&gt;site&lt;/text&gt;
&lt;/g&gt;
&lt;!-- site&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge108" class="edge"&gt;&lt;title&gt;site-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M133.093,-2051.57C159.47,-2073.74 209.285,-2120.52 230.08,-2173 243.974,-2208.07 224.599,-2482.48 248.08,-2512 271.11,-2540.95 303.582,-2507.28 328.08,-2535 362.046,-2573.44 316.745,-2606.92 346.08,-2649 379.855,-2697.45 445.355,-2724.9 486.532,-2738.08"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.603,-2741.45 496.19,-2741.05 487.661,-2734.76 485.603,-2741.45"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2538.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- site&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge106" class="edge"&gt;&lt;title&gt;site-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M133.047,-2024.08C158.003,-2002.75 204.362,-1959.54 230.08,-1913 244.579,-1886.76 227.873,-1870.14 248.08,-1848 307.456,-1782.94 411.733,-1758.34 473.428,-1749.21"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.271,-1752.63 483.691,-1747.78 473.303,-1745.69 474.271,-1752.63"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1851.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- site&amp;#45;&amp;gt;string --&gt;
&lt;g id="edge109" class="edge"&gt;&lt;title&gt;site-&amp;gt;string&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M140.184,-2045.27C166.513,-2052.99 209.989,-2065.14 248.08,-2073 331.426,-2090.2 430.398,-2103.15 483.974,-2109.55"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="483.724,-2113.05 494.066,-2110.74 484.545,-2106.09 483.724,-2113.05"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2090.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;ConceptNet has &amp;#39;ExternalURL&amp;#39; edges that ...&amp;quot; --&gt;
&lt;g id="node64" class="node"&gt;&lt;title&gt;"ConceptNet has 'ExternalURL' edges that ..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1981" rx="174.669" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1977.3" font-family="Times,serif" font-size="14.00"&gt;"ConceptNet has 'ExternalURL' edges that ..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- site&amp;#45;&amp;gt;&amp;quot;ConceptNet has &amp;#39;ExternalURL&amp;#39; edges that ...&amp;quot; --&gt;
&lt;g id="edge107" class="edge"&gt;&lt;title&gt;site-&amp;gt;"ConceptNet has 'ExternalURL' edges that ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M136.248,-2026.41C161.468,-2012.67 206.369,-1990.56 248.08,-1982 287.003,-1974.01 329.682,-1971.11 369.563,-1970.84"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="369.644,-1974.34 379.639,-1970.82 369.633,-1967.34 369.644,-1974.34"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1985.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sources --&gt;
&lt;g id="node65" class="node"&gt;&lt;title&gt;sources&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-1454" rx="37.0935" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-1450.3" font-family="Times,serif" font-size="14.00"&gt;sources&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sources&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge112" class="edge"&gt;&lt;title&gt;sources-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.533,-1466.68C169.081,-1481.96 211.523,-1510.46 230.08,-1549 250.522,-1591.46 219.552,-2359.5 248.08,-2397 270.553,-2426.55 305.524,-2391.52 328.08,-2421 373.398,-2480.23 305.083,-3029.7 346.08,-3092 377.392,-3139.59 443.961,-3160.04 485.968,-3168.47"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.35,-3171.91 495.824,-3170.32 486.641,-3165.03 485.35,-3171.91"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2424.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sources&amp;#45;&amp;gt;Source --&gt;
&lt;g id="edge113" class="edge"&gt;&lt;title&gt;sources-&amp;gt;Source&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M136.415,-1439.12C163.678,-1417.82 210.822,-1375.79 230.08,-1327 248.237,-1281 217.479,-475.851 248.08,-437 270.825,-408.122 303.694,-443.507 328.08,-416 367.066,-372.024 309.227,-330.779 346.08,-285 378.453,-244.785 438.105,-229.45 479.164,-223.603"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="479.705,-227.062 489.174,-222.311 478.809,-220.12 479.705,-227.062"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-440.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sources&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge110" class="edge"&gt;&lt;title&gt;sources-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M138.481,-1467.95C163.667,-1484.58 204.361,-1514.5 230.08,-1549 242.217,-1565.28 232.773,-1577.65 248.08,-1591 275.872,-1615.24 303.299,-1585.69 328.08,-1613 359.603,-1647.74 312.578,-1684.16 346.08,-1717 379.587,-1749.84 435.103,-1753.35 475.05,-1750.7"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="475.42,-1754.18 485.103,-1749.88 474.852,-1747.2 475.42,-1754.18"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1616.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;The &amp;#39;sources&amp;#39; of an edge are a set of in...&amp;quot; --&gt;
&lt;g id="node66" class="node"&gt;&lt;title&gt;"The 'sources' of an edge are a set of in..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1386" rx="161.372" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1382.3" font-family="Times,serif" font-size="14.00"&gt;"The 'sources' of an edge are a set of in..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- sources&amp;#45;&amp;gt;&amp;quot;The &amp;#39;sources&amp;#39; of an edge are a set of in...&amp;quot; --&gt;
&lt;g id="edge111" class="edge"&gt;&lt;title&gt;sources-&amp;gt;"The 'sources' of an edge are a set of in..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M137.238,-1439.28C162.352,-1422.81 206.097,-1397.12 248.08,-1387 293.724,-1375.99 344.882,-1373.29 390.586,-1374.14"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="390.774,-1377.65 400.857,-1374.4 390.946,-1370.65 390.774,-1377.65"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1390.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- start --&gt;
&lt;g id="node67" class="node"&gt;&lt;title&gt;start&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-3391" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-3387.3" font-family="Times,serif" font-size="14.00"&gt;start&lt;/text&gt;
&lt;/g&gt;
&lt;!-- start&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge116" class="edge"&gt;&lt;title&gt;start-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.186,-3385.51C193.661,-3373.97 311.363,-3347.52 328.08,-3339 400.649,-3302.02 469.477,-3233.21 502.598,-3197.25"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="505.343,-3199.43 509.487,-3189.68 500.167,-3194.72 505.343,-3199.43"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3363.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- start&amp;#45;&amp;gt;Feature --&gt;
&lt;g id="edge117" class="edge"&gt;&lt;title&gt;start-&amp;gt;Feature&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.086,-3396.15C167.816,-3403.05 209.136,-3418.08 230.08,-3448 270.356,-3505.54 201.458,-3552.47 248.08,-3605 272.338,-3632.33 303.474,-3596.98 328.08,-3624 366.76,-3666.48 305.693,-3711.14 346.08,-3752 380.169,-3786.49 438.428,-3788.98 478.767,-3785.66"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="479.252,-3789.13 488.866,-3784.68 478.574,-3782.16 479.252,-3789.13"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3627.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- start&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge118" class="edge"&gt;&lt;title&gt;start-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M118.972,-3373.07C128.253,-3321.9 161.652,-3173.63 248.08,-3092 275.686,-3065.93 305.483,-3092.52 328.08,-3062 366.105,-3010.64 302.94,-2822.14 346.08,-2775 380.746,-2737.11 444.368,-2736.87 485.168,-2741.47"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="484.907,-2744.96 495.27,-2742.76 485.794,-2738.02 484.907,-2744.96"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3095.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- start&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge114" class="edge"&gt;&lt;title&gt;start-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M123.521,-3373.84C144.75,-3324.22 205.428,-3175.84 230.08,-3046 236.743,-3010.9 225.153,-2752.4 248.08,-2725 271.533,-2696.97 305.133,-2734.44 328.08,-2706 359.272,-2667.34 317.534,-1852.66 346.08,-1812 374.838,-1771.04 431.857,-1754.75 473.449,-1748.27"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="473.989,-1751.73 483.398,-1746.86 473.006,-1744.8 473.989,-1751.73"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2728.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- start&amp;#45;&amp;gt;&amp;quot;Links to the node that this edge points ...&amp;quot; --&gt;
&lt;g id="edge115" class="edge"&gt;&lt;title&gt;start-&amp;gt;"Links to the node that this edge points ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M140.883,-3396.29C167.436,-3403.32 208.602,-3418.46 230.08,-3448 261.537,-3491.26 211.498,-3527.97 248.08,-3567 254.538,-3573.89 353.471,-3594.33 430.86,-3609.45"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="430.659,-3612.98 441.144,-3611.45 431.997,-3606.1 430.659,-3612.98"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3591.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- subject --&gt;
&lt;g id="node68" class="node"&gt;&lt;title&gt;subject&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-3437" rx="35.9954" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-3433.3" font-family="Times,serif" font-size="14.00"&gt;subject&lt;/text&gt;
&lt;/g&gt;
&lt;!-- start&amp;#45;&amp;gt;subject --&gt;
&lt;g id="edge119" class="edge"&gt;&lt;title&gt;start-&amp;gt;subject&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M141.235,-3396.36C167.718,-3401.8 210.652,-3410.11 248.08,-3415 328.861,-3425.54 423.694,-3431.79 478.271,-3434.79"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="478.134,-3438.29 488.307,-3435.33 478.51,-3431.3 478.134,-3438.29"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3426.8" font-family="Times,serif" font-size="14.00"&gt;subPropertyOf&lt;/text&gt;
&lt;/g&gt;
&lt;!-- surfaceText --&gt;
&lt;g id="node69" class="node"&gt;&lt;title&gt;surfaceText&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-2538" rx="51.9908" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-2534.3" font-family="Times,serif" font-size="14.00"&gt;surfaceText&lt;/text&gt;
&lt;/g&gt;
&lt;!-- surfaceText&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge122" class="edge"&gt;&lt;title&gt;surfaceText-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M147.523,-2552.21C174.752,-2566.38 212.437,-2590.95 230.08,-2625 254.94,-2672.98 213.627,-3069.37 248.08,-3111 249.045,-3112.17 412.58,-3149.1 487.013,-3165.87"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="486.374,-3169.31 496.899,-3168.09 487.912,-3162.48 486.374,-3169.31"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3131.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- surfaceText&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge120" class="edge"&gt;&lt;title&gt;surfaceText-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M135.57,-2521.21C162.303,-2496.89 209.331,-2449.06 230.08,-2397 248.978,-2349.58 214.883,-2206.78 248.08,-2168 271.846,-2140.24 304.663,-2177.06 328.08,-2149 376.134,-2091.42 301.971,-1872.65 346.08,-1812 375.515,-1771.52 432.407,-1755.14 473.784,-1748.51"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.292,-1751.97 483.679,-1747.06 473.277,-1745.05 474.292,-1751.97"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2171.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- surfaceText&amp;#45;&amp;gt;string --&gt;
&lt;g id="edge123" class="edge"&gt;&lt;title&gt;surfaceText-&amp;gt;string&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M135.444,-2521.15C162.025,-2496.78 208.876,-2448.87 230.08,-2397 245.875,-2358.36 221.396,-2242.11 248.08,-2210 271.726,-2181.55 292.95,-2198.6 328.08,-2187 384.975,-2168.21 449.945,-2143.16 488.703,-2127.83"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="490.438,-2130.9 498.441,-2123.96 487.855,-2124.4 490.438,-2130.9"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2213.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;The natural language text that correspon...&amp;quot; --&gt;
&lt;g id="node70" class="node"&gt;&lt;title&gt;"The natural language text that correspon..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-2568" rx="168.97" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2564.3" font-family="Times,serif" font-size="14.00"&gt;"The natural language text that correspon..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- surfaceText&amp;#45;&amp;gt;&amp;quot;The natural language text that correspon...&amp;quot; --&gt;
&lt;g id="edge121" class="edge"&gt;&lt;title&gt;surfaceText-&amp;gt;"The natural language text that correspon..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M163.628,-2544.58C188.708,-2547.84 220.012,-2551.59 248.08,-2554 282.553,-2556.96 319.516,-2559.37 354.806,-2561.3"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="355.03,-2564.81 365.203,-2561.85 355.405,-2557.82 355.03,-2564.81"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2563.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- symmetric --&gt;
&lt;g id="node71" class="node"&gt;&lt;title&gt;symmetric&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-2880" rx="48.9926" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-2876.3" font-family="Times,serif" font-size="14.00"&gt;symmetric&lt;/text&gt;
&lt;/g&gt;
&lt;!-- symmetric&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge126" class="edge"&gt;&lt;title&gt;symmetric-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M139.949,-2895.75C166.902,-2914.97 209.622,-2950.11 230.08,-2992 245.49,-3023.56 222.958,-3124.46 248.08,-3149 264.68,-3165.21 413.442,-3171.2 485.019,-3173.16"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.316,-3176.67 495.403,-3173.43 485.498,-3169.67 485.316,-3176.67"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3167.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- symmetric&amp;#45;&amp;gt;Relation --&gt;
&lt;g id="edge127" class="edge"&gt;&lt;title&gt;symmetric-&amp;gt;Relation&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M140.226,-2895.62C167.438,-2914.71 210.401,-2949.74 230.08,-2992 252,-3039.08 214.333,-3185.53 248.08,-3225 271.827,-3252.78 305.079,-3215.6 328.08,-3244 354.382,-3276.47 318.47,-3964.63 346.08,-3996 377.806,-4032.05 435.687,-4034.43 476.627,-4030.65"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="477.077,-4034.12 486.645,-4029.57 476.328,-4027.16 477.077,-4034.12"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-3247.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- symmetric&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge124" class="edge"&gt;&lt;title&gt;symmetric-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M129.656,-2862.73C154.975,-2829.47 208.667,-2753.21 230.08,-2679 242.199,-2637 220.993,-2320.31 248.08,-2286 271.004,-2256.96 305.24,-2292.1 328.08,-2263 359.04,-2223.55 316.857,-1852.76 346.08,-1812 375.241,-1771.33 432.185,-1754.98 473.649,-1748.41"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.169,-1751.87 483.565,-1746.98 473.168,-1744.94 474.169,-1751.87"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2289.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A relation or edge can be &amp;#39;symmetric&amp;#39;. W...&amp;quot; --&gt;
&lt;g id="node72" class="node"&gt;&lt;title&gt;"A relation or edge can be 'symmetric'. W..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-2856" rx="172.769" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2852.3" font-family="Times,serif" font-size="14.00"&gt;"A relation or edge can be 'symmetric'. W..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- symmetric&amp;#45;&amp;gt;&amp;quot;A relation or edge can be &amp;#39;symmetric&amp;#39;. W...&amp;quot; --&gt;
&lt;g id="edge125" class="edge"&gt;&lt;title&gt;symmetric-&amp;gt;"A relation or edge can be 'symmetric'. W..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M163.539,-2877.2C212.52,-2874.31 291.63,-2869.65 363.196,-2865.43"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="363.464,-2868.92 373.24,-2864.84 363.052,-2861.93 363.464,-2868.92"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2874.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- boolean --&gt;
&lt;g id="node73" class="node"&gt;&lt;title&gt;boolean&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-2802" rx="38.1938" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2798.3" font-family="Times,serif" font-size="14.00"&gt;boolean&lt;/text&gt;
&lt;/g&gt;
&lt;!-- symmetric&amp;#45;&amp;gt;boolean --&gt;
&lt;g id="edge128" class="edge"&gt;&lt;title&gt;symmetric-&amp;gt;boolean&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M156.131,-2870.27C182.268,-2864 217.145,-2855.79 248.08,-2849 291.5,-2839.47 302.315,-2836.8 346.08,-2829 390.387,-2821.11 441.189,-2813.51 476.985,-2808.4"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="477.717,-2811.83 487.126,-2806.96 476.733,-2804.9 477.717,-2811.83"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2852.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- term --&gt;
&lt;g id="node74" class="node"&gt;&lt;title&gt;term&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-2652" rx="27.0966" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-2648.3" font-family="Times,serif" font-size="14.00"&gt;term&lt;/text&gt;
&lt;/g&gt;
&lt;!-- term&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge131" class="edge"&gt;&lt;title&gt;term-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M131.004,-2667.07C153.869,-2688.93 199.944,-2728.5 248.08,-2744 329.061,-2770.08 430.528,-2761.8 484.766,-2754.35"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.565,-2757.78 494.964,-2752.89 484.567,-2750.85 485.565,-2757.78"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2762.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- term&amp;#45;&amp;gt;Node --&gt;
&lt;g id="edge132" class="edge"&gt;&lt;title&gt;term-&amp;gt;Node&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.004,-2655.9C182.154,-2662.12 261.617,-2675.22 328.08,-2691 384.491,-2704.39 448.857,-2724.08 487.726,-2736.46"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="486.921,-2739.87 497.512,-2739.59 489.056,-2733.21 486.921,-2739.87"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2694.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- term&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge129" class="edge"&gt;&lt;title&gt;term-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M138.331,-2642.27C165.424,-2629.1 210.001,-2602.83 230.08,-2565 263.156,-2502.68 204.055,-2303.14 248.08,-2248 271.163,-2219.09 305.187,-2254.06 328.08,-2225 356.502,-2188.92 319.247,-1849.28 346.08,-1812 375.316,-1771.38 432.245,-1755.02 473.686,-1748.44"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.203,-1751.9 483.596,-1747 473.197,-1744.97 474.203,-1751.9"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2251.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;The &amp;#39;term&amp;#39; property links a node to its ...&amp;quot; --&gt;
&lt;g id="node75" class="node"&gt;&lt;title&gt;"The 'term' property links a node to its ..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-2622" rx="161.372" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-2618.3" font-family="Times,serif" font-size="14.00"&gt;"The 'term' property links a node to its ..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- term&amp;#45;&amp;gt;&amp;quot;The &amp;#39;term&amp;#39; property links a node to its ...&amp;quot; --&gt;
&lt;g id="edge130" class="edge"&gt;&lt;title&gt;term-&amp;gt;"The 'term' property links a node to its ..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M139.48,-2643.33C165.561,-2634.17 209.165,-2620.35 248.08,-2615 294.17,-2608.66 345.002,-2608.16 390.298,-2609.97"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="390.331,-2613.48 400.475,-2610.42 390.639,-2606.48 390.331,-2613.48"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2618.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- weight --&gt;
&lt;g id="node76" class="node"&gt;&lt;title&gt;weight&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-1576" rx="34.394" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-1572.3" font-family="Times,serif" font-size="14.00"&gt;weight&lt;/text&gt;
&lt;/g&gt;
&lt;!-- weight&amp;#45;&amp;gt;Edge --&gt;
&lt;g id="edge135" class="edge"&gt;&lt;title&gt;weight-&amp;gt;Edge&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M130.385,-1592.57C156.155,-1623.53 209.513,-1693.34 230.08,-1763 240.734,-1799.08 224.36,-2410.79 248.08,-2440 271.118,-2468.37 305.015,-2430.65 328.08,-2459 372.488,-2513.58 307.356,-3033.25 346.08,-3092 377.43,-3139.56 443.987,-3160.02 485.982,-3168.46"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="485.36,-3171.9 495.835,-3170.31 486.653,-3165.03 485.36,-3171.9"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-2462.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- weight&amp;#45;&amp;gt;RelatedNode --&gt;
&lt;g id="edge136" class="edge"&gt;&lt;title&gt;weight-&amp;gt;RelatedNode&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M149.771,-1576.24C202.069,-1576 299.661,-1572.92 328.08,-1554 341.986,-1544.74 332.399,-1530.59 346.08,-1521 378.413,-1498.34 422.233,-1491.51 458.192,-1490.39"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="458.653,-1493.88 468.593,-1490.21 458.536,-1486.88 458.653,-1493.88"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1575.8" font-family="Times,serif" font-size="14.00"&gt;domain&lt;/text&gt;
&lt;/g&gt;
&lt;!-- weight&amp;#45;&amp;gt;Property --&gt;
&lt;g id="edge133" class="edge"&gt;&lt;title&gt;weight-&amp;gt;Property&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.71,-1586.92C198.147,-1609.69 321.261,-1660.78 328.08,-1668 344.008,-1684.87 328.113,-1702.32 346.08,-1717 381.783,-1746.17 435.523,-1750.61 474.434,-1749.18"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="474.678,-1752.67 484.488,-1748.67 474.323,-1745.68 474.678,-1752.67"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1671.8" font-family="Times,serif" font-size="14.00"&gt;type&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;A numerical value indicating how strongl...&amp;quot; --&gt;
&lt;g id="node77" class="node"&gt;&lt;title&gt;"A numerical value indicating how strongl..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-1440" rx="173.569" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1436.3" font-family="Times,serif" font-size="14.00"&gt;"A numerical value indicating how strongl..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- weight&amp;#45;&amp;gt;&amp;quot;A numerical value indicating how strongl...&amp;quot; --&gt;
&lt;g id="edge134" class="edge"&gt;&lt;title&gt;weight-&amp;gt;"A numerical value indicating how strongl..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M138.618,-1562.76C164.319,-1546.58 205.864,-1516.88 230.08,-1481 244.703,-1459.33 226.954,-1440.4 248.08,-1425 276.261,-1404.46 361.598,-1412.19 429.83,-1422.64"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="429.342,-1426.11 439.764,-1424.2 430.428,-1419.19 429.342,-1426.11"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1428.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;!-- float --&gt;
&lt;g id="node78" class="node"&gt;&lt;title&gt;float&lt;/title&gt;
&lt;ellipse fill="none" stroke="#558855" cx="524.164" cy="-1548" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-1544.3" font-family="Times,serif" font-size="14.00"&gt;float&lt;/text&gt;
&lt;/g&gt;
&lt;!-- weight&amp;#45;&amp;gt;float --&gt;
&lt;g id="edge137" class="edge"&gt;&lt;title&gt;weight-&amp;gt;float&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M134.773,-1561.13C159.186,-1542.8 203.984,-1512.65 248.08,-1501 282.456,-1491.92 295.6,-1486.53 328.08,-1501 339.004,-1505.87 335.554,-1515.32 346.08,-1521 390.299,-1544.85 449.23,-1549.35 486.695,-1549.43"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="487.159,-1552.92 497.128,-1549.33 487.097,-1545.92 487.159,-1552.92"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-1504.8" font-family="Times,serif" font-size="14.00"&gt;range&lt;/text&gt;
&lt;/g&gt;
&lt;!-- &amp;quot;This section defines the types and prope...&amp;quot; --&gt;
&lt;g id="node79" class="node"&gt;&lt;title&gt;"This section defines the types and prope..."&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" stroke-width="0" cx="524.164" cy="-4229" rx="168.17" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="524.164" y="-4225.3" font-family="Times,serif" font-size="14.00"&gt;"This section defines the types and prope..."&lt;/text&gt;
&lt;/g&gt;
&lt;!-- _ --&gt;
&lt;g id="node80" class="node"&gt;&lt;title&gt;_&lt;/title&gt;
&lt;ellipse fill="none" stroke="black" cx="115.04" cy="-4229" rx="27" ry="18"&gt;&lt;/ellipse&gt;
&lt;text text-anchor="middle" x="115.04" y="-4225.3" font-family="Times,serif" font-size="14.00"&gt;_&lt;/text&gt;
&lt;/g&gt;
&lt;!-- _&amp;#45;&amp;gt;&amp;quot;This section defines the types and prope...&amp;quot; --&gt;
&lt;g id="edge138" class="edge"&gt;&lt;title&gt;_-&amp;gt;"This section defines the types and prope..."&lt;/title&gt;
&lt;path fill="none" stroke="black" d="M142.127,-4229C183.361,-4229 266.99,-4229 345.421,-4229"&gt;&lt;/path&gt;
&lt;polygon fill="black" stroke="black" points="345.452,-4232.5 355.452,-4229 345.452,-4225.5 345.452,-4232.5"&gt;&lt;/polygon&gt;
&lt;text text-anchor="middle" x="288.08" y="-4232.8" font-family="Times,serif" font-size="14.00"&gt;comment&lt;/text&gt;
&lt;/g&gt;
&lt;/g&gt;
&lt;/svg&gt;

&lt;/div&gt;

&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;p&gt;Feel free to squint at this tangled web if you really like graphs about graphs. It's like API documentation, squared!&lt;/p&gt;
&lt;p&gt;But speaking of that, remember that you can also read ConceptNet's API documentation &lt;a href="https://github.com/commonsense/conceptnet5/wiki/API"&gt;in English&lt;/a&gt; instead of in JSON-LD.&lt;/p&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing text_cell rendered"&gt;&lt;div class="prompt input_prompt"&gt;
&lt;/div&gt;&lt;div class="inner_cell"&gt;
&lt;div class="text_cell_render border-box-sizing rendered_html"&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Did... did you just make an ontology? That seems out of character.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The ontology was always there, Imaginary Interlocutor. We've just moved it from the realm of Platonic ideals, to a JSON file you can download.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In the end, what have you accomplished here?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The next time someone asks me if ConceptNet is available in RDF form, I can say "yes".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="cell border-box-sizing code_cell rendered"&gt;
&lt;div class="input"&gt;
&lt;div class="prompt input_prompt"&gt;In [ ]:&lt;/div&gt;
&lt;div class="inner_cell"&gt;
    &lt;div class="input_area"&gt;
&lt;div class=" highlight hl-ipython3"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt; 
&lt;/pre&gt;&lt;/div&gt;

    &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;/div&gt;</description><category>ConceptNet</category><category>Tutorials</category><guid>http://blog.conceptnet.io/posts/2018/conceptnet-and-json-ld/</guid><pubDate>Thu, 26 Apr 2018 16:00:00 GMT</pubDate></item><item><title>ConceptNet 5.6 released</title><link>http://blog.conceptnet.io/posts/2018/conceptnet-56-released/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;ConceptNet 5.6 is out!&lt;/p&gt;
&lt;p&gt;We've made a lot of changes behind the scenes that should have fairly small effects on the way you use ConceptNet. Some of the changes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We normalize text properly in more languages. Arabic words no longer insist on matching vowel points that nobody writes in real text. Serbian/Croatian words now have a unified vocabulary written in the Latin alphabet, instead of some words being in the Latin alphabet and some in Cyrillic.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ConceptNet &lt;a href="http://conceptnet.io/c/mul/%F0%9F%98%82"&gt;knows what emoji are&lt;/a&gt; and can define them in a number of languages, thanks to importing Unicode CLDR data. 😺&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We've included data from &lt;a href="https://cc-cedict.org/wiki/"&gt;CC-CEDICT&lt;/a&gt;, an open Chinese dictionary.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For fans of self-explaining APIs and what's left of the Semantic Web: Everything returned by the ConceptNet API is now valid &lt;a href="https://json-ld.org/"&gt;JSON-LD&lt;/a&gt;, and we now test to make sure this is true. You can use &lt;a href="https://github.com/digitalbazaar/pyld"&gt;a JSON-LD processor&lt;/a&gt; to convert responses from the ConceptNet API into other formats such as RDF triples.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;We no longer use Docker to deploy ConceptNet. It caused no end of inscrutable problems and it didn't make anything easier. Sorry for getting caught up in the hype. We still provide ways to &lt;a href="https://github.com/commonsense/conceptnet5/wiki/Running-your-own-copy"&gt;configure a machine to serve ConceptNet exactly like we do&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;More details are on the &lt;a href="https://github.com/commonsense/conceptnet5/wiki/Changelog"&gt;changelog&lt;/a&gt; on the ConceptNet wiki.&lt;/p&gt;
&lt;p&gt;We also moved our blog -- the one you're reading now -- from WordPress to a static site generated with Nikola. One feature this provides is that we can post Python notebooks &lt;a href="http://blog.conceptnet.io/posts/2017/how-to-make-a-racist-ai-without-really-trying/"&gt;directly on the blog&lt;/a&gt;, instead of having to use an external service such as Gist. This makes it much easier to post tutorials, and we hope to do this shortly.&lt;/p&gt;&lt;/div&gt;</description><category>ConceptNet</category><category>Releases</category><guid>http://blog.conceptnet.io/posts/2018/conceptnet-56-released/</guid><pubDate>Fri, 13 Apr 2018 21:02:00 GMT</pubDate></item><item><title>Interview on de-biasing NLP</title><link>http://blog.conceptnet.io/posts/2017/interview-on-de-biasing-nlp/</link><dc:creator>Robyn Speer</dc:creator><description>&lt;div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In &lt;a href="http://blog.conceptnet.io/2017/07/13/how-to-make-a-racist-ai-without-really-trying/"&gt;several&lt;/a&gt; &lt;a href="http://blog.conceptnet.io/2017/04/24/conceptnet-numberbatch-17-04-better-less-stereotyped-word-vectors/"&gt;previous posts&lt;/a&gt; here, I've been discussing the risks of biased AI, particularly in natural language processing tasks. It's part of my work at Luminoso to address this, both in ConceptNet and in Luminoso's services. We're not just warning about what not to do, we're promoting best practices about what you can do to prevent bias right now.&lt;/p&gt;
&lt;p&gt;At Luminoso, Denise Christie and I recorded a discussion about de-biasing, touching on a lot of the current issues that create bias in NLP and what to do about them.  The &lt;a href="https://luminoso.com/resources/debiasing-ai-systems"&gt;recording and transcript&lt;/a&gt; are now available on Luminoso's site.&lt;/p&gt;&lt;/div&gt;</description><category>NLP fairness</category><guid>http://blog.conceptnet.io/posts/2017/interview-on-de-biasing-nlp/</guid><pubDate>Wed, 30 Aug 2017 18:37:53 GMT</pubDate></item></channel></rss>