2010-07-09 76 views
9

我研究了一些简单的语义网络实现和解析自然语言的基本技术。但是,我还没有看到许多项目试图弥合两者之间的差距。语义网络的概率生成

例如,考虑的对话框:

"the man has a hat" 
"he has a coat" 
"what does he have?" => "a hat and coat" 

一个简单的语义网络,基于上述句子的语法树分析,可能是这样的:

the_man = Entity('the man') 
has = Entity('has') 
a_hat = Entity('a hat') 
a_coat = Entity('a coat') 
Relation(the_man, has, a_hat) 
Relation(the_man, has, a_coat) 
print the_man.relations(has) => ['a hat', 'a coat'] 

然而,这种实现假定事先知道文本段“人”和“他”是指同一个网络实体。

您将如何设计一个能够“学习”语义网络片段之间关系的系统?我习惯于基于创建属性/值对的简单训练集并将其提供给分类或回归算法来考虑ML/NL问题,但是我很难以这种方式来解决这个问题。

最终,似乎我需要在语义网络之上重叠概率,但这会使实现变得非常复杂。有没有任何现有技术沿着这些路线?我已经看了一些库文库,比如NLTK和OpenNLP,虽然他们有处理符号逻辑和解析自然语言的体面工具,但似乎没有任何一种将一个转换为另一个的可预测框架。

回答

3

这类任务背后有很多历史。你最好的开始可能是看Question Answering

我一直给出的一般建议是,如果你有一些高度限制的领域,你知道所有可能提及的事情和他们互动的所有方式,那么你可能会很成功。如果这更像是一个“开放世界”的问题,那么想出一个可以接受的东西是非常困难的。

从自然语言中提取关系的任务被称为'关系抽取'(有趣的是足够),有时也被称为事实抽取。这是一个相当大的研究领域,this guy做了博士论文,就像其他许多人一样。这里面临着很多挑战,正如您已经注意到的那样,比如实体检测,回指解析等。这意味着您提取的实体和关系中可能会有很多“噪音”。对于表示在知识库中提取的事实,大多数人倾向于不使用概率框架。在最简单的层面上,实体和关系以三元组形式存储在一个平面表中。另一种方法是使用本体来添加结构并允许推理事实。这使得知识库非常有用,但增加了很多可伸缩性问题。至于添加概率,我知道旨在创建概率本体的Prowl项目,但它对我来说并不是很成熟。

对概率关系建模有一些研究,主要是华盛顿大学的Markov Logic Networks和斯坦福大学的Probabilstic Relational Models和其他地方。我与这个领域有点脱节,但这是一个难题,据我所知,这些都是早期阶段的研究。有很多问题,主要围绕高效和可扩展的推理。

总的来说,这是一个好主意,也是一个非常明智的想要做的事情。但是,实现起来也很困难。如果你想看一个最先进的例子(也就是一堆人和金钱有什么可能),可以查看PowerSet

+0

PR-OWL看起来很有趣,因为他们已经意识到一个可用的语义网络需要处理不确定性。但是,我从来不喜欢OWL,因为我不清楚他们是如何实现实体的。另外,就像你提到的那样,这个项目似乎是蒸气,没有实际公布的代码。 – Cerin 2010-07-10 17:00:03

0

我不确定这是否是你想要的,但看看自然语言生成wikipedia,解析的“反向”,构造派生符合给定的语义约束。

+0

是啊,谢谢,但在技术上这是什么,我正在寻找正好相反;) – Cerin 2010-07-10 00:35:36

2

有趣的问题,我一直在C#中强类型的NLP引擎上做一些工作:http://blog.abodit.com/2010/02/a-strongly-typed-natural-language-engine-c-nlp/,并且最近开始将它连接到本体存储。

对我来说,这里看起来像这个问题真的是这样的:你如何解析自然语言输入来弄清楚'他'和'那个人'是一回事?当它进入语义网络时,就已经太迟了:你已经失去了陈述2跟随陈述1的事实,并且陈述2中的含糊不清可以使用陈述1来解决。在事实之后添加第三个关系来表示“他”和“男人”是一样的是另一种选择,但你仍然需要了解这些断言的顺序。

大多数NLP解析器似乎都侧重于解析单个句子或大块文本,但处理对话的频率较低。在我自己的NLP引擎中,有一个对话历史记录,它允许一个句子在它之前的所有句子的语境中被理解(以及它们所指的被解析的,强类型的对象)。所以我要处理这个问题的方式是要认识到,“他”在当前句子中是模棱两可的,然后回头想找出最后一个男性是谁被提及。

以我家为例,它可能会告诉你,你错过了一个不在其数据库中的号码的呼叫。你可以输入“它是约翰史密斯”,它可以发现“它”意味着刚才提到的电话。但是,如果您在通话之后立即键入“标记为派对音乐”,它仍然会解析为当前正在播放的歌曲,因为该房屋正在寻找可以ITaggable的内容。

+1

这个问题通常称为照应解析。如果你只是将其限制为解决“他”和“她”,这就是所谓的代词解析。有系统可以做到,但通常不是很好。上次我用了一个,它造成了很多错误,因为它不能说明奥巴马是一个男人的名字。 – Stompchicken 2010-07-10 09:03:29

+0

回指/代词解析是一个问题,但问题比这个更普遍。如果我在两种不同的话语中提到“男人”,它可能会也可能不会提到同一个实体。在开放领域,这个问题可能适用于任何一个句子中的单词。 – Cerin 2010-07-10 15:24:40

+0

在这种情况下,通常称为(跨文档)实体分辨率。有对比赛前一阵子:http://www.kdnuggets.com/news/2007/n08/10i.html不知道什么来的吧。 – Stompchicken 2010-07-10 17:36:17