Abbiamo bisogno di un modulo di classificazione dei contenuti. Il classificatore bayesiano sembra essere quello che sto cercando. Dovremmo andare per Orange o NLTK?Orange vs NLTK per la classificazione dei contenuti in Python
risposta
Come dimostrato dalla documentazione, l'implementazione di Naive Bayes in ogni libreria è semplice da utilizzare , quindi perché non eseguire i dati con entrambi e confrontare i risultati?
Sia Orange che NLTK sono entrambe librerie mature e stabili (più di 10 anni di sviluppo per ciascuna libreria) originati in grandi università; condividono alcune funzionalità comuni principalmente gli algoritmi di Machine Learning . Oltre a ciò, sono molto diversi per portata, scopo e implementazione.
Orange è indipendente dal dominio - non diretto verso una particolare disciplina accademica o dominio commerciale, invece si pubblicizza come data mining completo e piattaforma ML. Il focus è sugli strumenti e non sull'applicazione di tali strumenti in una particolare disciplina.
Le sue caratteristiche includono IO, l'algoritmo di analisi dei dati e una tela di visualizzazione dei dati.
NLTK, d'altra parte, ha iniziato come e rimane un progetto accademico in un dipartimento di linguistica computazionale di una grande università. L'attività che hai citato (classificazione del contenuto del documento) e il tuo algoritmo di scelta (Naive Bayesian) sono praticamente al centro delle funzionalità di NLTK. NLTK infatti ha ha algoritmi ML/Data Mining ma è solo perché hanno una particolare utilità nella linguistica computazionale.
NLTK naturalmente include alcuni algoritmi ML ma solo perché hanno utilità nella linguistica computazionale, insieme con parser documento, tokenizers, parte-di-speech analizzatori, ecc .-- tutte che comprendono NLTK.
Forse l'implementazione di Naive Bayes in Orange è altrettanto buona, sceglierei comunque l'implementazione di NLTK perché è chiaramente ottimizzata per l'attività specifica che hai menzionato.
Esistono numerose esercitazioni su NLTK e in particolare per Naive Bayes per la classificazione dei contenuti . Un post sul blog da Jim Plus e un altro su streamhacker.com, ad esempio presenta eccellenti esercitazioni per l'utilizzo di Naive Bayes di NLTK; il secondo include una discussione riga-per-riga del codice richiesto per accedere a questo modulo. Gli autori di entrambi questi post riportano buoni risultati utilizzando NLTK (92% nel primo, 73% nel secondo).
Non so Arancione, ma +1 per NLTK:
ho successivamente utilizzato gli strumenti di classificazione in NLTK per classificare il testo e metadati relativi. Bayesian è l'impostazione predefinita, ma esistono altre alternative come Entropia massima. Essendo anche un kit di strumenti, puoi personalizzare come meglio credi, ad es. creando le tue caratteristiche (che è quello che ho fatto per i metadati).
NLTK ha anche un paio di buoni libri, uno dei quali è disponibile sotto Creative Commons (così come O'Reilly).
NLTK è un toolkit che supporta un modello a quattro stato di elaborazione del linguaggio naturale:
- creazione di token: il raggruppamento personaggi come parole. Questo spazia dalle robe regex alle contrazioni come "can not"
- Tagging. Questo sta applicando i tag di parte del discorso ai token (ad esempio "NN" per il nome, "VBG" per il verbo gerund). Questo è tipicamente fatto allenando un modello (ad esempio Hidden Markov) su un corpus di addestramento (cioè una grande lista di frasi scritte a mano).
- Chunking/Parsing. Questo sta prendendo ogni frase taggata e estraendo le caratteristiche in un albero (ad es. Questo può essere in accordo con una grammatica scritta a mano o con una formazione su un corpus.
- Estrazione informazioni. Questo sta attraversando l'albero ed estraendo i dati. Questo è dove il tuo specifico frutto arancione = sarebbe stato fatto.
NLTK supporta WordNet, un enorme dizionario semantico che classifica le parole. Quindi ci sono 5 definizioni di nomi per arancione (frutta, albero, pigmento, colore, fiume in Sud Africa). Ognuno di questi ha uno o più 'percorsi hypernym' che sono gerarchie di classificazioni. Per esempio. il primo senso di 'arancione' ha due percorsi:
- arancione/Citrus/edible_fruit/frutta/reproductive_structure/plant_organ/plant_part/natural_object/intero/oggetto/physical_entity/entità
e
- arancione/citrus/edible_fruit/produrre/cibo/solido/materia/physical_entity/entità
a seconda delle appli Nel dominio cationico è possibile identificare l'arancione come un frutto, un alimento o una cosa vegetale. Quindi puoi usare la struttura ad albero chunked per determinare di più (chi ha fatto cosa al frutto, ecc.)
Sempre stupito dalla profondità delle risposte, arrivo qui, grazie. – philgo20
Sono un esordiente totale in questo campo. Quello che vogliamo fare è classificare il contenuto in categorie in base alle funzionalità presenti nel testo, anche se il nome della categoria non è una delle caratteristiche. (Vuoi classificare l'arancione come evento di frutta se la parola "frutto" non è nel testo.) Dovremmo cercare un tipo specifico di classificazione o Naive Bayes è quello che stiamo cercando? – philgo20
Dovrei forse aggiungere che il risultato dovrebbe essere più categorie. Ciò vanifica lo scopo di Naive Bayes? Il metodo Fisher è più appropriato in questo caso? – philgo20