Ricerca testuale: problema con i big data

3

Ho un problema che speravo di poter ottenere un consiglio!

Ho un sacco di testo come input (circa 20 GB di valore, non MASSIVE ma abbastanza grande). Questo è solo testo libero, non strutturato.

Ho un 'elenco di categorie'. Voglio elaborare il testo e fare il riferimento incrociato degli elementi nell'elenco delle categorie e generare le categorie per ogni corrispondenza, ad es.

Inserisci testo

La rapida volpe marrone ha investito il cane pigro.

Ricerca categoria

Colore

Rosso | Marrone | Verde

Velocità

Lento | Veloce | Pigro | Veloce

Output previsto

Colore - Marrone

Velocità - Veloce, pigro

Per aggiungere alla complessità del problema, il testo sorgente probabilmente non corrisponde esattamente alle categorie, ad es. qui sarà applicato un algoritmo di corrispondenza fuzzy di sorta.

Voglio utilizzare la tecnologia "Big data" per risolvere questo problema (indipendentemente dal fatto che abbia davvero bisogno di big data non è la domanda - è un obiettivo secondario).

I miei pensieri sono di utilizzare Hadoop Map / Reduce with Lucene per eseguire la corrispondenza fuzzy.

Che ne pensi? Mi piace la base?

Grazie mille - QUALSIASI consiglio apprezzato !!

Duncan

    
posta Duncan 05.07.2013 - 18:54
fonte

2 risposte

3

Ti consiglio di iniziare con Solr, quindi fai l'apprendimento automatico con Mahout e Hadoop. Solr ti fornirà un'analisi di base del testo attraverso la parola stemming, la normalizzazione (parte inferiore della custodia) e la tokenizzazione. Se abiliti i vettori di termini nello schema, puoi alimentarli direttamente in Mahout e sperimentare con i diversi algoritmi presenti. Un sacco (forse la maggior parte) degli algoritmi di Mahout funzionerà in un maniero distribuito su Hadoop, così come in un maniero pseudo-distribuito localmente mentre lavori.

Una volta che Mahout ha individuato le giuste funzionalità del tuo testo, puoi aggiungerle ai documenti già in Solr e quindi eseguire le query sui facet su di essi.

    
risposta data 08.07.2013 - 17:44
fonte
1

Sembra che il problema più grande che ti rimane sia quello di sviluppare effettivamente le categorie e metterle in pratica.

Dato un insieme di categorie e un insieme di parole "marcatore" per ogni categoria. (Avrai voglia di leggere sullo stemming (girare verdure - > verdure) e fermarti (saltare le parole comuni, senza significato, ecc.) Una buona implementazione dello stelo che puoi trovare sarà Porter2 o Krovetz, ma questo dipende dalla lingua.

In definitiva, ciò dipende dall'avere categorie - in Machine Learning, queste sono etichette e una serie di funzioni che si usano per trasformare i dati in input in una funzione che restituisce le etichette. In un certo senso, sembra che tu voglia che le tue funzionalità siano associate a un determinato set e le tue etichette corrisponderanno a 1: 1 con le funzioni e consentirai più etichette su ciascuna di esse.

Detto questo, lo streaming di 20 GB di dati, in particolare se lo si partiziona su una macchina a 4 core piuttosto comune, andrà rapidamente. Ti consiglio di prendere una porzione di circa 100 frasi e di sviluppare i tuoi dati di allenamento e test. Quindi spostalo su Hadoop, se sei interessato. Quando i dati diventano grandi, assicurati che i tuoi esperimenti inizino a breve.

mappa: (sentence, sentence_id) -> (category, sentence_id)

riduci: (sentence_id, '(category, category, ...))

    
risposta data 05.07.2013 - 23:08
fonte

Leggi altre domande sui tag