到目前为止,我正在研究我的最后一年项目基于智能网络的职业指导系统我系统的核心功能是
基本上我们的推荐系统会通过参加兴趣测试和用户的学习记录仔细检查用户偏好,并根据这些检查信息,它将为用户提供最佳的职业选择,如BS计算机科学等课程。
当我在委员会面前捍卫我的范围时,他们说“这很简单 if-else ”这个系统不聪明。
我的问题是可以使用哪种AI技术或算法来使该系统智能化。我搜索了很多,但与我的系统相关的论文更为肤浅,他们只是强调理念而不是方法论
我想用Java完成所有工作。如果答案是技术特定的话,这很好。
如果与SO Q& A标准无关,您可以将我的问题转移到任何其他stackexchange站点。
从答案中得到一些想法后,我想用基于规则和推理引擎实现专家系统。现在我想在技术方面更清楚地实现基于规则的引擎。搜索后我发现Drools是最好的,但它是否也与Web应用程序兼容?我还发现Tohu是最好的动态表单生成器(因为这也需要我的项目)。我可以使用tohu与drools来制作我的网络应用程序吗?是否容易实现这种类型的系统?
答案 0 :(得分:4)
如果您有大量问题,则每个问题都可以代表功能。假设您将拥有大量功能,找到满足条件的if-else语句序列很难(回想一下n
个问题的完整树将会{ {1}}"离开" - 代表2^n
这些问题的可能答案,假设每个问题都是肯定/无问题。
由于硬编程以上的内容不够大(而且可能是实际尺寸2^n
- 启发式解决方案有一个位置{{ 3}},特别是Machine Learning。你可以有一个回答你调查的人的样本,一个"专家"说什么是他们最好的职业,让一个算法找到一个一般问题的分类器(如果要将其自动转换为一系列yes-no问题,可以使用决策树和classification problem之类的算法来创建树)。
确定哪些问题实际相关也很重要?性别是否相关?高度相关吗?这些问题也可以使用带有C4.5算法的ML算法来解答(其中一个是feature selection)
关于"技术"方面 - 在java中有一个很好的库 - 名为PCA,它实现了许多分类算法。
您可以提出一个问题(并尝试在项目中找到)哪种分类算法最适合此问题?有些可能性是上面提到的C4.5,{{ 3}},Weka,Naive Bayes,Linear Regression或Neural Networks(通常最适合我)。您可以尝试并使用统计研究和KNN更好地决定使用哪种算法。 SVM是此标准。
编辑:有关第2点的更多详情:
答案 1 :(得分:2)
在我的最终项目中,我对Jena RDF推理引擎有一些经验。基本上,你用它做的是创建一种知识库,其规则如“如果用户选择了这个答案,他就具有那种品质”,“如果用户具有这些品质,他可能会对这项工作有所帮助”。将答案添加到系统中可以让您查询其当前状态并相应地调整问题。使用它创建概念证明非常容易,它比一堆if-else更容易,如果你的教授崇拜prolog-ish风格的东西,他们会喜欢它。
答案 2 :(得分:2)
要满足这些要求,您需要做的就是创建一个简单的学习系统:
最后,尝试对您的技术进行任何改动,使其专门针对您的问题。
答案 3 :(得分:1)
程序永远不会比编写它的人更聪明。所以,我首先会使用已经建立并开源的集体智慧。
将您的一组已知数据点作为输入传递给Apache Mahout的PearsonCorrelationSimilarity,并使用输出来预测哪个课程是最佳匹配。除了开源和可扩展之外,您还可以记录结果并将其反馈给系统,以提高一段时间内的准确性。很难匹配这种性能水平,因为调整开箱即用的算法或者用你自己的算法替换它比处理一堆if else条件要容易得多。
我建议你阅读book。它包含一个如何使用PearsonCorrelationSimilarity的示例。
Mahout还内置了NearestNeighborClusterSimilarity等推荐算法 这可以进一步简化您的解决方案。
书中有一个很好的入门代码。你可以在它上面构建。
学生证书,兴趣测试题和答案都是输入。职业选择是您可以与输入相关联的输出。现在这是一种非常简单的方法,但开始时可能没问题。最终,你将不得不应用Amit建议的分类器技术,Mahout也可以帮助你。
答案 4 :(得分:1)
正如@amit建议的那样,贝叶斯分析可以为您提供下一个问题的指导。动态测试的另一个缺陷是人工阈值(“如果你的分数是28,你就属于这个类别,如果你的分数是27,你就不是”),这是模糊逻辑可以帮助解决的问题。模糊逻辑的另一个好处是添加新类别相对容易,因为域专家只被要求提供定性评估,而不是定量阈值。
答案 5 :(得分: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应用程序中轻松使用它。
祝你好运。