我遇到了很多问题(在数据分析或AI的广泛领域)。但是我无法命名它,可能是因为我没有正式的CS背景。请原谅,我举两个例子:用歧义构建递归假设 - 它叫什么?
想象自然语言解析:
The flower eats the cow.
你有一个程序,它的每个字,并确定其类型和它们之间的关系。有两种方法来解释这句话:
1) flower (substantive) -- eats (verb) --> cow (object)
使用通常的SVO词序,或
2) cow (substantive) -- eats (verb) --> flower (object)
使用更诗意的世界秩序。该方案将排除其他可能性,例如“花”作为动词,因为它遵循“the”。它会排列剩余的可能性:1)比2更自然的词序),所以它得到更多的点。但是,包括世界知识,花卉不能吃牛,2)仍然赢。所以它可能会返回两个假设,并给1)30分,2)70分。
然后,它会记住两个假设并继续解析文本,分支。一个分支假设1),一个2)。如果某个分支达到矛盾或者排名为0,则被丢弃。最后,它再次提出排名假设,但对于整个文本。
对于不同的例子,假设光学字符识别:
** **
** ** *****
** *******
******* **
* ** **
** **
我可以看看招,说,肯定这是一个“H”。在确定H后,我注意到它周围有污迹,并给它一个稍差的分数。
或者,我可以先运行我的污迹识别,并注意水平线看起来像一个神器。删除后,我认识到这是ll
或Il
,并给它一些排名。
处理完整个图像后,可以是Hlumination
,lllumination
或Illumination
。使用字典和总排名,我决定这是最后一个。
- 普遍的问题始终是某种解析/理解。例子:
- 自然语言或模棱两可的语言
- OCR
- 路径寻找
- 不明确或不完整的用户开关输入处理 - 这解释是有意义的,这是最合理的?
- 我是递归的。
- 它可以提前退出(当一个分支/解释没有意义,或最终得分为0)。所以这可能是某种回溯。
- 由于含糊不清,它记住了所有选项。
- 它基于简单的规则在底部
can_eat(cow, flower) = true
。 - 它保持解释的合理性排名。
- 它在元层次递归:它可以派生/分支到不同的'世界',在处理下一部分数据时它假设不同的假设。
- 它会将个人排名,可能使用贝叶斯概率,转化为依赖假设。
- 实际上,将会有方法来训练这个东西,确定排名系数,并且如果树太大,会出现截断点。
我不知道这叫什么。人们可能会猜测'决策树'或'递归下降',但我知道这些术语意味着不同的东西。
我知道Prolog可以解决这个简单的例子,像家谱和找出谁是谁的叔叔。但是你必须在代码中提供所有的数据,而且对于我的真实生活案例来说,这看起来并不令人信服或者足够强大。
我想知道,这个问题叫什么,有没有处理这个问题的常用策略?关于这个话题有很好的文献吗?是否有理想的C(++),Python的库,你是否可以定义一堆规则,并且排除所有的排名和假设?
推断和要概括,并记住含糊供以后analisys,提醒我绎推理的为好。非单调推理也可能变得有用。知识工程和知识表示也是相关的流行语 - 希望这可以提供很好的搜索条件。 – Ignazio 2013-12-20 15:43:30