我正在尝试对一个包含大量对象的列表(在本例中,是来自iTunes App Store的应用程序)进行更具体的分类。例如,目前有很多应用程序被归类为“教育”,但我想将它们进一步细分为生物学、英语、数学等类别。
这是一个人工智能/机器学习问题吗?我在这方面完全没有背景知识,但希望能得到一些资源或建议,了解如何开始这类工作。
回答:
是的,你的理解是正确的。分类是一个机器学习问题,而基于文本数据进行分类则涉及到自然语言处理。
经典的分类问题是使用朴素贝叶斯分类器进行垃圾邮件检测,这非常简单。其基本思路如下:
- 收集大量数据(电子邮件),并按类别(垃圾邮件或非垃圾邮件)标记它们
- 对于每封电子邮件,移除停用词,并获取该邮件中独特词汇的列表
- 现在,对于每个词,计算它出现在垃圾邮件中的概率与出现在非垃圾邮件中的概率(即在垃圾邮件和非垃圾邮件中分别统计其出现次数)
- 现在你有了一个模型——给定一个词,邮件是垃圾邮件的概率。然而,一封邮件包含多个词。在朴素贝叶斯中,你假设这些词是独立出现的(事实证明这是一个不错的假设),并将邮件中所有词的概率相乘。
- 通常,你会将数据分为训练集和测试集,因此你会有一组邮件用于训练模型,然后有一组标记好的数据用于测试,你可以计算精确度和召回率。
我强烈推荐你尝试使用NLTK,这是一个Python的机器学习和自然语言处理库。它非常用户友好,文档和教程也很不错,是进入这个领域的好方法。
编辑:这里有一个解释,说明如何构建一个简单的NB分类器并附有代码。