Diario de instalación de SOPA
Instrucciones para instalar SOPA
Clonar el código de github
git clone https://github.com/dbuscaldi/SOPA
Este es el directorio base de SOPA (o $SOPA_HOME
)
Instalar software externo (sugerencia pornerlo dentro del directorio de SOPA)
Wordnet 3.0
wget http://wordnetcode.princeton.edu/3.0/WordNet-3.0.tar.gz tar xzvf WordNet-3.0.tar.gz
Modelos de la libreria NLPCore Stanford
El objetivo es pasar la librería de modelos al directorio lib de SOPA
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2014-08-27.zip unzip stanford-corenlp-full-2014-08-27.zip cp stanford-corenlp-full-2014-08-27/stanford-corenlp-3.4.1-models.jar lib/
Indices
Descargar (de la máquina de Davide o de la de Iván) el archivo
IRindexes.sopa.semeval.clean.tar.gz (? Gb; md5sum=?)
Este archivo contiene los siguientes recursos:
- DBPedia index
- <code>$SOPAHOME/indexes/DBPediaindexed/* (2.7 Gb)</code>
- AQUAINT IR indexes
- <code>$SOPAHOME/indexes/AQUAINTindexed/* (2.8 Gb)</code>
- Google unigrams
- <code>$SOPAHOME/indexes/GoogleW1T (177 Mb)</code> - UkWaC * <code>$SOPAHOME/indexes/ukwac (22 Gb)</code>
- EFE IR indexes
- <code>$SOPAHOME/indexes/EFEUN_indexed (2.4 Gb)</code>
Descomprimirlos en $SOPA_HOME
$ tar xzvf IRindexes.sopa.semeval.clean.tar.gz .
Compilar el código
Compilar todo el código fuente (Si alguien puede producir una línea más pequeña sería una buena idea)
$ mkdir bin $ javac -classpath src:lib/* -d bin src/jweb1t/*.java \ src/fr/lipn/sts/semantic/*.java src/fr/lipn/sts/twitter/*.java \ src/fr/lipn/sts/ckpd/*.java src/fr/lipn/sts/align/sphynx/*.java \ src/fr/lipn/sts/align/sultan/*.java src/fr/lipn/sts/geo/*.java \ src/fr/lipn/sts/syntax/*.java src/fr/lipn/sts/basic/*.java \ src/fr/lipn/sts/tools/*.java src/fr/lipn/sts/ner/*.java \ src/fr/lipn/sts/*.java
Similaridad de Sultan como web service
Primero hay que instalar la librería de CoreNLP para python (preferentemente ponerla en el directiorio lib de SOPA):
git clone git://github.com/dasmith/stanford-corenlp-python.git cd stanford-corenlp-python/ wget http://nlp.stanford.edu/software/stanford-corenlp-full-2014-08-27.zip unzip stanford-corenlp-full-2014-08-27.zip
Además hay que remplazar la línea 107 de corenlp.py
, por la siguiente:
rel, left, right = split_entry
Segundo hay que instalar la librería de alineación de Sultan (preferentemente ponerla en el directorio lib de SOPA):
git clone https://github.com/ivanvladimir/monolingual-word-aligner.git sudo easy_install Flask
Configurar la herramienta
Editar el archivo config.xml localizado en el directorio SOPA/res. Este es una muestra con los pasos anteriores
<config> <lang>en</lang> <!-- language --> <wnhome>WordNet-3.0/</wnhome> <!-- location of WordNet --> <bnhome></bnhome> <!-- location of babelnet --> <DBPedia lang="en">indexes/DBPedia_indexed</DBPedia> <!-- location of DBpedia index --> <IRindex lang="en">indexes/AQUAINT_indexed</IRindex> <!-- location of IR index --> <Ngrams lang="en">indexes/googleNgramsEN.db</Ngrams> <!-- location of SQLITE3 database of Google bigrams and trigrams --> <GoogleTF>1gms/vocab_cs</GoogleTF> <!-- location of list of Google unigrams --> <ssim>pg1</ssim> <!-- Structural similarity measure: pg1, pg2, pg3, wp --> <ic>jc</ic> <!-- information content measure: jc or lin --> </config>
Probar el código
Ejecutar servicios
Dado que estamos utilizando la librería de Sultan y esta a su vez usa la de nlpcore de python hay que levantarlos para que los pueda usar SOPA.
Para hacer lo siguiente ejecuart los siguientes comandos (suponiendo que se instalaron en el directorio lib de SOPA).
cd lib/stanford-corenlp-python python corenlp.py & cd ../monolingual-word-aligner/ python service.py &
Nota: estos servicios necesitan NLTK y en particular los stopwords cargados desde la linea de comando de Python con nltk.download().
TestCoreNLP
La herramienta de prueba, por el momento tiene un error y hay que agregar la siguiente línea en el archivo $SOPA_HOME/src/fr/lipn/sts/TestCoreNLP.java
:
GoogleTFFactory.init(SOPAConfiguration.GoogleTF);
Una opción es:
GoogleTFFactory.init(SOPAConfiguration.GoogleTF); StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Despues recompilar, y ejecutar
Java -Xmx2048m -Dfile.encoding=UTF-8 -classpath bin:lib/* fr.lipn.sts.TestCoreNLP
Debe funcionar cargar la mayoría de las librerías (Por el momento marca un error con la interacción con Bing)
UkWaCIndexer
Cambiar las líneas 22 y 23 del archivo UkWaCIndexer.java en el directorio $SOPAHOME/src/fr/lipn/sts/ir/indexing/
<code>
String filename=“/media/expT1/corpora/WaCky/en/ukwac/cleaned_pre.pos.corpus”;
String dest=“/media/expT1/index/ukwac”;
</code>
Sustituir por:
<code>
String filename=“$SOPAHOME/indexes/ukwac/cleanedpre.pos.corpus”;
String dest=“$SOPA_HOME/indexes/ukwac”;
</code>
OJO: hay que reemplazar $SOPA_HOME por la ruta absoluta en donde está instalada SOPA
=== SemanticComparer ===
* Cambiar la línea 114 en
$SOPAHOME/src/fr/lipn/sts/SemanticComparer.java
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, sentiment, parse");
por
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner, parse, sentiment");
- Cambiar también la línea 174 del mismo
SemanticComparer.java
Reemplazar
IRSimilarity irswac= new IRSimilarity("/media/expT1/index/ukwac");
por
IRSimilarity irswac= new IRSimilarity("$SOPA_HOME/indexes/ukwac");
cuidando reemplazar $SOPA_HOME
por la ruta absoluta de la instalación de SOPA.
Y recompilar.
- Para ejecutar el comparador, primero bajar el sistema de pruebas al mismo nivel que SOPA <code> git clone https://github.com/rcln/SemEval </code>
Y para ejecuarlo escoger alguno de los archivos de frases en el sistema de pruebas
java -Xmx2048m -Dfile.encoding=UTF-8 -classpath bin:lib/* fr.lipn.sts.SemanticComparer -f \ ../SemEval/testbed/data/2014/train/STS.2012.train.input.MSRpar.txt
En modo de entrenamiento, hay que agregar la opción -g
y el nombre del archivo .gs de referencia (o gold standard):
$ java -Xmx2048m -Dfile.encoding=UTF-8 -classpath bin:lib/* fr.lipn.sts.SemanticComparer -f \ ../SemEval/english_testbed/data/2014/train/STS.2012.train.input.MSRpar.txt -g \ ../SemEval/english_testbed/data/2014/train/STS.2012.train.gs.MSRpar.txt
Interpretar la salida de SOPA
Cada línea del archivo típico de salida de SOPA corresponde a un par de frases del archivo de entrada. El par es analizado de acuerdo a un conjunto de dieciséis descriptores estructurales. He aquí un ejemplo de una línea típica del archivo de salida de SOPA
0.0 1:0.5799918669836017 2:0.7647590041160583 3:0.721046374948145 4:0.6666666269302368 5:0.7165572664608884 6:0.6992204407643969 7:0.41701820964924186 8:0.7253049656792512 9:1.0 10:0.40990165297573933 11:0.60801467567322 12:0.7913405726936663 13:0.4127906976744186 14:0.5862069129943848 15:0.509259259259 16:41.0
El formato NN:FFFFFF se interpreta como descriptor NN con un valor igual a FFFFFF (El descriptor 0.00 es despreciable). La versión 2015 de SOPA contiene dieciséis descriptores (o si se prefiere features). He aquí la descripción:
- Similaridad de n-gramas (CKPD)
- Similaridad conceptual (WordNet estilo Wu-Palmer)
- Similaridad sintáctica
- Distancia de Levenshtein
- Distancia coseno (tf.idf)
- Entidades nombradas en común (NER overlap)
- Similaridad conceptual (WordNet estilo Jiang-Conrath)
- Similaridad RI (index AQUAINT)
- Similaridad geográfica
- Similaridad Rank-Biased Overlap (índice AQUAINT)
- Similaridad de Entidades nombradas según DBPedia
- Similaridad RI (índice UkWaC)
- Similaridad Skip-grams
- WER de Sphynx
- Similaridad de Sultan
- Similaridad por tamaño de frase
Si SOPA fue ejecutado con la opción -g
de entrenamiento cada línea del archivo de salida va precedida por el gold standard o valor de referencia de la anotación humana para el par de frases en cuestión.
4.000 1:0.5799918669836017 2:0.7647590041160583 3:0.721046374948145 4:0.6666666269302368 5:0.7165572664608884 6:0.6992204407643969 7:0.41701820964924186 8:0.7253049656792512 9:1.0 10:0.40990165297573933 11:0.60801467567322 12:0.7913405726936663 13:0.4127906976744186 14:0.5862069129943848 15:0.509259259259 16:41.0