Я пытаюсь каким-то образом хранить повседневные предложения - или, точнее, информацию, выраженную предложениями - в (полу) структурированной форме.Прямо сейчас я изучаю возможность RDF для этого.Я недостаточно знаком с RDF, чтобы оценить, подходит ли этот путь.Хотя я уверен, что будет какая-то форма потери информации, я не могу сказать, что это было бы приемлемо для практических целей.
Очевидно, что предложения типа «Боб съел пирог» могут быть непосредственно сопоставлены с предметом.Тройной объект предиката (хотя я не знаю, как правильно определить время предиката):
:Bob :ate :Cake .
Затем я столкнулся с реификацией, которая преобразует одну тройку в 4-тройной граф, представляющийоператор с субъектом, предикатом и узлом объекта.Это позволяет отразить утверждения над утверждениями, например: «Алиса считает, что Боб съел торт».
_:stmt1 rdf:type rdf:Statement .
_:stmt1 rdf:subject :Bob .
_:stmt1 rdf:predicate :ate .
_:stmt1 rdf:object :Cake .
:Alice :thinks _:stmt1 .
Пока все хорошо.Тем не менее, повседневный язык имеет гораздо больше конструкций.Вот лишь некоторые из наиболее очевидных (для меня):
Условия: «Если Алиса говорит правду, Боб съел торт».
Вспомогательные глаголы: «Алиса может испечь пироги».
Клаусал дополняет: «Алиса любит есть пирог».
Отрицание: ДаноВ предположении об открытом мире отсутствие тройного :Bob :ate :Cake .
неоднозначно.Во многих практических ситуациях я бы сказал, что важно явно указывать отрицание.
Разъединение: «(Либо) Алиса или Боб съели торт».Большинство людей не могут достоверно различать OR и XOR на повседневном языке.
Квантор: «Большинству нравится пирог». «Очень немногие ненавидят пирог».
Я полагаю, что некоторые из них могут быть реализованы относительно простым способом.Например, «Алиса думает, что Боб не ел торт» можно представить как
_:stmt1 rdf:type rdf:Statement .
_:stmt1 rdf:subject :Bob .
_:stmt1 rdf:predicate _:predA .
_:predA :term :eat
_:predA :tense :past
_:predA :negated :true
_:stmt1 rdf:object :Cake .
:Alice :thinks _:stmt1 .
Это также может позволить выразить простые наречия (например, «Боб быстро съел торт»), имея тройной такойas
_:predA :advmod :quickly
С другой стороны, само по себе овеществление быстро увеличивает количество необходимых троек.Я предполагаю, что вы можете довести его до крайности и рассматривать вывод анализатора зависимостей как набор троек, например:
nsubj(thinks, Alice)
ccomp(thinks, ate)
nsubj(ate, Bob)
dobj(ate, cake)
...
, но я не вижу это действительно полезным, когда дело доходит до запроса графика или вывода изит.
Я прочитал пару научных работ, посвященных конвертации текста в RDF, но большинство из них посвящено извлечению простых фактов.Кроме того, я не смог найти хороших ресурсов о том, насколько полезен / выразителен / практичен RDF для представления знаний помимо простых фактоидов.