通过机器学习进行非常简单的文本分类



可能的重复:
文本分类到类别

我目前正在开发一个解决方案,根据一万家餐厅的描述,在一个数据库中获取所提供的食物类型。我用关键词列表来决定供应哪种食物。

我读了一些关于机器学习的书,但我根本没有实际经验。有人能向我解释一下,对于这样一个简单的问题,这是否/为什么是更好的解决方案吗?我发现准确性比性能更重要!

简化示例:

["China", "Chinese", "Rice", "Noodles", "Soybeans"]
["Belgium", "Belgian", "Fries", "Waffles", "Waterzooi"]

一种可能的描述是:

"洪花园餐厅为我们的顾客提供美味、价格合理的中国菜。如果你发现你突然想吃大米面条大豆在周六晚上8点,别担心!我们每周七天营业,提供外卖服务。您也可以在这里获得薯条!">

您确实在描述一个分类问题,该问题可以通过机器学习来解决。

在这个问题中,你的特征就是描述中的单词。您应该使用Bag Of Words模型,该模型基本上说,单词及其每个单词的出现次数对分类过程至关重要。

要解决您的问题,以下是您应该执行的步骤:

  1. 创建一个特征提取器-给出一个餐厅的描述,返回该餐厅的"特征"(在上面解释的Bag of Words模型下)(在文献中表示为示例)
  2. 手动标记一组示例,每个示例都将标记所需类别(中文、比利时、垃圾食品…)
  3. 将标记的示例输入到学习算法中。它将生成一个分类器。根据个人经验,SVM通常会给出最好的结果,但也有其他选择,如朴素贝叶斯、神经网络和决策树(通常使用C4.5),每个都有自己的优势
  4. 当一个新的(未标记的)例子(餐厅)出现时——提取特征并将其提供给你的分类器——它会告诉你它认为它是什么(通常——分类器正确的概率是多少)

评估:
算法的评估可以通过交叉验证来完成,或者将测试集从标记的示例中分离出来,这些示例仅用于评估算法的准确性。


优化:

根据个人经验,以下是我发现有助于特征提取的一些优化:

  1. 精简和消除停止语通常有很大帮助
  2. 使用双语法倾向于提高准确性(尽管显著增加了特征空间)
  3. 一些分类器倾向于大的特征空间(不包括SVM),有一些方法可以克服它,例如降低特征的维数。PCA是一种可以帮助你的方法。遗传算法在子集选择方面(从经验上)也很好

库:

不幸的是,我对python不够流利,但这里有一些库可能会有所帮助:

  • Lucene可能会在文本分析方面帮你很多忙,例如,词干可以用EnglishAnalyzer来完成。有一个名为PyLucene的lucene的python版本,我相信它可能会帮助你
  • Weka是一个开源库,它为机器学习实现了许多有用的东西——包括许多分类器和特征选择器
  • Libsvm是一个实现SVM算法的库

最新更新