Question Classification:
Ho scaricato le domande in inglese dal sito TREC competition (circa 5000 domande + 1000 domande per il test). La classificazione alla quale mi riferisco è la classificazione gross-grained con 6 classi Li and Roth (2005) (HUM, DESC, LOCATION,ABBREVIATION,ENTITY,NUMERIC).
Una funzione di preprocessing esegue:
For question in Questions:
Rimozioni di caratteri inutili("#@*]...etc").
Estrazione del clause master della domanda usando la libreria python nlp.
Tokenization.
Opzionale: Sostituzione delle parole rare con la stringa "UKN". Le parole rare vengono identificate mediante coefficiente tfidf
Calcolo del pos-tag di ogni parola usando la libreria treetaggerwrapper di python
Sostituzione dei nomi propri, avverbi, aggettivi mediante il relativo pos-tag ('NP','NNP','NNPS','RB','RBR','RBS','JJ','JJR','JJS'....)
Non vengono sostituiti i i pronomi WH (who,where,what,how)
Noun avnd Verbs vengono sostituite con il relativo lemma
Mediante la libreria gensim sostituisco ogni parola con il relativo vettore (word2vec).
Padding di ogni domanda per raggiungere una lunghezza fissa(nel mio caso 25 parole) per poterla dare in input alla rete nurale.
End For
LOCATION:What is the highest mount in Italy diventa --> What be DT ADJ mount IN Italy
LOCATION: What is the greatest mount in Italy diventa --> What be DT ADJ mount IN Italy
La matrice di vettori così ottenuta dal preprocessing, viene data in ingresso ad una rete neurale LSTM. Ottengo un accuracy del’86-87 % (su un test di domande del 20%) che non riesco proprio a migliorare. Mi piacerebbe raggiungere almeno un 90%. Ho provato anche ad utilizzare RNN ma con risultati peggiori.
Vorrei non utilizzare SVM con TFIDF per la classificazione
E’ possbilie migliorare?
valerio