我研究了一些简单的语义网络实现和解析自然语言的基本技术。但是,我还没有看到许多项目试图弥合两者之间的差距。语义网络的概率生成
例如,考虑的对话框:
"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,虽然他们有处理符号逻辑和解析自然语言的体面工具,但似乎没有任何一种将一个转换为另一个的可预测框架。
PR-OWL看起来很有趣,因为他们已经意识到一个可用的语义网络需要处理不确定性。但是,我从来不喜欢OWL,因为我不清楚他们是如何实现实体的。另外,就像你提到的那样,这个项目似乎是蒸气,没有实际公布的代码。 – Cerin 2010-07-10 17:00:03