机器学习非常简单的文本分类?

时间:2012-12-09 14:20:41

标签: python algorithm machine-learning text-analysis

  

可能重复:
  Text Classification into Categories

我目前正致力于一个解决方案,根据他们的描述,在拥有10k家餐馆的数据库中提供食物类型。我正在使用关键字列表来决定提供哪种食物。

我读了一些关于机器学习的内容,但我根本没有实际经验。任何人都可以向我解释是否/为什么它会更好地解决这样一个简单的问题?我觉得准确性比表现更重要!

简化示例:

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

可能的描述可能是:

“Hong's Garden Restaurant为我们的顾客提供咸味,价格合理的中文。如果您发现您突然渴望 星期六晚上8点面条大豆,不用担心!我们每周七天开放,并提供结转服务。您也可以在这里获得薯条!“

1 个答案:

答案 0 :(得分:57)

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

在此问题中,您的功能是说明中的字词。您应该使用Bag Of Words模型 - 它基本上表示每个单词的单词及其出现次数对分类过程至关重要。

要解决您的问题,请执行以下步骤:

  1. 创建特征提取器 - 给出餐馆的描述,返回该餐厅的“特征”(在上面解释的Bag Of Words模型下)(在文献中表示为示例)。
  2. 手动标记一组示例,每个都会标有所需的类别(中文,比利时,垃圾食品......)
  3. 将标记的示例导入学习算法。它将生成分类器。根据个人经验,SVM通常会提供最佳效果,但还有其他选择,例如Naive BayesNeural NetworksDecision Trees(通常使用C4.5),每个都有自己的优势。
  4. 当一个新的(未标记的)示例(餐馆)出现时 - 提取功能并将其提供给您的分类器 - 它会告诉您它的想法(通常 - 分类器的正确概率是多少)。

  5. <强>评价为: 您可以使用cross-validation对算法进行评估,或者从标记示例中分离测试集,这些测试集仅​​用于评估算法的准确程度。


    <强>优化:

    从个人经验来看 - 这里有一些我认为对特征提取有帮助的优化:

    1. Stemming并且消除stop words通常会有很大帮助。
    2. 使用Bi-Grams可以提高准确性(但会显着增加功能空间)。
    3. 某些分类器容易出现大的特征空间(不包括SVM),有一些方法可以克服它,例如降低特征的维数。 PCA是一件可以帮助你的东西。 Genethic Algorithms(经验上)也非常适合子集选择。

    4. <强>库:

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

      • Lucene可能会对文本分析提供很多帮助,例如 - 可以使用EnglishAnalyzer进行词干分析。有一个名为PyLucene的lucene的python版本,我相信它可以帮助你。
      • Weka是一个开源库,为机器学习实现了许多有用的东西 - 包括许多分类器和功能选择器。
      • Libsvm是一个实现SVM算法的库。