Nlp 使用RDF对正常句子进行建模

Nlp 使用RDF对正常句子进行建模,nlp,rdf,semantic-web,reification,Nlp,Rdf,Semantic Web,Reification,我试图以某种方式以一种(半)结构化的方式存储日常句子——或者更确切地说是句子所表达的信息。现在,我正在探索RDF在这方面的可行性。我对RDF不够熟悉,无法评估这是否是合适的方法。虽然我确信会有某种形式的信息丢失,但我不能说这是可行的 显然,像“鲍勃吃了蛋糕”这样的句子可以直接映射到主谓宾三元组(尽管我不知道如何正确处理谓语的时态): 然后我遇到了具体化,它将一个三元组转换为四元组图,表示一个包含主语、谓语和宾语节点的语句。这允许在语句上反映语句,例如,“Alice认为Bob吃了蛋糕。”: 到目前

我试图以某种方式以一种(半)结构化的方式存储日常句子——或者更确切地说是句子所表达的信息。现在,我正在探索RDF在这方面的可行性。我对RDF不够熟悉,无法评估这是否是合适的方法。虽然我确信会有某种形式的信息丢失,但我不能说这是可行的

显然,像“鲍勃吃了蛋糕”这样的句子可以直接映射到主谓宾三元组(尽管我不知道如何正确处理谓语的时态):

然后我遇到了具体化,它将一个三元组转换为四元组图,表示一个包含主语、谓语和宾语节点的语句。这允许在语句上反映语句,例如,“Alice认为Bob吃了蛋糕。”:

到目前为止还不错。然而,日常语言有更多的结构。以下是(对我而言)更为明显的几点:

  • 条件:“如果爱丽丝说的是实话,鲍勃就吃了蛋糕。”

  • 助动词:“爱丽丝会烤蛋糕。”

  • 小句补充道:“爱丽丝喜欢吃蛋糕。”

  • 否定:根据开放世界的假设,没有三元组是含糊不清的。在许多实际情况下,我认为明确否定是很重要的

  • 析取:“(或者)爱丽丝或者鲍勃吃了蛋糕。”在日常语言中,大多数人不能可靠地区分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 .
这也可能允许使用三元组来表达简单副词(例如,“Bob很快吃了蛋糕”),例如

_:predA :advmod :quickly
另一方面,物化本身会迅速增加所需的三元组数量。我猜你可以把它推到极端,并把依赖解析器的输出看作三元组的集合,例如:

nsubj(thinks, Alice)
ccomp(thinks, ate)
nsubj(ate, Bob)
dobj(ate, cake)
...
但我看不出这在查询图表或从中推断时真正有用


我读了几篇关于将文本转换为RDF的科学论文,但大多数都关注于简单事实的提取。除此之外,我找不到任何关于RDF在表示简单factoid之外的知识方面有多有用/表达性/实用性的好资料。

您已经很好地分析了这个问题。RDF是由三元组组成的,因此您受到这一限制。一个句子确实包含了比单词/标记序列多得多的信息。你也许应该从另一个方向开始,考虑以后如何使用这些数据。例如,什么样的数据,什么样的查询。除此之外,我们无能为力。即使在任何其他数据格式中,您基本上也必须解决相同的问题。事实上,具有空白节点的n元关系会更好。另一个数据模型是属性图。至少在这里,可以将特性直接附着到节点和边。也许这也值得一看。查询语言是存在的,尽管没有像RDF/OWLLast comment中那样定义良好的语义,但格式在RDF NLP中是目前最先进的stuff@AKSW好评论!我看过报纸了。重点似乎放在文本的标准化注释上,即NLP工具的输出。我通常在寻找一种方法,以某种(半)结构化的形式存储非结构化原始文本(例如,表单帖子、tweet),以保留核心信息(截至2020年,这是一个非常困难的问题。无论如何,这与您是使用property graph还是triple store无关。根据我个人的研究,triple store可以完成property graph所做的一切,在查询时间和磁盘空间使用方面具有更多的查询功能和更高的理论性能。
_:predA :advmod :quickly
nsubj(thinks, Alice)
ccomp(thinks, ate)
nsubj(ate, Bob)
dobj(ate, cake)
...