我遇到了很多问题(在数据分析或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
。使用字典和总排名,我认为它是最后一个。
can_eat(cow, flower) = true
的简单规则。我不知道这叫什么。人们可能会猜测“决策树”或“递归下降”,但我知道这些术语意味着不同的东西。
我知道Prolog可以解决这个问题的简单案例,比如家谱,并找出谁是谁的叔叔。但是你必须在代码中提供所有数据,而且对于我的真实案例而言,它似乎不够简单或强大。
我想知道,这个问题叫做什么,有没有共同的策略来解决这个问题?关于这个话题有很好的文献吗?是否存在理想的C(++),Python库,你可以定义一堆规则,它可以解决所有的排名和假设吗?
答案 0 :(得分:0)
我认为没有一个答案符合你的所有要点。但是我希望我的链接会让你更接近答案,或者可能会给你一个不同的问题。
我认为最接近的答案是Bayesian network,因为根据我的理解,你有相互影响的概率,它也与Conditional probability和Fuzzy Logic
有关您还描述了一些遗传编程以及人工神经网络
我可以删除一些可能相关的主题:
http://en.wikipedia.org/wiki/Rule-based_programming
http://en.wikipedia.org/wiki/Expert_system
http://en.wikipedia.org/wiki/Knowledge_engineering