1

我经常遇到一个问题(在数据分析或人工智能的广泛领域)。但是我不能说出它的名字,可能是因为我没有正式的 CS 背景。请多多包涵,我举两个例子:

想象一下自然语言解析:

The flower eats the cow.

你有一个程序,它接受每个单词,并确定它的类型和它们之间的关系。这句话有两种解读方式:

1) flower (substantive) -- eats (verb) --> cow (object)

使用通常的 SVO 词序,或

2) cow (substantive) -- eats (verb) --> flower (object)

使用更具诗意的世界秩序。该程序将排除其他可能性,例如“flower”作为动词,因为它跟在“the”之后。然后它会对剩余的可能性进行排名:1) 比 2) 具有更自然的词序,因此它得到更多的分数。但包括花不能吃牛的世界知识,2)还是赢了。所以它可能会返回两个假设,并给出 1)30 分和 2)70 分。

然后,它会记住这两个假设并继续解析文本,然后分支。一个分支假设 1),一个分支 2)。如果一个分支达到矛盾,或者排名为~0,则将其丢弃。最后,它再次提出了排名假设,但针对整个文本。


举一个不同的例子,想象一下光学字符识别:

   **      **
   **      **  *****
   **   *******
 *******   **
*  **      **
   **      **

我可以看看笔画,然后说,确定这是一个“H”。在识别出 H 之后,我注意到它周围有污迹,并给它打了一个稍差的分数。

或者,我可以先运行我的污迹识别,并注意到水平线看起来像一个伪影。删除后,我认出这是llor Il,并给它一些排名。

处理整幅图像后,可以是HluminationllluminationIllumination。使用字典和总排名,我决定它是最后一个。


  • 一般问题总是某种解析/理解。例子:
    • 自然语言或歧义语言
    • 光学字符识别
    • 寻找路径
    • 处理模棱两可或不完整的用户输入——哪些解释是有意义的,哪些是最合理的?
  • 我是递归的。
  • 它可以提前退出(当分支/解释没有意义时,或者肯定会以 0 分结束)。所以这可能是某种回溯。
  • 考虑到歧义,它会牢记所有选项。
  • 它基于底部的简单规则can_eat(cow, flower) = true
  • 它保持解释的合理性排名。
  • 它在元级别上是递归的:它可以分叉/分支到不同的“世界”,在处理下一部分数据时假设不同的假设。
  • 它将个人排名(可能使用贝叶斯概率)转发到相关假设。
  • 在实践中,会有方法来训练这个东西,确定排名系数,如果树变得太大,就会有截断。

我不知道这叫什么。有人可能会猜测“决策树”或“递归下降”,但我知道这些术语的含义不同。

我知道 Prolog 可以解决这个简单的案例,比如家谱和找出谁是谁的叔叔。但是您必须在代码中提供所有数据,对于我的现实生活案例来说,这样做似乎不够方便或强大。

我想知道,这个问题叫什么,有解决这个问题的常用策略吗?有没有关于这个话题的好文献?是否有理想的 C(++)、Python 库,你是否可以定义一堆规则,并计算出所有的排名和假设?

4

1 回答 1

0

我认为没有一个答案适合您拥有的所有要点。但我希望我的链接能让你更接近答案,或者可能会给你一个不同的问题。

我认为最接近的答案是贝叶斯网络,因为据我所知,您有相互影响的概率,它也与条件概率模糊逻辑有关

您还描述了一些遗传编程以及人工神经网络

我可以命名一些可能相关的主题:

http://en.wikipedia.org/wiki/Rule-based_programming

http://en.wikipedia.org/wiki/Expert_system

http://en.wikipedia.org/wiki/Knowledge_engineering

http://en.wikipedia.org/wiki/Fuzzy_system

http://en.wikipedia.org/wiki/Bayesian_inference

于 2012-07-17T11:57:32.123 回答