【问题标题】:Probabilistic Generation of Semantic Networks语义网络的概率生成
【发布时间】:2011-03-14 02:04:12
【问题描述】:

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

以对话框为例:

"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,虽然它们有很好的工具来处理符号逻辑和解析自然语言,但似乎都没有任何一种概率框架来将它们转换为另一种。

【问题讨论】:

    标签: machine-learning data-mining nlp


    【解决方案1】:

    这种任务背后有相当多的历史。您最好的开始可能是查看Question Answering

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

    从自然语言中提取关系的任务称为“关系提取”(很有趣),有时也称为事实提取。这是一个相当大的研究领域,this guy 和其他许多人一样做了一篇博士论文。正如您所注意到的,这里存在大量挑战,例如实体检测、照应解析等。这意味着您提取的实体和关系中可能会有很多“噪音”。

    至于表示已在知识库中提取的事实,大多数人倾向于不使用概率框架。在最简单的级别上,实体和关系作为三元组存储在平面表中。另一种方法是使用本体来添加结构并允许对事实进行推理。这使得知识库更加有用,但增加了很多可扩展性问题。至于添加概率,我知道Prowl 项目旨在创建概率本体,但在我看来并不成熟。

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

    总而言之,这是一个好主意,也是一件非常明智的事情。但是,实现起来也非常困难。如果你想看一个最先进的例子,(即一群人和钱可以做什么)可以查看PowerSet

    【讨论】:

    • PR-OWL 看起来很有趣,因为他们已经意识到一个可用的语义网络需要处理不确定性。但是,我从来不喜欢 OWL,因为我从来不清楚它们是如何具体化实体的。另外,就像您提到的那样,该项目在这一点上似乎是一团糟,没有实际发布的代码。
    【解决方案2】:

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

    在我看来,这里的问题实际上是:你如何解析自然语言输入以找出“他”与“男人”是一样的?当它在语义网络中时为时已晚:您已经失去了语句 2 遵循语句 1 的事实,并且语句 2 中的歧义可以使用语句 1 来解决。在事实之后添加第三个关系来表示“他”和 "the man" are the same 是另一种选择,但您仍然需要了解这些断言的顺序。

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

    以我家为例,它可能会告诉您您错过了来自不在其数据库中的号码的电话。您可以键入“It was John Smith”,它可以判断出“It”是指刚刚向您提及的电话。但是,如果您在通话后立即键入“将其标记为派对音乐”,它仍然会解析为当前正在播放的歌曲,因为房子正在寻找可标记的歌曲。

    【讨论】:

    • 这个问题一般称为回指解析。如果您仅将其限制为解析“他”和“她”,则称为代词解析。有些系统可以做到这一点,但通常不是很好。上次我用了一个,它导致了很多错误,因为它无法分辨巴拉克奥巴马是一个男人的名字。
    • 回指/代词解析是一个问题,但问题比这更普遍。如果我在两种不同的话语中提到“人”,它可能指代也可能不指代同一个实体。在开放世界领域,这个问题可能适用于句子中的任何单词。
    • 在这种情况下,通常称为(跨文档)实体解析。不久前有一个比赛:kdnuggets.com/news/2007/n08/10i.html 不知道结果如何。
    • 是的,我记得 Spock 挑战。它从来没有被很好地定义过,运营它的公司似乎对这个活动失去了兴趣,而且从来没有对参与者的问题做出很好的回应。
    【解决方案3】:

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

    【讨论】:

    • 是的,谢谢,但从技术上讲,这与我正在寻找的完全相反;)
    猜你喜欢
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2015-07-31
    • 2017-03-31
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多