2012-12-09 57 views
15

可能重複:
Text Classification into Categories通過機器學習非常簡單的文本分類?

我目前工作的一個解決方案,使食物的種類與10K餐館基於其描述數據庫服務。我使用關鍵字列表來決定提供哪種食物。

我讀了一點關於機器學習的知識,但我根本沒有實際經驗。任何人都可以向我解釋如果/爲什麼它會更好地解決這樣的簡單問題?我發現準確性比表現更重要!

簡單的例子:

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

可能的描述可能是:

「香港花園餐廳提供美味的,價格合理的中國給我們的客戶。如果你發現你有一個突然的渴望。 ,麪條大豆在星期六晚上8點,別擔心!我們是每週七天營業並提供結賬服務。你可以得到薯條這裏還有!」

+3

這裏很難提出一個實際的建議......這是一個相當具體的問題......你可以使用自然語言處理(如'nltk')來獲得「名詞」,然後使用'pybrain'來訓練一個神經網絡,但最終,這是出於商業目的,我不能依靠機器學習來完全準確,我傾向於考慮將數據庫分成500塊,並僱用20人一天工作 –

+1

(對喬恩克萊門茨的+1),而不是僱用20人,我可能會自己給1-2人標籤500,然後使用機械特克(或競爭者)來標記其餘人,使用標記的案例作爲地面真相以及檢查turkers工作的冗餘分配。 – MattBagg

回答

56

你的確描述分類問題,可以用機器學習來解決。

在這個問題上,你的功能描述中的話。你應該使用Bag Of Words模型 - 這基本上是說的話和他們的出現爲每個單詞的數量是最重要的分類過程

解決您的問題,下面是你應該做的步驟:

  1. 創建一個特徵提取器 - 給定一個餐館的描述,將返回「特徵」這個餐廳(文獻中記爲實施例)的(下袋的詞模型上面所解釋的)。
  2. 手動標註一組例子,每次都會與所需的類標記(中國,比利時,垃圾食品,...)
  3. 餵你的標識樣本爲學習算法。它會生成分類器。從個人經驗來看,SVM通常會給出最好的結果,但是還有其他選擇,例如Naive Bayes,Neural NetworksDecision Trees(通常使用C4.5),各有其優點。
  4. 當一個新的(未標記的)示例(餐廳)到來時 - 提取特徵並將其提供給分類器 - 它會告訴您它認爲是什麼(通常 - 分類器的正確概率是多少)。

評價:
你的算法的評估可以用cross-validation來完成,或者一個分隔條件設定測試出你的標識樣本,將僅用於評估算法的精確程度。


優化:

從個人的經驗 - 這裏有一些優化,我發現有助於特徵提取:

  1. Stemming和消除stop words通常有很大幫助。
  2. 使用Bi-Grams傾向於提高準確性(儘管顯着增加了特徵空間)。
  3. 一些分類器容易出現大的特徵空間(不包括SVM),有一些方法可以克服它,例如降低特徵的維度。 PCA是一件可以幫助你的東西。 Genethic Algorithms(經驗上)也非常適合子集選擇。

庫:

不幸的是,我不是跟蟒蛇不夠流利,但這裏有一些庫,可能會有所幫助:

  • Lucene可能會幫助你很多例如文本分析 - 詞幹可以用EnglishAnalyzer完成。有一個名爲PyLucene的lucene python版本,我相信這可能會幫助你。
  • Weka是一個開源庫,爲機器學習實現了許多有用的功能 - 包括許多分類器和功能選擇器。
  • Libsvm是一個實現SVM算法的庫。
+4

我不確定「容易出現大特徵空間」是什麼意思,但是LibSVM並不是一個非常好的文本分類選擇,因爲它的訓練算法在樣本數量中標度爲O(n³)。同樣的作者,Liblinear對於這類任務來說要好得多。我爲自己的項目所開發的廣告:[scikit-learn](http://scikit-learn.org)提供Python綁定,以及幾乎所有其他算法的實現。 –