2013-05-29 11 views
5

Così ho lavorato su un progetto di elaborazione del linguaggio naturale in cui ho bisogno di classificare diversi stili di scrittura. Supponendo che le caratteristiche semantiche dei testi siano già state estratte per me, ho intenzione di usare Weka in Java per addestrare i classificatori SVM usando queste caratteristiche che possono essere usate per classificare altri testi diversi.Elaborazione del linguaggio naturale - Conversione di funzionalità di testo in vettori Feature

La parte su cui ho problemi è che per addestrare un SVM, le funzionalità devono essere convertite in un vettore di funzionalità. Non sono sicuro di come potresti rappresentare caratteristiche come ricchezza di vocabolario, n-grammi, punteggiatura, numero di paragrafi e lunghezza del paragrafo come numeri in un vettore. Se qualcuno potesse indicare nella giusta direzione, sarebbe molto apprezzato.

+0

Non sai esattamente cosa stai cercando, ma spero che il mio piccolo esempio ti possa aiutare. In bocca al lupo. –

risposta

5

io non sono sicuro di quello che ha cura dei suoi attributi possono assumere, ma forse questo esempio vi aiuterà a:

Supponiamo stiamo conducendo un esperimento di apprendimento supervisionato per cercare di determinare se un periodo segna la fine di una frase oppure no, EOS e NEOS rispettivamente. I dati di allenamento è venuto da frasi normali in un formato stile di paragrafo, ma sono stati trasformati per il seguente modello vettore:

  • Colonna 1: Classe: End-of-frase o Non-End-of-Sentence
  • Colonne 2-8: le parole +/- 3 che circondano il periodo in questione
  • colonne 9,10: il numero di parole a sinistra/destra, rispettivamente, del periodo precedente al successivo delimitatore di frase attendibile (ad esempio?,! O un segno di paragrafo).
  • Colonna 11: il numero di spazi dopo il periodo.

Naturalmente, questo non è un problema molto complicato da risolvere, ma è una bella introduzione a Weka. Non possiamo semplicemente usare le parole come caratteristiche (spazio veramente di alta dimensione), ma possiamo prendere i loro tag POS (parte del discorso). Possiamo anche estrarre la lunghezza delle parole, indipendentemente dal fatto che la parola sia stata maiuscola, ecc.

Quindi, è possibile alimentare qualsiasi cosa come dati di test, purché sia ​​possibile trasformarlo nel modello vettoriale sopra ed estrarre le funzionalità utilizzate in .arff.

Il seguente (molto piccola porzione di) .arff file è stato utilizzato per determinare se un periodo in una frase ha segnato la fine del oppure no:

@relation period 

@attribute minus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_three_length real 
@attribute minus_three_case {'UC','LC','NA'} 
@attribute minus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_two_length real 
@attribute minus_two_case {'UC','LC','NA'} 
@attribute minus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute minus_one_length real 
@attribute minus_one_case {'UC','LC','NA'} 
@attribute plus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_one_length real 
@attribute plus_one_case {'UC','LC','NA'} 
@attribute plus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_two_length real 
@attribute plus_two_case {'UC','LC','NA'} 
@attribute plus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'} 
@attribute plus_three_length real 
@attribute plus_three_case {'UC','LC','NA'} 
@attribute left_before_reliable real 
@attribute right_before_reliable real 
@attribute spaces_follow_period real 
@attribute class {'EOS','NEOS'} 

@data 

VBP, 2, LC,NP, 4, UC,NN, 1, UC,NP, 6, UC,NEND, 1, NA,NN, 7, LC,31,47,1,NEOS 
NNS, 10, LC,RBR, 4, LC,VBN, 5, LC,?, 3, NA,NP, 6, UC,NP, 6, UC,93,0,0,EOS 
VBD, 4, LC,RB, 2, LC,RP, 4, LC,CC, 3, UC,UH, 5, LC,VBP, 2, LC,19,17,2,EOS 

Come si può vedere, ogni attributo può assumere qualunque si vuole:

  • real indica un numero reale
  • ho recuperato LC e UC per indicare maiuscole e minuscole, rispettivamente,
  • La maggior parte degli altri valori sono POS tag

È necessario capire esattamente quali sono le vostre caratteristiche sono, e quali valori che verrà utilizzato per rappresentare/classificarli. Quindi, devi trasformare i tuoi dati nel formato definito dal tuo .arff.

Per toccare la domanda di punteggiatura, supponiamo di avere frasi che finiscono tutte in . o ?.Si può avere un attributo chiamato punc, che prende due valori:

@attribute punc {'p','q'} 

non ho usato ? perché questo è ciò che è (convenzionalmente) assegnato quando un punto di dati è mancante. Potremmo avere attributi booleani che indicano se un personaggio o cosa sei stato presente (con 0, 1 o falso, vero). Un altro esempio, ma per la qualità:

@attribute quality {'great','good', 'poor'} 

Come si determina tale classificazione dipende da voi, ma quanto sopra dovrebbe iniziare. In bocca al lupo.

+0

Ho cercato di essere il più dettagliato possibile, ma sono su un tablet: è difficile. –

Problemi correlati