Я использую Jena и TDB для хранения RDF, и я хочу сделать некоторые выводы по нему. Но данные RDF большие, и сове-разумнику Jena приходится загружать все данные в память. Итак, я хочу найти одного рассудителя, который может рассуждать, не загружая все данные в память, есть ли такой?
Есть ли какой-нибудь бесплатный совин, который может рассуждать, не загружая все данные в память?
Ответы (3)
Если вы готовы взять подмножество OWL, есть вещи, которые вы можете делать в режиме потоковой обработки, не загружая все ваши RDF-данные в память, и которые материализуют все предполагаемые тройки.
В качестве примера взгляните на команду infer RIOT:
Исходный код здесь:
- 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 и внести свой вклад в проект с открытым исходным кодом, если другие заинтересованы в его использовании.
Возможно, вам будет интересно взглянуть также на Ymris (но он сейчас спит... zzzzz):
Не совсем. Рассуждения DL сложны в вычислительном отношении даже на малых масштабах. С много данных это просто не будет работать с существующими подходами. Выполнение этого во вторичном хранилище все еще остается открытой исследовательской проблемой.
Однако для решения этой проблемы существуют различные профили OWL. Все они имеют разную вычислительную сложность, и все они «проще», чем DL, что делает их гораздо более удобными для рассуждений в масштабе. В частности, QL предназначен для рассуждения о времени запроса, которое, по моему опыту, имеет тенденцию занимать очень мало памяти, а RL может быть реализован с помощью стандартного обработчика правил.
Поэтому, если вам не нужно использовать DL, я бы выбрал инструмент, который поддерживает один из профилей, и вы должны получить от этого довольно хорошие результаты.
Для справки вы можете найти этот документ о вычислительных сложностях различных OWL. диалекты интересные.
Вы можете попробовать GRAKN.AI, они в режиме реального времени анализируют сохраненные данные в распределенных системах.