15

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

我目前正在研究一种解决方案,以根据他们的描述在包含 10k 家餐厅的数据库中获取食物类型。我正在使用关键字列表来决定提供哪种食物。

我读了一点关于机器学习的书,但我根本没有这方面的实践经验。任何人都可以向我解释是否/为什么它会更好地解决像这样的简单问题吗?我发现准确性比性能更重要!

简化示例:

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

一个可能的描述可能是:

“Hong's Garden Restaurant 为我们的顾客提供美味、价格合理的中餐。如果您发现自己在周六晚上 8 点突然想吃 米饭面条大豆,请不要担心!我们 7 天营业一周,提供外卖服务,薯条也可以在这里买!”

4

1 回答 1

57

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

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

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

  1. 创建一个特征提取器- 给出餐厅的描述,返回这家餐厅的“特征”(在上面解释的词袋模型下)(在文献中表示为示例)。
  2. 手动标记一组示例,每个示例都将标有所需的类别(中国、比利时、垃圾食品……)
  3. 将您标记的示例输入到学习算法中。它将生成一个分类器。从个人经验来看,SVM通常会给出最好的结果,但也有其他选择,例如Naive BayesNeural NetworksDecision Trees(通常使用C4.5),各有优势。
  4. 当一个新的(未标记的)示例(餐厅)出现时——提取特征并将其提供给你的分类器——它会告诉你它认为它是什么(通常——分类器正确的概率是多少)。

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


优化:

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

  1. 词干和消除停用词通常有很大帮助。
  2. 使用Bi-Grams往往会提高准确性(尽管会显着增加特征空间)。
  3. 一些分类器容易出现大的特征空间(不包括 SVM),有一些方法可以克服它,例如降低特征的维数。PCA是可以帮助您的一件事。遗传算法也(根据经验)非常适合子集选择。

图书馆:

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

  • Lucene可能会在文本分析方面为您提供很多帮助,例如 - 可以使用EnglishAnalyzer进行词干提取。有一个 python 版本的 lucene 叫做PyLucene,我相信它可以帮助你。
  • Weka是一个开源库,它为机器学习实现了许多有用的东西——包括许多分类器和特征选择器。
  • Libsvm是一个实现 SVM 算法的库。
于 2012-12-09T14:44:46.623 回答