7

最后我正在做我最后一年的项目,这是基于智能网络的职业指导系统,我系统的核心功能是

推荐系统

基本上,我们的推荐系统会通过兴趣测试和用户的学习记录来仔细检查用户的偏好,并在此检查信息的基础上为用户提供最佳的职业选择,例如 BS 计算机科学等课程。

  • 推荐系统的输入将是学生证书和兴趣测试,兴趣测试将根据用户的学术历史和他在测试中给出的答案给出问题,所以基本上测试不会向每个人提出相同的问题将根据系统定义的规则实时决定向哪个用户询问什么。

  • 它的输出将是根据兴趣测试决定的字段选项。

问题

当我在委员会面前为我的范围辩护时,他们说“这是简单的 if-else ”这个系统并不智能。
我的问题是可以使用哪种人工智能技术或算法来使这个系统变得智能。我搜索了很多,但与我的系统相关的论文更加肤浅,他们只是强调想法而不是方法论。
我想用 Java 完成我所有的工作。如果答案是特定于技术的,那就太好了。
如果我的问题与 SO Q&A 标准无关,你们可以将我的问题转移到任何其他 stackexchange 站点。

编辑

从答案中得到一些想法后,我想用基于规则和推理引擎来实现专家系统。现在我想在技术方面更清楚地实现基于规则的引擎。经过搜索,我发现 Drools 是最好的,但它是否也与 Web 应用程序兼容?而且我还发现 Tohu 是最好的动态表单生成器(因为这也是我的项目需要的)。我可以使用 tohu 和口水来制作我的 Web 应用程序吗?实现这种系统是否容易?

4

6 回答 6

4
  1. 如果你有大量的问题,每个问题都可以代表一个特征。假设您将拥有很多功能,则很难找到满足条件的一系列 if-else 语句(回想一下,带有n问题的完整树将有2^n“叶子” - 代表2^n这些问题的可能答案,假设每个问题是是/否问题)。

  2. 由于以上的硬编程对于足够大(并且可能是现实的大小)是不可能的n- 有一个启发式解决方案的地方之一是机器学习,特别是 -分类问题。你可以让一些人回答你的调查,让“专家”告诉他们什么是最好的职业,然后让算法为一般问题找到分类器(如果你想自动将其转换为一系列是-否问题,可以通过决策来完成树,以及像C4.5这样的算法来创建树)。

  3. 确定哪些问题实际上是相关的也很重要?性别相关吗?身高有关系吗?这些问题也可以使用带有特征选择算法的 ML 算法来回答(其中之一是PCA

  4. 关于“技术”方面——java中有一个很好的库——叫做Weka,它实现了许多分类算法。

  5. 您可以提出一个问题(并尝试在您的项目中找出)哪种分类算法最适合这个问题?一些可能性是上面提到的 C4.5、朴素贝叶斯线性回归神经网络KNNSVM(这通常对我来说是最好的)。您可以尝试并支持您决定使用哪种算法进行统计研究和更好的统计证明。Wilcoxon 测试是这方面的标准。


编辑:关于第 2 点的更多细节:

  • 在这里,“专家”可以是来自 HR 领域的人类分类器,它读取特征并对答案进行分类。有时获取这些数据(通常称为“培训数据”)既困难又广泛,如果您的大学有 IE 或 HR 教员,也许他们会愿意提供帮助。
  • 这个想法是:聚集一群首先回答你的调查的人。然后,将其交给人类分类器(“专家”),该分类器将根据他的回答选择最适合此人的职业。专家给出分类的数据是学习算法的输入,其输出将是一个分类器。
  • 分类器本身就是一个函数,它给出调查的答案 - 预测进行这项调查的人的“分类”(建议的职业)是什么。
  • 请注意,一旦你有了一个分类器——你不再需要维护训练数据,单独的分类器就足够了。但是,您应该有问题列表,这些问题的答案将是提供给分类器的功能。
于 2012-10-13T17:31:42.900 回答
3

你所要做的就是创建一个简单的学习系统:

  1. 更改您的论文术语,将其描述为“学习最好的职业”,而不是使用“智能”一词。学习是人工智能的一种形式。
  2. 建立培训制度。为此,向已经有职业的人提供问卷,并提出问题以了解他们对自己的职业的满意度。这样一来,您的系统就可以训练什么是好的职业匹配,什么是不好的匹配。
  3. 选择一个学习系统来吸收来自 (2) 的数据。例如,一个想法来源可能是最近的这篇论文:http://journals.cluteonline.com/index.php/RBIS/article/download/4405/4493。乘积和网络是人工智能的前沿,并且很好地适用于类似专家系统的问题。

最后,尝试改变您的技术,使其针对您的问题。

于 2012-10-16T18:35:31.467 回答
2

在我的最后一个项目中,我对Jena RDF推理引擎有了一些经验。基本上,你用它做的就是创建一种知识库,其中包含“如果用户选择了这个答案,他就具备这种素质”和“如果用户具备这些素质,他可能适合这份工作”之类的规则。将答案添加到系统中可以让您查询他的当前状态并相应地调整问题。用它创建概念证明非常容易,比一堆 if-else 更容易,如果你的教授喜欢 prolog-ish 风格的东西,他们会喜欢它。

于 2012-10-14T07:39:21.140 回答
1

程序永远不会比编写程序的人更聪明。所以,我会首先使用已经构建和开源的集体智慧。

将您的一组已知数据点作为输入传递给 Apache Mahout 的PearsonCorrelationSimilarity,并使用输出来预测最匹配的课程。除了开源和可扩展之外,您还可以记录结果并将其反馈给系统,以随着时间的推移提高准确性。很难达到这种性能水平,因为调整一个开箱即用的算法或用你自己的算法替换它比处理一堆 if else 条件要容易得多。

我建议读这本书。它包含一个如何使用 PearsonCorrelationSimilarity 的示例。

Mahout 还内置了推荐算法,例如NearestNeighborClusterSimilarity ,可以进一步简化您的解决方案。

书中有一个很好的入门代码。您可以在此基础上进行构建。

学生证书、兴趣测试问题和答案是输入。职业选择是您可以与输入相关联的输出。现在这是一种非常简单的方法,但一开始可能没问题。最终,您将不得不应用 Amit 建议的分类器技术,而 Mahout 也可以帮助您。

于 2012-10-13T18:06:21.190 回答
1

正如@amit 建议的那样,贝叶斯分析可以为您提供下一个问题的指导。动态测试的另一个缺陷是人为的阈值(“如果你的分数是 28,你就属于这个类别,如果你的分数是 27,你不是”),模糊逻辑可以帮助解决这个问题。模糊逻辑的另一个好处是添加新类别相对容易,因为只要求领域专家提供定性评估,而不是定量阈值。

于 2012-10-13T21:41:42.460 回答
1

Drools 可以通过网络使用,但要小心;它可能有点难以配置,并且可能对您的应用程序造成严重的过度杀伤。它是一种“企业”类型的解决方案,专注于规则管理,而不是规则执行。

Drools 是一个“IF-THEN”系统,几乎所有规则引擎都使用 Rete 算法。 http://en.wikipedia.org/wiki/Rete_algorithm - 所以如果你最初的问题是关于如何不使用 IF-THEN 系统,那么 Drools 不是正确的选择。现在,Drools 的 Solver 和 Planner 部分不是 IF-THEN 算法,但这不是主要的 Drools 算法。

也就是说,对于您的应用程序来说,这似乎是一个合理的选择。只是不要期望那些自认为是专家的人认为它是一个“智能”系统。规则引擎通常用于编纂(即制作软件)业务规则和法规,例如“您是否应该获得抵押贷款批准”或“您的汽车保险费是多少”等等。“你应该做什么工作”是同样的合理应用。

如果您想添加更多类似智能的 AI,这里有一些想法

  • 使用机器学习从用户那里获得关于早期推荐的反馈。因此,如果有人喜欢或讨厌某个建议,请将其重新添加为该人的特征。您现在正在做一些基本的反馈/强化学习(贝叶斯、神经网络),以尝试更好地将人分类为职业。

  • 考虑你问这个人的问题。你需要问所有的问题吗?如果您可以根据他们的回答来改变问题的流程(通过估计他们是什么样的人),那么您正在尝试学习为推荐提供最有用知识的一系列问题。

如果您想要特定的软件,请查看 Weka http://www.cs.waikato.ac.nz/ml/weka/ - 它有许多很棒的分类算法。它是一个 Java 库,因此您可以轻松地在 Web 应用程序中使用它。

祝你好运。

于 2012-10-17T12:09:51.697 回答