Jena と TDB を使用して RDF を保存していますが、その上で何らかの推論を行いたいと考えています。しかし、RDF データは大きく、Jena のフクロウ推論はすべてのデータをメモリにロードする必要があります。だから、すべてのデータをメモリにロードせずに推論できる1つの推論者を見つけたいのですが、何かありますか?
3 に答える
あまり。DL 推論は、低スケールでも計算が困難です。大量のデータでは、既存のアプローチでは機能しません。セカンダリストレージでそれを行うことは、まだ未解決の研究課題です.
ただし、この問題に対処するために、OWL のさまざまなプロファイルが存在します。それらはすべて異なる計算の複雑さを持ち、DL よりもすべて「簡単」であり、大規模な推論にはるかに適しています。特に、QL はクエリ時間の推論用に設計されており、私の経験ではメモリ フットプリントが非常に小さい傾向があり、RL は標準的なルール推論で実装できます。
したがって、DL を使用する必要がない場合は、いずれかのプロファイルをサポートするツールを使用すると、かなりの効果が得られるはずです。
参考までに、さまざまな OWL ダイアレクトの計算の複雑さに関するこのドキュメントが興味深いかもしれません。
OWL のサブセットを使用する準備ができている場合は、すべての RDF データをメモリーにロードせずにストリーム処理方式で実行でき、推論されたすべてのトリプルを具体化することができます。
例として、RIOT の infer コマンドを見てみましょう。
ソースコードはこちら:
- https://svn.apache.org/repos/asf/incubator/jena/Jena2/ARQ/tags/jena-arq-2.9.0-incubating/src/main/java/riotcmd/infer.java
- https://svn.apache.org/repos/asf/incubator/jena/Jena2/ARQ/tags/jena-arq-2.9.0-incubating/src/main/java/org/openjena/riot/pipeline/inf/ InferenceProcessorRDFS.java
- https://svn.apache.org/repos/asf/incubator/jena/Jena2/ARQ/tags/jena-arq-2.9.0-incubating/src/main/java/org/openjena/riot/pipeline/inf/ InferenceSetupRDFS.java
RIOT の推論を取り、MapReduce のようなものと並行して実行するのは簡単です。例は次のとおりです。
MapReduce を使用して RDFS および OWL ter Horst ルールを適用し、すべての派生ステートメントを具体化する別のアプローチを次に示します。
おそらく、関心のある OWL の部分を見て、ストリーミング方式で実行できるかどうかを確認できます。そうであれば、RIOT の推論を利用して拡張し、関心のある OWL の部分を追加することができます。これは、Apache Jena への素晴らしい貢献になるでしょう (そうしたい場合は jena-dev メーリング リストで連絡を取ってください)。 .
WebPIE は巧妙で興味深いプロジェクトですが、おわかりのように、もう少し複雑で、研究プロジェクトです (長期的なサポートと保守の観点からすべてが示唆されます)。ただし、必要/必要な OWL ter Horst である場合は、WebPIE で十分です。他の人が WebPIE の使用に興味を持っている場合は、努力して WebPIE をフォークし、オープン ソース プロジェクトに貢献することもできます。
Ymris にも興味があるかもしれません (しかし、これは現在眠っています... zzzzz):
GRAKN.AI を試してみるのもよいでしょう。分散システムに保存されたデータに対してリアルタイムで推論を実行します。