2012-12-09 13 views
15

Eventuali duplicati:
Text Classification into CategoriesClassificazione del testo molto semplice con l'apprendimento automatico?

Attualmente sto lavorando su una soluzione per ottenere il tipo di cibo servito in un database con 10k ristoranti in base alla loro descrizione. Sto usando liste di parole chiave per decidere quale tipo di cibo viene servito.

Ho letto un po 'di apprendimento automatico ma non ho alcuna esperienza pratica con esso. Qualcuno può spiegarmi se/perché sarebbe una soluzione migliore per un semplice problema come questo? Trovo l'accuratezza più importante delle prestazioni!

esempio semplificato:

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

una possibile descrizione potrebbe essere:

"di Hong Garden Restaurant con prodotti salati, a prezzi ragionevoli cinese ai nostri clienti Se si scopre di avere una voglia improvvisa per. riso, noodles o soia alle 8 di sabato sera, non preoccuparti! aperto sette giorni su sette e offre il servizio di carryout. È possibile ottenere patatine qui pure!"

+3

È difficile fare un suggerimento pratico qui ... È un problema piuttosto specifico ... È possibile utilizzare l'elaborazione del linguaggio naturale (come 'nltk') per ottenere" nomi ", e quindi usare' pybrain' per addestrare una rete neurale, ma alla fine, se questo fosse per scopi commerciali e non potrei fare affidamento sull'apprendimento automatico per essere completamente accurato, sarei incline a pensare di dividere il DB in blocchi di 500 e impiegare 20 persone per un giorno lavoro –

+1

(+1 a Jon Clements) e invece di assumere 20 persone, potrei avere 1-2 persone possibilmente me stesso per etichettare 500 e poi usare turk meccanico (o un concorrente) per etichettare il resto, usando i casi etichettati come verità fondamentale e assegnazioni ridondanti per controllare il lavoro dei turkers. – MattBagg

risposta

56

si sono infatti descrivendo una classificazione problema , che può essere risolto con l'apprendimento della macchina.

In questo problema, le vostre caratteristiche sono le parole del descrizione. . si consiglia di utilizzare il modello Bag Of Words - che sostanzialmente dice che le parole e il loro numero di occorrenze di ogni parola è ciò che conta per il processo di classificazione

per risolvere il problema, qui sono i passi che si dovrebbe fare:

  1. creare una funzione di estrattore - che, data la descrizione di un ristorante, restituisce i "caratteristiche" (sotto il modello della borsa di parole ha spiegato sopra) di questo ristorante (indicato come esempio in letteratura).
  2. etichettare manualmente una serie di esempi, ognuno sarà etichettato con il classe desiderata (cinese, belga, cibo spazzatura, ...)
  3. alimentare il vostro esempi etichettati in un algoritmo di apprendimento. Sarà generare un classificatore. Dall'esperienza personale, SVM di solito dà i risultati migliori, ma ci sono altre scelte come Naive Bayes, Neural Networks e Decision Trees (di solito è utilizzato il C4.5), ognuna ha il suo vantaggio.
  4. Quando arriva un nuovo esempio (ristorante) (estraibile), estrae le caratteristiche e lo invia al classificatore, che ti dirà cosa pensa di essere (e di solito, qual è la probabilità che il classificatore sia corretto).

Valutazione:
Valutazione del vostro algoritmo può essere fatto con cross-validation, o che separa un test di cui i vostri esempi etichettati che verrà utilizzata solo per valutare come precisa l'algoritmo è.


Ottimizzazioni:

Per esperienza personale - qui sono alcune ottimizzazioni che ho trovato utile per l'estrazione delle caratteristiche:

  1. Stemming ed eliminando stop words di solito aiuta molto.
  2. L'utilizzo di Bi-Grams tende a migliorare l'accuratezza (sebbene aumenti significativamente lo spazio delle funzioni).
  3. Alcuni classificatori sono inclini a spazio per feature di grandi dimensioni (SVM non incluso), esistono alcuni modi per superarlo, come la riduzione della dimensionalità delle funzionalità. PCA è una cosa che ti può aiutare. Genethic Algorithms sono anche (empiricamente) abbastanza buoni per la selezione di sottoinsiemi.

Biblioteche:

Purtroppo, non sono abbastanza fluente con python, ma qui ci sono alcune librerie che potrebbero essere utili:

  • Lucene potrebbe aiutare molto con l'analisi del testo, ad esempio, può essere ottenuta con EnglishAnalyzer. C'è una versione python di lucene chiamata PyLucene, che credo possa aiutarti.
  • Weka è una libreria open source che implementa molte cose utili per l'apprendimento automatico: sono inclusi molti classificatori e selettori di funzioni.
  • Libsvm è una libreria che implementa l'algoritmo SVM.
+4

Non sono sicuro di cosa intenda per "incline agli spazi di grandi dimensioni", ma LibSVM non è una scelta molto buona per la classificazione del testo perché il suo algoritmo di addestramento scala come O (n³) nel numero di campioni. Liblinear, dagli stessi autori, è molto meglio per questo tipo di compito. Annuncio sfacciato per il mio progetto: [scikit-learn] (http://scikit-learn.org) offre binding Python per entrambi, oltre a implementazioni di quasi tutti gli altri algoritmi suggeriti. –